输血评估

This commit is contained in:
wuyy 2026-06-16 17:50:04 +08:00
parent 54cce95758
commit 83fab3a4d7
14 changed files with 762 additions and 465 deletions

View File

@ -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
View 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
})
}

View File

@ -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
})
}
}

View File

@ -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> {

View File

@ -611,7 +611,7 @@ aside {
.vxe-table {
border: 1px solid #96B8D9 !important;
border-top: none !important;
// border-top: none !important;
/* 蓝色外边框 */
border-radius: .5rem;
/* 可选:添加边框圆角 */

View File

@ -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
View 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
}
}

View File

@ -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)

View File

@ -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) => {

View File

@ -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 }
}

View File

@ -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;
}
}

View File

@ -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) {

View File

@ -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

View File

@ -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>