输血评估
This commit is contained in:
parent
54cce95758
commit
83fab3a4d7
12
src/App.vue
12
src/App.vue
@ -5,11 +5,23 @@
|
||||
<script setup lang="ts">
|
||||
import useSettingsStore from '@/store/modules/settings'
|
||||
import { handleThemeStyle } from '@/utils/theme'
|
||||
import { useSysParam } from '@/hooks/useSysParam'
|
||||
|
||||
const { initAllParams } = useSysParam()
|
||||
|
||||
// ========== 在这里统一维护【所有需要全局获取的参数 key】 ==========
|
||||
const GLOBAL_PARAM_KEYS = [
|
||||
'YBZFXMTSXX', // YBZFXMTSXX
|
||||
'HZBQGY', // 患者病情概要是否必填
|
||||
]
|
||||
|
||||
onMounted(() => {
|
||||
nextTick(() => {
|
||||
// 初始化主题样式
|
||||
handleThemeStyle(useSettingsStore().theme)
|
||||
})
|
||||
|
||||
// 获取参数值
|
||||
initAllParams(GLOBAL_PARAM_KEYS)
|
||||
})
|
||||
</script>
|
||||
|
||||
26
src/api/common.ts
Normal file
26
src/api/common.ts
Normal file
@ -0,0 +1,26 @@
|
||||
/**
|
||||
* @file common.ts
|
||||
* @description: 公共接口
|
||||
* @author: w
|
||||
* @since: 2026-06-16
|
||||
*/
|
||||
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 获取参数的值
|
||||
export function getParameterOne(query?: Object) {
|
||||
return request({
|
||||
url: '/bus/common/getParameterOne',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 获取输血前检验项目
|
||||
export function queryLisProject(query?: Object) {
|
||||
return request({
|
||||
url: '/bus/common/queryLisProject',
|
||||
method: 'post',
|
||||
data: query
|
||||
})
|
||||
}
|
||||
@ -3,7 +3,7 @@ import request from '@/utils/request'
|
||||
// 根据住院号获取病人信息
|
||||
export function queryPatInfo(query?: Object) {
|
||||
return request({
|
||||
url: '/doctor/applyBefore/getPatInfo',
|
||||
url: '/bus/doctor/applyBefore/getPatInfo',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
@ -11,7 +11,15 @@ export function queryPatInfo(query?: Object) {
|
||||
// 查询单据信息
|
||||
export function queryPatList(query?: Object) {
|
||||
return request({
|
||||
url: '/doctor/applyBefore/queryList',
|
||||
url: '/bus/doctor/applyBefore/queryList',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
// 查询单个单据信息
|
||||
export function queryPatOne(query?: Object) {
|
||||
return request({
|
||||
url: '/bus/doctor/applyBefore/queryOne',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
@ -19,7 +27,7 @@ export function queryPatList(query?: Object) {
|
||||
// 打印单据信息
|
||||
export function printPat(query?: Object) {
|
||||
return request({
|
||||
url: '/doctor/applyBefore/print',
|
||||
url: '/bus/doctor/applyBefore/print',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
@ -27,7 +35,7 @@ export function printPat(query?: Object) {
|
||||
// 保存信息
|
||||
export function savePat(query?: Object) {
|
||||
return request({
|
||||
url: '/doctor/applyBefore/save',
|
||||
url: '/bus/doctor/applyBefore/save',
|
||||
method: 'post',
|
||||
data: query
|
||||
})
|
||||
@ -35,7 +43,7 @@ export function savePat(query?: Object) {
|
||||
// 修改信息
|
||||
export function updatePat(query?: Object) {
|
||||
return request({
|
||||
url: '/doctor/applyBefore/update',
|
||||
url: '/bus/doctor/applyBefore/update',
|
||||
method: 'post',
|
||||
data: query
|
||||
})
|
||||
@ -43,8 +51,8 @@ export function updatePat(query?: Object) {
|
||||
// 删除信息
|
||||
export function delPat(query?: Object) {
|
||||
return request({
|
||||
url: '/doctor/applyBefore/delete',
|
||||
url: '/bus/doctor/applyBefore/delete',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@ -10,6 +10,16 @@ export function listUser(query: UserQueryParams): Promise<TableDataInfo<SysUser[
|
||||
params: query
|
||||
})
|
||||
}
|
||||
//同步用户数据
|
||||
export function syncUser(query?: Object) {
|
||||
return request({
|
||||
url: '/system/user/syncUser',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 查询用户详细
|
||||
export function getUser(userId?: number): Promise<UserFormDataResult> {
|
||||
|
||||
@ -611,7 +611,7 @@ aside {
|
||||
|
||||
.vxe-table {
|
||||
border: 1px solid #96B8D9 !important;
|
||||
border-top: none !important;
|
||||
// border-top: none !important;
|
||||
/* 蓝色外边框 */
|
||||
border-radius: .5rem;
|
||||
/* 可选:添加边框圆角 */
|
||||
|
||||
@ -73,12 +73,10 @@
|
||||
</div>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { TableColumnCtx } from 'element-plus';
|
||||
import { classCom } from "@/utils/classCom";
|
||||
const aotuSize = classCom.useAutoSize();
|
||||
// @ts-ignore
|
||||
import { useAutoSize } from "@/utils/classCom";
|
||||
const aotuSize = useAutoSize();
|
||||
|
||||
import Sortable from 'sortablejs'; // 引入sortablejs
|
||||
import ts from 'typescript';
|
||||
interface TableColumn {
|
||||
prop?: string;
|
||||
type?: string; // 'selection' | 'index' | undefined
|
||||
|
||||
76
src/hooks/useSysParam.ts
Normal file
76
src/hooks/useSysParam.ts
Normal file
@ -0,0 +1,76 @@
|
||||
import { getParameterOne } from '@/api/common'
|
||||
import { useCommonStore } from '@/store/modules/commonStore'
|
||||
|
||||
// 全局请求加载状态
|
||||
const loading = ref(false)
|
||||
// 请求锁:防止短时间内多次触发初始化
|
||||
let requestLock = false
|
||||
|
||||
|
||||
export function useSysParam() {
|
||||
// 在函数内部再实例化 store,保证 Pinia 已挂载
|
||||
const sysParamStore = useCommonStore()
|
||||
|
||||
/**
|
||||
* 初始化:批量并行请求多个参数
|
||||
* @param paramKeyList 需要请求的参数 key 数组
|
||||
*/
|
||||
const initAllParams = async (paramKeyList: string[]) => {
|
||||
// 已加载 / 请求中,直接终止,避免重复请求
|
||||
if (sysParamStore.isLoaded || requestLock) return
|
||||
|
||||
requestLock = true
|
||||
loading.value = true
|
||||
|
||||
try {
|
||||
// 1. 构建并行请求数组
|
||||
const requestList = paramKeyList.map(key => getParameterOne({ parameterCode: key }))
|
||||
// 2. 并行执行所有接口
|
||||
const resList = await Promise.all(requestList)
|
||||
|
||||
// 3. 组装键值对
|
||||
const resultMap: Record<string, string | number> = {}
|
||||
paramKeyList.forEach((key, index) => {
|
||||
const res = resList[index]
|
||||
if (res.code == 0 && res.data !== null && res.data !== undefined) {
|
||||
resultMap[key] = res.data
|
||||
}
|
||||
})
|
||||
|
||||
// 4. 存入全局 Pinia 缓存
|
||||
sysParamStore.setParamMap(resultMap)
|
||||
} catch (error) {
|
||||
console.error('【系统参数】批量请求失败:', error)
|
||||
} finally {
|
||||
// 释放锁 & 加载状态
|
||||
loading.value = false
|
||||
requestLock = false
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据 key 获取单个参数
|
||||
* @param key 参数键名
|
||||
* @param defaultValue 取不到值时的默认值
|
||||
*/
|
||||
const getParam = (key: string, defaultValue: string | number = '') => {
|
||||
return sysParamStore.paramMap[key] ?? defaultValue
|
||||
}
|
||||
|
||||
/**
|
||||
* 手动刷新所有参数(特殊场景使用:如参数后台更新后)
|
||||
* @param paramKeyList 需要刷新的参数 key 数组
|
||||
*/
|
||||
const refreshAllParams = async (paramKeyList: string[]) => {
|
||||
sysParamStore.clearAllParam()
|
||||
await initAllParams(paramKeyList)
|
||||
}
|
||||
|
||||
return {
|
||||
loading,
|
||||
initAllParams,
|
||||
getParam,
|
||||
refreshAllParams,
|
||||
paramMap: sysParamStore.paramMap
|
||||
}
|
||||
}
|
||||
@ -8,18 +8,36 @@ interface DefaultConfig {
|
||||
}
|
||||
export const useCommonStore = defineStore('commonStore', {
|
||||
state: () => ({
|
||||
|
||||
isLoaded: false,// 是否已完成初始化请求(防重复请求)
|
||||
paramMap: {} as Record<string, string | number>, // 全局参数键值对集合 (参数值)
|
||||
defaultConfig: {} as DefaultConfig, // 存储默认配置
|
||||
}),
|
||||
actions: {
|
||||
setDefaultConfig(config: DefaultConfig) {
|
||||
this.defaultConfig = config
|
||||
},
|
||||
|
||||
// 批量写入参数
|
||||
setParamMap(data: Record<string, string | number>) {
|
||||
this.paramMap = { ...this.paramMap, ...data }
|
||||
this.isLoaded = true
|
||||
},
|
||||
|
||||
// 单个设置参数
|
||||
setSingleParam(key: string, value: string | number) {
|
||||
this.paramMap[key] = value
|
||||
},
|
||||
|
||||
// 清空所有参数(登出/切换账号使用)
|
||||
clearAllParam() {
|
||||
this.paramMap = {}
|
||||
this.isLoaded = false
|
||||
}
|
||||
},
|
||||
// 持久化配置
|
||||
persist: {
|
||||
// 指定要持久化的状态字段
|
||||
pick: ['fingerprint', 'defaultConfig'],
|
||||
pick: ['paramMap', 'defaultConfig'],
|
||||
// 可选配置:自定义存储键名(默认是store的id)
|
||||
// key: 'common_store',
|
||||
// 可选配置:指定存储位置(默认是localStorage 也可以用sessionStorage)
|
||||
|
||||
@ -4,6 +4,8 @@ import { login, logout, getInfo, loginAnonymous } from '@/api/login'
|
||||
import { getToken, setToken, removeToken } from '@/utils/auth'
|
||||
import { isHttp, isEmpty } from "@/utils/validate"
|
||||
import defAva from '@/assets/images/profile.jpg'
|
||||
import { useCommonStore } from '@/store/modules/commonStore'
|
||||
|
||||
|
||||
interface RoleInfo {
|
||||
roleName: string
|
||||
@ -122,6 +124,8 @@ const useUserStore = defineStore(
|
||||
this.token = ''
|
||||
this.roles = []
|
||||
this.permissions = []
|
||||
const sysParamStore = useCommonStore()
|
||||
sysParamStore.clearAllParam() //清除参数值缓存
|
||||
removeToken()
|
||||
resolve()
|
||||
}).catch((error: any) => {
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
* 提供十进制颜色值转十六进制颜色码(支持BGR转RGB)及文字对比度计算功能
|
||||
*/
|
||||
|
||||
function decimalToHexColor(decimal: number | string): string {
|
||||
export function decimalToHexColor(decimal: number | string): string {
|
||||
// 处理空值和非数字情况
|
||||
if (decimal === undefined || decimal === null || decimal === '') {
|
||||
return '#FFFFFF';
|
||||
@ -33,20 +33,20 @@ function decimalToHexColor(decimal: number | string): string {
|
||||
return `#${rgbHex}`;
|
||||
}
|
||||
|
||||
|
||||
// 处理颜色转换为十进制数字
|
||||
const convertHexToNumber = (hex: string) => {
|
||||
if (!hex) return
|
||||
export const convertHexToNumber = (hex: string) => {
|
||||
if (!hex) return;
|
||||
hex = hex.replace('#', '');
|
||||
const bgr = hex.slice(4, 6) + hex.slice(2, 4) + hex.slice(0, 2);
|
||||
return parseInt(bgr, 16);
|
||||
};
|
||||
|
||||
/**
|
||||
* 根据背景色计算对比度文字颜色(黑/白)
|
||||
* @param bgColor 十六进制背景色(如#FFFF80)
|
||||
* @returns 对比度文字颜色(#333333或#FFFFFF)
|
||||
*/
|
||||
function getContrastTextColor(bgColor: string): string {
|
||||
export function getContrastTextColor(bgColor: string): string {
|
||||
// 验证颜色格式
|
||||
if (!/^#([0-9A-F]{6})$/i.test(bgColor)) {
|
||||
throw new Error('Invalid hex color format. Expected #RRGGBB');
|
||||
@ -65,7 +65,7 @@ function getContrastTextColor(bgColor: string): string {
|
||||
}
|
||||
|
||||
// 打印https pdf
|
||||
function printPDF(pdfUrl: string) {
|
||||
export function printPDF(pdfUrl: string) {
|
||||
// 验证URL是否为HTTPS
|
||||
if (pdfUrl.startsWith('http')) {
|
||||
console.warn('PDF URL不是HTTPS协议,可能存在安全风险');
|
||||
@ -82,7 +82,7 @@ function printPDF(pdfUrl: string) {
|
||||
}
|
||||
|
||||
// 打印base64 pdf
|
||||
function printBase64PDF(base64: string) {
|
||||
export function printBase64PDF(base64: string) {
|
||||
const blob = base64ToBlob(base64);
|
||||
const pdfUrl = URL.createObjectURL(blob);
|
||||
const iframe = document.createElement('iframe');
|
||||
@ -105,7 +105,7 @@ function base64ToBlob(base64: string) {
|
||||
}
|
||||
|
||||
// 计算两个日期的天数差(支持带时分秒)
|
||||
const getDayDiff = (start: string, end: string): number => {
|
||||
export const getDayDiff = (start: string, end: string): number => {
|
||||
const startTime = new Date(start).getTime();
|
||||
const endTime = new Date(end).getTime();
|
||||
|
||||
@ -117,12 +117,11 @@ const getDayDiff = (start: string, end: string): number => {
|
||||
return dayDiff < 0 ? -1 : dayDiff; // -1 表示结束时间早于开始时间,>=0 为正常天数
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* 自动根据屏幕分辨率切换按钮尺寸(small/default)
|
||||
* @returns 按钮尺寸的响应式ref
|
||||
* @returns 按钮尺寸的响应式ref
|
||||
*/
|
||||
function useAutoSize() {
|
||||
export function useAutoSize() {
|
||||
const autoSize = ref<'small' | 'default'>('default');
|
||||
// 防抖函数,避免频繁触发
|
||||
const debounce = (fn: Function, delay: number) => {
|
||||
@ -158,6 +157,4 @@ function useAutoSize() {
|
||||
});
|
||||
|
||||
return autoSize;
|
||||
}
|
||||
|
||||
export const classCom = { decimalToHexColor, convertHexToNumber, getContrastTextColor, printBase64PDF, printPDF, useAutoSize, getDayDiff }
|
||||
}
|
||||
@ -8,27 +8,46 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<div class="section">
|
||||
<el-button type="primary" plain>检索</el-button>
|
||||
<el-button type="primary" plain>新增</el-button>
|
||||
<el-button type="primary" plain>保存</el-button>
|
||||
<el-button type="primary" plain>输血申请</el-button>
|
||||
<el-button type="warning" plain>打印</el-button>
|
||||
<el-button type="warning" plain>打印输血知情同意书</el-button>
|
||||
<el-button type="primary" plain @click="openJsDialog">检索</el-button>
|
||||
<el-button type="primary" plain @click="handleAdd">新增</el-button>
|
||||
<el-button type="danger" plain :disabled="!evaluationInfo.billNo" @click="handleDel">删除</el-button>
|
||||
<el-button type="success" plain @click="handleSubmit">保存</el-button>
|
||||
<el-button type="primary" plain @click="goSxPath">输血申请</el-button>
|
||||
<el-button type="warning" plain :disabled="!evaluationInfo.billNo"
|
||||
@click="printPg('ASSESS_BEFORE')">打印输血前评估单</el-button>
|
||||
<el-button type="warning" plain :disabled="!evaluationInfo.billNo"
|
||||
@click="printPg('INFORMED_CONSENT')">打印输血知情同意书</el-button>
|
||||
</div>
|
||||
|
||||
<el-form :model="form" label-width="auto">
|
||||
|
||||
<el-form label-width="auto">
|
||||
<div class="section">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="4">
|
||||
<el-form-item label="评估单号">
|
||||
<el-input v-model="evaluationInfo.billNo" disabled />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="评估日期">
|
||||
<el-input v-model="evaluationInfo.assessmentDate" disabled />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="评估医师">
|
||||
<el-input v-model="evaluationInfo.assess_person" disabled />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
<!-- 基础信息 -->
|
||||
<div class="section">
|
||||
<div class="title">基础信息</div>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="4">
|
||||
<el-form-item label="评估单号">
|
||||
<el-input v-model="baseInfo.assessmentNo" disabled />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="住院号/ID号">
|
||||
<el-input v-model="baseInfo.beinhos_id" @change="handleChange" />
|
||||
<el-input v-model="baseInfo.beinhos_id" @keyup.enter="handleChange"
|
||||
:disabled="evaluationInfo.billNo !== ''" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
@ -45,19 +64,18 @@
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="4">
|
||||
<el-form-item label="评估日期">
|
||||
<el-input v-model="baseInfo.assessmentDate" readonly />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="科 室">
|
||||
<SelectTable v-model:data="baseInfo.dept_id" :tableData="dictData.ks" />
|
||||
<el-form-item label="床位号">
|
||||
<el-input v-model="bloodInfo.patient_bed" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="4">
|
||||
<el-form-item label="床位号">
|
||||
<el-input v-model="baseInfo.patient_bed" />
|
||||
<el-form-item label="性别">
|
||||
<el-select v-model="baseInfo.patient_sex" placeholder="">
|
||||
<el-option label="男" value="男" />
|
||||
<el-option label="女" value="女" />
|
||||
<el-option label="未知" value="未知" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
@ -70,59 +88,69 @@
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="4">
|
||||
<el-form-item label="评估医师">
|
||||
<el-input v-model="baseInfo.doctorname" readonly />
|
||||
<el-form-item label="科 室">
|
||||
<SelectTable v-model:data="bloodInfo.dept_id" :tableData="dictData.ks" placeholder="" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="4">
|
||||
<el-form-item label="年 龄">
|
||||
<el-input v-model="baseInfo.age" style="width:60%" />
|
||||
<div style="width: 40%">
|
||||
<el-select v-model="baseInfo.nldw" placeholder="">
|
||||
<el-option v-for="v in dictData.nldw" :label="v.label" :value="v.value" />
|
||||
</el-select>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="病 区">
|
||||
<el-input v-model="baseInfo.zone_id" />
|
||||
<SelectTable v-model:data="bloodInfo.zone_id" dict-type="bq" placeholder="" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="年 龄">
|
||||
<el-input v-model="baseInfo.age" type="number" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="7">
|
||||
<el-form-item label="临床诊断">
|
||||
<el-input v-model="baseInfo.diagnosis" />
|
||||
<el-input v-model="bloodInfo.diagnoses" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="输血目的">
|
||||
<SelectTable v-model:data="bloodInfo.intent" dict-type="sxmd" placeholder="" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="出血量">
|
||||
<el-input v-model="formData.bleedingVolume" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="输血目的">
|
||||
<el-input v-model="formData.intent" />
|
||||
<el-input v-model="bloodInfo.blood_loss" type="number" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="4">
|
||||
<el-form-item label="贫血程度">
|
||||
<el-input v-model="formData.anemiaDegree" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="血液品种">
|
||||
<el-input v-model="formData.abo" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="3">
|
||||
<el-form-item label="血量">
|
||||
<el-input v-model="formData.bloodVolume" />
|
||||
<el-select v-model="bloodInfo.anemia" placeholder="">
|
||||
<el-option v-for="v in dictData.anemia" :label="v.label" :value="v.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="18">
|
||||
<el-col :span="4">
|
||||
<el-form-item label="血液品种">
|
||||
<SelectTable v-model:data="bloodInfo.blood_breed" dict-type="xylx" placeholder="" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="血量">
|
||||
<el-input v-model="bloodInfo.blood_num" type="number" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label=" ">
|
||||
<el-checkbox v-model="formData.hbLow" class="text-danger">
|
||||
<el-checkbox v-model="bloodInfo.agreement_ink" class="text-danger" true-value="Y" false-value="N">
|
||||
病人/病人家属是否签署输血同意书
|
||||
</el-checkbox>
|
||||
</el-form-item>
|
||||
@ -135,7 +163,7 @@
|
||||
<span class="tips">
|
||||
(病人基本情况、贫血程度、凝血障碍、有无创面弥漫性渗血、心肺代偿功能、有无代谢率增高、年龄因素、输血目的等。)
|
||||
</span>
|
||||
<el-input v-model="formData.otherReason" type="textarea" :rows="3" style="margin-top: 8px" />
|
||||
<el-input v-model="bloodInfo.bqgy" type="textarea" :rows="3" style="margin-top: 8px" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@ -144,246 +172,326 @@
|
||||
<div class="title">病人最近检查结果</div>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="4">
|
||||
<el-form-item label="HGB">
|
||||
<el-input v-model="formData.hgbValue" placeholder="">
|
||||
<template #suffix>
|
||||
g/L
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="HCT">
|
||||
<el-input v-model="formData.hgbExpect" placeholder="">
|
||||
<template #suffix>
|
||||
%
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="PLT">
|
||||
<el-input v-model="formData.estimatedVolume" placeholder="">
|
||||
<template #suffix>
|
||||
X10^9/L
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="APTT">
|
||||
<el-input v-model="formData.aptt" placeholder="">
|
||||
<template #suffix>
|
||||
秒
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="4">
|
||||
<el-form-item label="ALT">
|
||||
<el-input v-model="formData.altValue" placeholder="">
|
||||
<template #suffix>
|
||||
U/L
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="HBsAg">
|
||||
<el-select v-model="formData.hbsAg" placeholder="请选择">
|
||||
<el-option label="阴性" value="negative" />
|
||||
<el-option label="阳性" value="positive" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="TP">
|
||||
<el-select v-model="formData.tp" placeholder="请选择">
|
||||
<el-option label="阴性" value="negative" />
|
||||
<el-option label="阳性" value="positive" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="FIB">
|
||||
<el-input v-model="formData.fib" placeholder="">
|
||||
<template #suffix>
|
||||
g/L
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="4">
|
||||
<el-form-item label="Anti-HCV">
|
||||
<el-select v-model="formData.antiHcv" placeholder="请选择">
|
||||
<el-option label="阴性" value="negative" />
|
||||
<el-option label="阳性" value="positive" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="Anti-HIV">
|
||||
<el-select v-model="formData.antiHiv" placeholder="请选择">
|
||||
<el-option label="阴性" value="negative" />
|
||||
<el-option label="阳性" value="positive" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="PT">
|
||||
<el-input v-model="formData.pt" placeholder="">
|
||||
<template #suffix>
|
||||
U
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="INR">
|
||||
<el-input v-model="formData.inr" placeholder="" />
|
||||
</el-form-item>
|
||||
<el-col :span="18">
|
||||
<el-row :gutter="50">
|
||||
<el-col :span="6" v-for="item in lisProject" class="col-project">
|
||||
<el-form-item :label="item.item_name">
|
||||
<el-select v-model="item.item_result" placeholder="">
|
||||
<el-option v-for="v in dictData.sxqjcxmmrz" :label="v.label" :value="v.value" />
|
||||
</el-select>
|
||||
<span class="unit">{{ item.item_unit }}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</el-form>
|
||||
|
||||
<el-dialog title="输血申请检索" v-model="visible" width="800px" :close-on-click-modal="false" @closed="handleClose">
|
||||
<div class="mb10">
|
||||
<el-button type="primary" @click="handleSearch">检索</el-button>
|
||||
<el-button type="success" @click="handleConfirm">确认</el-button>
|
||||
</div>
|
||||
<!-- 检索条件区 -->
|
||||
<el-form :model="searchForm" label-width="auto" class="search-form">
|
||||
<el-row :gutter="30">
|
||||
<el-col :span="14">
|
||||
<el-form-item label="评估日期">
|
||||
<div class="date-range">
|
||||
<el-date-picker v-model="searchForm.stime" type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
|
||||
style="width: 47%" />
|
||||
<span class="separator" style="width: 6%;display: inline-block;text-align: center;">-</span>
|
||||
<el-date-picker v-model="searchForm.etime" type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
|
||||
style="width: 47%" />
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="10">
|
||||
<el-form-item label="患者姓名">
|
||||
<el-input v-model="searchForm.patient_name" placeholder="" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="30">
|
||||
<el-col :span="14">
|
||||
<el-form-item label="评估单号">
|
||||
<el-input v-model="searchForm.bill_no" placeholder="" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="10">
|
||||
<el-form-item label="住院号/ID号">
|
||||
<el-input v-model="searchForm.beinhos_id" placeholder="" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
|
||||
<!-- 结果表格区 -->
|
||||
<el-table :data="tableData" border style="width: 100%; margin-top: 10px" height="350" @row-click="handleRowClick"
|
||||
highlight-current-row>
|
||||
<el-table-column prop="bill_no" label="评估单号" align="center" width="180" />
|
||||
<el-table-column prop="dept_id" label="科室" align="center">
|
||||
<template #default="scope">
|
||||
{{ formatDict(scope.row.dept_id, 'ks') }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="beinhos_id" label="住院号" align="center" />
|
||||
<el-table-column prop="patient_name" label="姓名" align="center" />
|
||||
<el-table-column prop="assess_data" label="评估日期" width="180" align="center" />
|
||||
<el-table-column prop="assess_person" label="评估人" align="center" />
|
||||
</el-table>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import dayjs from 'dayjs'
|
||||
import { queryPatInfo } from '@/api/doctor/assessment'
|
||||
import { printPat, queryPatInfo, queryPatList, savePat, queryPatOne, updatePat, delPat } from '@/api/doctor/assessment'
|
||||
import { queryLisProject, getParameterOne } from '@/api/common'
|
||||
import { getDictData, formatDict, dictData } from '@/hooks'
|
||||
const type = ref<'operation' | 'nonOperation'>('operation')
|
||||
import router from '@/router'
|
||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||
import { printBase64PDF } from '@/utils/classCom'
|
||||
import useUserStore from '@/store/modules/user'
|
||||
import { useSysParam } from '@/hooks/useSysParam'
|
||||
const { getParam } = useSysParam()
|
||||
|
||||
// 表单聚合(统一Form模型)
|
||||
const form = reactive({})
|
||||
|
||||
const userInfo = useUserStore()
|
||||
const visible = ref(false)
|
||||
// 表单数据
|
||||
const searchForm = ref({
|
||||
stime: dayjs().format('YYYY-MM-DD'),
|
||||
etime: dayjs().format('YYYY-MM-DD'),
|
||||
patient_name: '',
|
||||
bill_no: '',
|
||||
beinhos_id: ''
|
||||
})
|
||||
|
||||
const tableData = ref([])
|
||||
|
||||
const evaluationInfo = ref({
|
||||
assessmentDate: dayjs().format('YYYY-MM-DD HH:mm:ss'),
|
||||
billNo: '',
|
||||
assess_person: userInfo.nickName,
|
||||
})
|
||||
|
||||
// 基础信息数据
|
||||
const baseInfo = ref({
|
||||
assessmentNo: '',
|
||||
patient_name: '',
|
||||
dept_id: '',
|
||||
assessmentDate: dayjs().format('YYYY-MM-DD HH:mm:ss'),
|
||||
patient_bed: '',
|
||||
zone_id: '',
|
||||
doctorName: '',
|
||||
age: '',
|
||||
abo: '',
|
||||
beinhos_id: '',
|
||||
diagnosis: '',
|
||||
rh: ''
|
||||
nldw: '岁',
|
||||
})
|
||||
// 输血数据
|
||||
const bloodInfo = ref({
|
||||
agreement_ink: 'Y',
|
||||
assess_person: userInfo.name,//申请人
|
||||
})
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
bleedingVolume: '',
|
||||
intent: '',
|
||||
anemiaDegree: '',
|
||||
abo: '', // 血液品种
|
||||
bloodVolume: '', // 血量
|
||||
hbLow: false,
|
||||
otherReason: '',
|
||||
height: '',
|
||||
weight: '',
|
||||
hgbValue: '',
|
||||
hgbExpect: '',
|
||||
estimatedVolume: '',
|
||||
altValue: '', // ALT值
|
||||
hbsAg: '', // HBsAg
|
||||
tp: '', // TP
|
||||
antiHcv: '', // Anti-HCV
|
||||
antiHiv: '', // Anti-HIV
|
||||
pt: '', // PT
|
||||
aptt: '', // APTT
|
||||
fib: '', // FIB
|
||||
inr: '', // INR
|
||||
intraHemorrhage: false,
|
||||
nonTraumaBleeding: '',
|
||||
traumaBleeding: '',
|
||||
bloodLoss: '',
|
||||
hemolysisCondition: '',
|
||||
heartLungOxygen: false,
|
||||
anemiaCondition: false,
|
||||
crystalloidBefore: false,
|
||||
colloidBefore: false
|
||||
})
|
||||
// 检查结果
|
||||
const lisProject = ref([])
|
||||
|
||||
|
||||
onMounted(() => {
|
||||
|
||||
})
|
||||
|
||||
// 关闭弹窗
|
||||
const handleClose = () => {
|
||||
Object.assign(baseInfo.value, {
|
||||
name: '',
|
||||
dept_id: '',
|
||||
assessmentDate: new Date().toLocaleString(),
|
||||
patient_bed: '',
|
||||
zone_id: '',
|
||||
age: '',
|
||||
abo: '',
|
||||
beinhos_id: '',
|
||||
diagnosis: '',
|
||||
rh: ''
|
||||
})
|
||||
// 重置表单
|
||||
Object.assign(formData, {
|
||||
bleedingVolume: '',
|
||||
intent: '',
|
||||
anemiaDegree: '',
|
||||
abo: '',
|
||||
bloodVolume: '',
|
||||
hbLow: false,
|
||||
otherReason: '',
|
||||
height: '',
|
||||
weight: '',
|
||||
hgbValue: '',
|
||||
hgbExpect: '',
|
||||
estimatedVolume: '',
|
||||
altValue: '',
|
||||
hbsAg: '',
|
||||
tp: '',
|
||||
antiHcv: '',
|
||||
antiHiv: '',
|
||||
pt: '',
|
||||
aptt: '',
|
||||
fib: '',
|
||||
inr: '',
|
||||
intraHemorrhage: false,
|
||||
nonTraumaBleeding: '',
|
||||
traumaBleeding: '',
|
||||
bloodLoss: '',
|
||||
hemolysisCondition: '',
|
||||
heartLungOxygen: false,
|
||||
anemiaCondition: false,
|
||||
crystalloidBefore: false,
|
||||
colloidBefore: false
|
||||
})
|
||||
type.value = 'operation'
|
||||
// 检索
|
||||
const openJsDialog = () => {
|
||||
getList()
|
||||
visible.value = true
|
||||
}
|
||||
const handleSearch = () => {
|
||||
getList()
|
||||
}
|
||||
const handleConfirm = () => {
|
||||
if (!seelctRow.value.bill_no) return ElMessage.warning('请选择评估单')
|
||||
evaluationInfo.value.billNo = seelctRow.value.bill_no
|
||||
getBillInfo()
|
||||
visible.value = false
|
||||
seelctRow.value = {}
|
||||
}
|
||||
|
||||
const handleChange = (val) => {
|
||||
queryPatInfo({ patNo: val }).then((res) => {
|
||||
const handleClose = () => {
|
||||
visible.value = false
|
||||
searchForm.value = {
|
||||
stime: dayjs().format('YYYY-MM-DD'),
|
||||
etime: dayjs().format('YYYY-MM-DD'),
|
||||
patient_name: '',
|
||||
bill_no: '',
|
||||
beinhos_id: ''
|
||||
}
|
||||
seelctRow.value = {}
|
||||
}
|
||||
|
||||
//获取评估单信息
|
||||
const getBillInfo = () => {
|
||||
queryPatOne({ billNo: evaluationInfo.value.billNo }).then((res) => {
|
||||
if (res.code == 0) {
|
||||
evaluationInfo.value.assessmentDate = res.data.xkTransfuseApplyBeforeList[0].assess_data
|
||||
baseInfo.value = res.data.xkPatientInfo
|
||||
bloodInfo.value = res.data.xkTransfuseApplyBeforeList[0]
|
||||
lisProject.value = res.data.xkTransfuseApplyTestitemList.map(item => {
|
||||
return {
|
||||
bill_no: item.bill_no,
|
||||
item_name: item.pro_name,
|
||||
item_result: item.item_result,
|
||||
item_unit: item.item_unit,
|
||||
test_date: item.test_date,
|
||||
sid: item.sid
|
||||
}
|
||||
})
|
||||
splitAge(baseInfo.value.age)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 回显时拆分 年龄 + 单位
|
||||
const splitAge = (ageStr: string) => {
|
||||
const unitList = dictData.value.nldw.map(item => item.value)
|
||||
let age = ageStr
|
||||
let unit = '岁'
|
||||
for (const u of unitList) {
|
||||
if (ageStr.includes(u)) {
|
||||
age = ageStr.replace(u, '')
|
||||
unit = u
|
||||
break
|
||||
}
|
||||
}
|
||||
baseInfo.value.age = age
|
||||
baseInfo.value.nldw = unit
|
||||
}
|
||||
|
||||
const seelctRow = ref({})
|
||||
const handleRowClick = (row) => {
|
||||
seelctRow.value = row
|
||||
}
|
||||
//查询单据信息
|
||||
const getList = () => {
|
||||
const data = {
|
||||
...searchForm.value,
|
||||
stime: dayjs(searchForm.value.stime).format('YYYY-MM-DD') + ' 00:00:00',
|
||||
etime: dayjs(searchForm.value.etime).format('YYYY-MM-DD') + ' 23:59:59',
|
||||
}
|
||||
queryPatList(data).then((res) => {
|
||||
tableData.value = res.data || []
|
||||
})
|
||||
}
|
||||
|
||||
// 关闭弹窗
|
||||
const handleAdd = () => {
|
||||
evaluationInfo.value.assessmentDate = dayjs().format('YYYY-MM-DD HH:mm:ss')
|
||||
evaluationInfo.value.billNo = ''
|
||||
baseInfo.value = { beinhos_id: '', nldw: '岁' }
|
||||
bloodInfo.value = { agreement_ink: 'Y', assess_person: userInfo.name }
|
||||
getProject()
|
||||
}
|
||||
|
||||
//删除单据
|
||||
const handleDel = () => {
|
||||
ElMessageBox.confirm('确定删除当前评估单吗?', '提示', {
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
delPat({ billNo: evaluationInfo.value.billNo }).then(() => {
|
||||
ElMessage.success('删除成功')
|
||||
handleAdd()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
//打印输血评估单
|
||||
const printPg = (name: string) => {
|
||||
printPat({ billNo: evaluationInfo.value.billNo, templateName: name }).then((res) => {
|
||||
if (res.data) {
|
||||
printBase64PDF(res.data)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const handleChange = () => {
|
||||
queryPatInfo({ patNo: baseInfo.value.beinhos_id }).then((res) => {
|
||||
baseInfo.value = res.data.xkPatientInfo
|
||||
// bloodInfo.value = res.data.xkTransfuseApplyBeforeList[0] || {}
|
||||
// lisProject.value = res.data.xkTransfuseApplyTestitemList || []
|
||||
|
||||
splitAge(baseInfo.value.age)
|
||||
})
|
||||
}
|
||||
|
||||
// 提交
|
||||
const handleSubmit = () => {
|
||||
console.log('基础信息', baseInfo)
|
||||
console.log('表单数据', formData)
|
||||
if (bloodInfo.value.bill_status && bloodInfo.value.bill_status == '2') return ElMessage.warning('该评估单已审核,不允许修改!')
|
||||
//判断病情概要是否填写
|
||||
if (getParam('HZBQGY') == 'Y' && !bloodInfo.value.bqgy) return ElMessage.warning('请务必填写病情概要,以便输血科评估用血合理性!')
|
||||
const tempPatient = { ...baseInfo.value }
|
||||
|
||||
if (baseInfo.value.age) {
|
||||
tempPatient.age = baseInfo.value.age + baseInfo.value.nldw
|
||||
}
|
||||
|
||||
const data = {
|
||||
xkPatientInfo: tempPatient,
|
||||
xkTransfuseApplyBeforeList: [{
|
||||
...bloodInfo.value,
|
||||
beinhos_id: baseInfo.value.beinhos_id,
|
||||
assess_data: evaluationInfo.value.assessmentDate
|
||||
}],
|
||||
xkTransfuseApplyTestitemList: lisProject.value
|
||||
}
|
||||
if (bloodInfo.value.bill_status && bloodInfo.value.bill_status == '1') {
|
||||
updatePat(data).then((res) => {
|
||||
if (res.code == 0) {
|
||||
ElMessage.success('保存成功')
|
||||
}
|
||||
})
|
||||
} else {
|
||||
savePat(data).then((res) => {
|
||||
if (res.code == 0) {
|
||||
ElMessage.success('保存成功')
|
||||
evaluationInfo.value.billNo = res.data
|
||||
|
||||
//获取到评估单号后请求最新评估单信息
|
||||
getBillInfo()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
const goSxPath = () => {
|
||||
router.push({ path: `/doctor/application` })
|
||||
}
|
||||
|
||||
const getProject = () => {
|
||||
queryLisProject({ need: 'Y' }).then((res) => {
|
||||
lisProject.value = res.data.map(item => {
|
||||
return {
|
||||
bill_no: '',
|
||||
item_name: item.pro_name,
|
||||
item_result: '',
|
||||
item_unit: item.unit,
|
||||
test_date: dayjs().format('YYYY-MM-DD HH:mm:ss'),
|
||||
sid: item.sid
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
getDictData('ks')
|
||||
getDictData('ks', 'sxqjcxmmrz', 'nldw', 'anemia')
|
||||
getProject()
|
||||
|
||||
|
||||
const tipText = `<strong>输血报销适用限制范围如下:</strong><br />
|
||||
诊疗少白细胞红细胞限特殊适应症与急救、抢救请根据限制范围,结合当前病人情况,判断是否适用医保如为自费患者。<br />
|
||||
请到HIS-医保管理菜单-医保费用审核里`
|
||||
//判断是否显示医保提示
|
||||
if (getParam('YBZFXMTSXX') == 'Y') {
|
||||
ElMessageBox.alert(
|
||||
tipText,
|
||||
'提示',
|
||||
{
|
||||
dangerouslyUseHTMLString: true,
|
||||
}
|
||||
)
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
@ -433,6 +541,19 @@ onMounted(() => {
|
||||
font-weight: 700;
|
||||
}
|
||||
}
|
||||
|
||||
.col-project {
|
||||
position: relative;
|
||||
|
||||
}
|
||||
|
||||
.unit {
|
||||
position: absolute;
|
||||
left: 100%;
|
||||
top: 0;
|
||||
color: #aeb1b7;
|
||||
margin-left: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -2,10 +2,18 @@
|
||||
* @file index.vue
|
||||
* @description: 输血输注
|
||||
* @author: w
|
||||
* @since: 2026-06-04
|
||||
* @since: 2026-06-15
|
||||
*/
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<div class="form-card">
|
||||
<el-button type="primary" plain>检索</el-button>
|
||||
<el-button type="primary" plain>新增单据</el-button>
|
||||
<el-button type="danger" plain>删除单据</el-button>
|
||||
<el-button type="success" plain>保存</el-button>
|
||||
<el-button type="warning" plain>打印护理记录</el-button>
|
||||
</div>
|
||||
|
||||
<!-- 顶部搜索栏卡片 -->
|
||||
<div class="search-card">
|
||||
<el-form inline :model="searchForm">
|
||||
@ -21,7 +29,7 @@
|
||||
</div>
|
||||
<!-- 上方表格卡片 -->
|
||||
<div class="table-top-card">
|
||||
<el-table :data="topTableData" border @selection-change="handleSelect" highlight-current-row height="130px">
|
||||
<el-table :data="topTableData" border @selection-change="handleSelect" highlight-current-row height="150px">
|
||||
<el-table-column type="index" width="50" label="序号" align="center" />
|
||||
<el-table-column label="血液流水号" prop="bloodSn" align="center" />
|
||||
<el-table-column label="产品码" prop="productCode" align="center" />
|
||||
@ -38,131 +46,185 @@
|
||||
<div class="form-card">
|
||||
<el-tabs v-model="activeTab">
|
||||
<el-tab-pane label="输血输注及护理登记" name="tab1">
|
||||
<el-form :model="formData" label-width="auto" class="form-top-label" label-position="top">
|
||||
<el-form :model="formData" label-width="auto" class="form-top-label">
|
||||
<!-- 第一行 -->
|
||||
<div class="form-row four-col">
|
||||
<el-form-item label="血液流水号:">
|
||||
<el-input v-model="formData.bloodSn" style="width:100%" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发血日期:">
|
||||
<el-date-picker v-model="formData.fhDate" type="datetime" format="YYYY-MM-DD HH:mm:ss"
|
||||
value-format="YYYY-MM-DD HH:mm:ss" style="width:100%" />
|
||||
</el-form-item>
|
||||
<el-form-item label="科 室:">
|
||||
<el-select v-model="formData.department" placeholder="">
|
||||
<el-option label="科室1" value="科室1"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="血型:">
|
||||
<el-input v-model="formData.aboBlood" style="width:100%" />
|
||||
</el-form-item>
|
||||
<el-form-item label="申请单号:">
|
||||
<el-input v-model="formData.applyNo" style="width:100%" />
|
||||
</el-form-item>
|
||||
<el-form-item label="申请日期:">
|
||||
<el-date-picker v-model="formData.applyDate" type="datetime" format="YYYY-MM-DD HH:mm:ss"
|
||||
value-format="YYYY-MM-DD HH:mm:ss" style="width:100%" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
<!-- 第二行 -->
|
||||
<div class="form-row four-col">
|
||||
<el-form-item label="发血品种:">
|
||||
<el-input v-model="formData.bloodType" style="width:100%" />
|
||||
</el-form-item>
|
||||
<el-form-item label="患者姓名:">
|
||||
<el-input v-model="formData.patientName" style="width:100%" />
|
||||
</el-form-item>
|
||||
<el-form-item label="住院号/ID号:">
|
||||
<el-input v-model="formData.inId" style="width:100%" />
|
||||
</el-form-item>
|
||||
<el-form-item label="Rh(D):">
|
||||
<el-input v-model="formData.rhD" style="width:100%" />
|
||||
</el-form-item>
|
||||
<el-form-item label="血量:">
|
||||
<div class="two-input-wrap">
|
||||
<el-input v-model="formData.vol1" style="flex:1" />
|
||||
<el-input v-model="formData.vol2" style="flex:1" />
|
||||
</div>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="6">
|
||||
<el-form-item label="血液流水号:">
|
||||
<el-input v-model="formData.bloodSn" style="width:100%" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="发血日期:">
|
||||
<el-date-picker v-model="formData.fhDate" type="datetime" format="YYYY-MM-DD HH:mm:ss"
|
||||
value-format="YYYY-MM-DD HH:mm:ss" style="width:100%" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="科 室:">
|
||||
<el-select v-model="formData.department" placeholder="">
|
||||
<el-option label="科室1" value="科室1"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="血型:">
|
||||
<el-input v-model="formData.aboBlood" style="width:100%" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span='6'>
|
||||
<el-form-item label="申请单号:">
|
||||
<el-input v-model="formData.applyNo" style="width:100%" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span='6'>
|
||||
<el-form-item label="申请日期:">
|
||||
<el-date-picker v-model="formData.applyDate" type="datetime" format="YYYY-MM-DD HH:mm:ss"
|
||||
value-format="YYYY-MM-DD HH:mm:ss" style="width:100%" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span='6'>
|
||||
<el-form-item label="发血品种:">
|
||||
<el-input v-model="formData.bloodType" style="width:100%" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span='6'>
|
||||
<el-form-item label="Rh(D):">
|
||||
<el-input v-model="formData.rhD" style="width:100%" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span='6'>
|
||||
<el-form-item label="患者姓名:">
|
||||
<el-input v-model="formData.patientName" style="width:100%" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span='6'>
|
||||
<el-form-item label="住院号/ID号:">
|
||||
<el-input v-model="formData.inId" style="width:100%" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span='6'>
|
||||
<el-form-item label="血量:">
|
||||
<div class="two-input-wrap">
|
||||
<el-input v-model="formData.vol1" style="width:65%" />
|
||||
<el-input v-model="formData.vol2" style="width:35%" />
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
|
||||
<div class="split-line">输血输注及护理信息</div>
|
||||
<!-- 第四行 -->
|
||||
<div class="form-row four-col">
|
||||
<el-form-item label="登记日期:">
|
||||
<el-date-picker v-model="formData.regDate" type="datetime" format="YYYY-MM-DD HH:mm:ss"
|
||||
value-format="YYYY-MM-DD HH:mm:ss" style="width:100%" />
|
||||
</el-form-item>
|
||||
<el-form-item label="输血医师:">
|
||||
<el-input v-model="formData.docName" style="width:100%" />
|
||||
</el-form-item>
|
||||
<el-form-item label="责任护士:">
|
||||
<el-select v-model="formData.nurse" placeholder="">
|
||||
<el-option label="张三" value="张三"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="滴速:">
|
||||
<el-input v-model="formData.speed">
|
||||
<template #suffix> 滴/分 </template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<!-- 复选+右侧表单 -->
|
||||
<div class="form-row-check">
|
||||
<div class="check-col">
|
||||
<el-checkbox v-model="formData.check1">患者信息是否核对</el-checkbox>
|
||||
<el-checkbox v-model="formData.check2">交叉配血结果是否相符</el-checkbox>
|
||||
<el-checkbox v-model="formData.check3">血液是否未过期</el-checkbox>
|
||||
<el-checkbox v-model="formData.check4">血袋外观是否合格</el-checkbox>
|
||||
<el-checkbox v-model="formData.check5">血液流水号是否相符</el-checkbox>
|
||||
</div>
|
||||
<div class="field-col">
|
||||
<div class="form-row four-col">
|
||||
<el-form-item label="输血开始时间:">
|
||||
<el-date-picker v-model="formData.startTime" type="datetime" format="YYYY-MM-DD HH:mm:ss"
|
||||
style="width:100%" />
|
||||
</el-form-item>
|
||||
<el-form-item label="输血结束时间:">
|
||||
<el-date-picker v-model="formData.endTime" type="datetime" format="YYYY-MM-DD HH:mm:ss"
|
||||
style="width:100%" />
|
||||
</el-form-item>
|
||||
<el-form-item label="一刻钟观察时间:">
|
||||
<el-date-picker v-model="formData.q1Time" type="datetime" format="YYYY-MM-DD HH:mm:ss"
|
||||
style="width:100%" />
|
||||
</el-form-item>
|
||||
<el-form-item label="一刻钟观察护士:">
|
||||
<el-select v-model="formData.q1Nurse" placeholder="">
|
||||
<el-option label="张三" value="张三"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="form-row four-col">
|
||||
<el-form-item label="一小时观察时间:">
|
||||
<el-date-picker v-model="formData.qhTime" type="datetime" format="YYYY-MM-DD HH:mm:ss"
|
||||
style="width:100%" />
|
||||
</el-form-item>
|
||||
<el-form-item label="一小时观察护士:">
|
||||
<el-select v-model="formData.qhNurse" placeholder="">
|
||||
<el-option label="张三" value="张三"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="输血后血袋处理:">
|
||||
<el-input v-model="formData.bagDeal" style="width:100%" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审阅者:" class="red-label">
|
||||
<el-select v-model="formData.checkUser" placeholder="">
|
||||
<el-option label="张三" value="张三"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="6">
|
||||
<el-form-item label="登记日期:">
|
||||
<el-date-picker v-model="formData.regDate" type="datetime" format="YYYY-MM-DD HH:mm:ss"
|
||||
value-format="YYYY-MM-DD HH:mm:ss" style="width:100%" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="输血医师:">
|
||||
<el-input v-model="formData.docName" style="width:100%" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="责任护士:">
|
||||
<el-select v-model="formData.nurse" placeholder="">
|
||||
<el-option label="张三" value="张三"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="滴速:">
|
||||
<el-input v-model="formData.speed">
|
||||
<template #suffix> 滴/分 </template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<div class="form-row">
|
||||
<el-form-item label="输血情况记录:">
|
||||
<el-input v-model="formData.record" style="width:500px" />
|
||||
</el-form-item>
|
||||
<!-- 复选+右侧表单 -->
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="6">
|
||||
<div class="form-row-check">
|
||||
<el-checkbox v-model="formData.check1">患者信息是否核对</el-checkbox>
|
||||
<el-checkbox v-model="formData.check2">交叉配血结果是否相符</el-checkbox>
|
||||
<el-checkbox v-model="formData.check3">血液是否未过期</el-checkbox>
|
||||
<el-checkbox v-model="formData.check4">血袋外观是否合格</el-checkbox>
|
||||
<el-checkbox v-model="formData.check5">血液流水号是否相符</el-checkbox>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="18">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="输血开始时间:">
|
||||
<el-date-picker v-model="formData.startTime" type="datetime" format="YYYY-MM-DD HH:mm:ss"
|
||||
style="width:100%" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="输血结束时间:">
|
||||
<el-date-picker v-model="formData.endTime" type="datetime" format="YYYY-MM-DD HH:mm:ss"
|
||||
style="width:100%" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8"></el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="一刻钟观察时间:">
|
||||
<el-date-picker v-model="formData.q1Time" type="datetime" format="YYYY-MM-DD HH:mm:ss"
|
||||
style="width:100%" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="一刻钟观察护士:">
|
||||
<el-select v-model="formData.q1Nurse" placeholder="">
|
||||
<el-option label="张三" value="张三"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8"></el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="一小时观察时间:">
|
||||
<el-date-picker v-model="formData.qhTime" type="datetime" format="YYYY-MM-DD HH:mm:ss"
|
||||
style="width:100%" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="一小时观察护士:">
|
||||
<el-select v-model="formData.qhNurse" placeholder="">
|
||||
<el-option label="张三" value="张三"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8"></el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="输血后血袋处理:">
|
||||
<el-input v-model="formData.bagDeal" style="width:100%" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="审阅者:" class="red-label">
|
||||
<el-select v-model="formData.checkUser" placeholder="">
|
||||
<el-option label="张三" value="张三"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8"></el-col>
|
||||
<el-col :span="16">
|
||||
<el-form-item label="输血情况记录:">
|
||||
<el-input v-model="formData.record" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="临床监护记录" name="tab2">
|
||||
@ -232,15 +294,15 @@ const queryByIn = () => { console.log('按住院号查找', searchForm.value.inN
|
||||
padding: 14px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 16px;
|
||||
gap: 10px;
|
||||
overflow-y: auto;
|
||||
|
||||
// 搜索卡片
|
||||
.search-card {
|
||||
background: #fff;
|
||||
padding: 16px 20px;
|
||||
border-radius: 6px;
|
||||
box-shadow: 0 1px 12px rgba(0, 0, 0, 0.065);
|
||||
padding: 12px;
|
||||
border-radius: 4px;
|
||||
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.08);
|
||||
|
||||
:deep(.el-form-item) {
|
||||
margin-bottom: 0;
|
||||
@ -254,9 +316,6 @@ const queryByIn = () => { console.log('按住院号查找', searchForm.value.inN
|
||||
border-radius: 6px;
|
||||
box-shadow: 0 1px 12px rgba(0, 0, 0, 0.065);
|
||||
|
||||
&:hover {
|
||||
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.12); // 悬停加深阴影
|
||||
}
|
||||
|
||||
:deep(.el-table__header th) {
|
||||
background: #f5f7fa;
|
||||
@ -264,7 +323,7 @@ const queryByIn = () => { console.log('按住院号查找', searchForm.value.inN
|
||||
}
|
||||
|
||||
:deep(.el-tabs__header) {
|
||||
margin-bottom: 0;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
// 下方表单卡片
|
||||
@ -274,21 +333,12 @@ const queryByIn = () => { console.log('按住院号查找', searchForm.value.inN
|
||||
border-radius: 6px;
|
||||
box-shadow: 0 1px 12px rgba(0, 0, 0, 0.065);
|
||||
|
||||
&:hover {
|
||||
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.12); // 悬停加深阴影
|
||||
}
|
||||
|
||||
.form-top-label {
|
||||
|
||||
:deep(.el-form-item__label) {
|
||||
padding: 0 0 5px 0;
|
||||
margin: 8px 0 0 0;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
:deep(.el-form-item) {
|
||||
margin-bottom: 12px;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.split-line {
|
||||
@ -310,40 +360,12 @@ const queryByIn = () => { console.log('按住院号查找', searchForm.value.inN
|
||||
}
|
||||
}
|
||||
|
||||
.form-row {
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
margin-bottom: 0;
|
||||
|
||||
&.four-col {
|
||||
>.el-form-item {
|
||||
width: 250px;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.two-input-wrap {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
}
|
||||
|
||||
.form-row-check {
|
||||
display: flex;
|
||||
gap: 24px;
|
||||
margin-top: 10px;
|
||||
flex-direction: column;
|
||||
padding-left: 30px;
|
||||
|
||||
.check-col {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 12px;
|
||||
width: 238px;
|
||||
}
|
||||
|
||||
.field-col {
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
|
||||
:deep(.red-label) {
|
||||
|
||||
@ -65,6 +65,9 @@
|
||||
<el-button type="warning" plain icon="Download" @click="handleExport"
|
||||
v-hasPermi="['system:user:export']">导出</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="Refresh" @click="handleSync">同步用户数据</el-button>
|
||||
</el-col>
|
||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
@ -245,7 +248,7 @@
|
||||
<script setup lang="ts" name="User">
|
||||
import { getToken } from "@/utils/auth"
|
||||
import useAppStore from '@/store/modules/app'
|
||||
import { changeUserStatus, listUser, resetUserPwd, delUser, getUser, updateUser, addUser, deptTreeSelect } from "@/api/system/user"
|
||||
import { changeUserStatus, listUser, resetUserPwd, delUser, getUser, updateUser, addUser, deptTreeSelect, syncUser } from "@/api/system/user"
|
||||
import { Splitpanes, Pane } from "splitpanes"
|
||||
import "splitpanes/dist/splitpanes.css"
|
||||
import type { SysUser, UserQueryParams, UserFormDataResult } from '@/types/api/system/user'
|
||||
@ -386,6 +389,12 @@ function resetQuery() {
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
const handleSync = () => {
|
||||
syncUser().then(() => {
|
||||
handleQuery()
|
||||
})
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
function handleDelete(row?: SysUser) {
|
||||
const userIds = row?.userId || ids.value
|
||||
|
||||
@ -38,10 +38,6 @@
|
||||
<svg-icon icon-class="date" />创建日期
|
||||
<div class="pull-right">{{ state.user.createTime }}</div>
|
||||
</li>
|
||||
<li class="list-group-item">
|
||||
<svg-icon icon-class="system" />浏览器ID
|
||||
<div class="pull-right">{{ mbStore.fingerprint }}</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user