输血申请
This commit is contained in:
parent
476c5ea082
commit
e35a900f36
@ -24,3 +24,60 @@ export function queryLisProject(query?: Object) {
|
|||||||
data: query
|
data: query
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
// 获取员工数据
|
||||||
|
export function queryUserInfo(query?: Object) {
|
||||||
|
return request({
|
||||||
|
url: '/bus/common/queryUserInfo',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 获取当前服务器时间
|
||||||
|
export function currentDateTime(query?: Object) {
|
||||||
|
return request({
|
||||||
|
url: '/bus/common/currentDateTime',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 获取有效的血液品种
|
||||||
|
export function getBloodBreed(query?: Object) {
|
||||||
|
return request({
|
||||||
|
url: '/bus/common/getBloodBreed',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询单病种信息列表
|
||||||
|
export function queryIllDiagnoseList(query?: Object) {
|
||||||
|
return request({
|
||||||
|
url: '/bus/doctor/apply/queryIllDiagnoseList',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 校验用户名和密码是否成功
|
||||||
|
export function checkLoginAffirm(query?: Object) {
|
||||||
|
return request({
|
||||||
|
url: '/bus/common/checkLoginAffirm',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 获取员工的部门类型
|
||||||
|
export function getDeptType(query?: Object) {
|
||||||
|
return request({
|
||||||
|
url: '/bus/common/getDeptType',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 查询手术字典
|
||||||
|
export function queryOperation(query?: Object) {
|
||||||
|
return request({
|
||||||
|
url: '/bus/common/queryOperation',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
130
src/api/doctor/application.ts
Normal file
130
src/api/doctor/application.ts
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
/**
|
||||||
|
* @file application.ts
|
||||||
|
* @description: 输血申请模块接口
|
||||||
|
* @author: w
|
||||||
|
* @since: 2026-07-06
|
||||||
|
*/
|
||||||
|
|
||||||
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
// 查询申请单列表
|
||||||
|
export function querysqList(query?: Object) {
|
||||||
|
return request({
|
||||||
|
url: '/bus/doctor/apply/queryList',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取病人信息
|
||||||
|
export function getPatInfo(query?: Object) {
|
||||||
|
return request({
|
||||||
|
url: '/bus/doctor/apply/getPatInfo',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 自体血校验
|
||||||
|
export function checkSelfBlood(query?: Object) {
|
||||||
|
return request({
|
||||||
|
url: '/bus/doctor/apply/checkSelfBlood',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 校验是否符合输血指征的规则
|
||||||
|
export function checkCausalis(query?: Object) {
|
||||||
|
return request({
|
||||||
|
url: '/bus/doctor/apply/checkCausalis',
|
||||||
|
method: 'post',
|
||||||
|
data: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 保存前校验
|
||||||
|
export function savePreApplyInfo(query?: Object) {
|
||||||
|
return request({
|
||||||
|
url: '/bus/doctor/apply/savePreApplyInfo',
|
||||||
|
method: 'post',
|
||||||
|
data: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 保存申请单
|
||||||
|
export function saveApplyInfo(query?: Object) {
|
||||||
|
return request({
|
||||||
|
url: '/bus/doctor/apply/saveApplyInfo',
|
||||||
|
method: 'post',
|
||||||
|
data: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 查询单条申请单
|
||||||
|
export function queryApplyOne(query?: Object) {
|
||||||
|
return request({
|
||||||
|
url: '/bus/doctor/apply/queryApplyOne',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 查询输血前评估信息列表
|
||||||
|
export function queryApplyBeforeList(query?: Object) {
|
||||||
|
return request({
|
||||||
|
url: '/bus/doctor/apply/queryApplyBeforeList',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 申请单审核前校验
|
||||||
|
export function applyCheck(query?: Object) {
|
||||||
|
return request({
|
||||||
|
url: '/bus/doctor/apply/applyCheck',
|
||||||
|
method: 'post',
|
||||||
|
data: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 取消申请单审核
|
||||||
|
export function cancelApplyCheck(query?: Object) {
|
||||||
|
return request({
|
||||||
|
url: '/bus/doctor/apply/cancelApplyCheck',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 上级医生审核
|
||||||
|
export function applyMedicCheck(query?: Object) {
|
||||||
|
return request({
|
||||||
|
url: '/bus/doctor/apply/applyMedicCheck',
|
||||||
|
method: 'post',
|
||||||
|
data: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 取消上级医生审核
|
||||||
|
export function cancelApplyMedicCheck(query?: Object) {
|
||||||
|
return request({
|
||||||
|
url: '/bus/doctor/apply/cancelApplyMedicCheck',
|
||||||
|
method: 'post',
|
||||||
|
data: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 审核意见
|
||||||
|
export function checkExplain(query?: Object) {
|
||||||
|
return request({
|
||||||
|
url: '/bus/doctor/checkExplain/checkExplain',
|
||||||
|
method: 'post',
|
||||||
|
data: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 获取输血指征数据
|
||||||
|
export function queryCausailsList(query?: Object) {
|
||||||
|
return request({
|
||||||
|
url: '/bus/doctor/checkExplain/queryCausailsList',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 作废申请单
|
||||||
|
export function cancelApply(query?: Object) {
|
||||||
|
return request({
|
||||||
|
url: '/bus/doctor/apply/cancelApply',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
@ -1,3 +1,11 @@
|
|||||||
|
/**
|
||||||
|
* @file assessment.ts
|
||||||
|
* @description: 输血评估模块接口
|
||||||
|
* @author: w
|
||||||
|
* @since: 2026-07-06
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
import request from '@/utils/request'
|
import request from '@/utils/request'
|
||||||
|
|
||||||
// 根据住院号获取病人信息
|
// 根据住院号获取病人信息
|
||||||
|
|||||||
@ -656,50 +656,91 @@ aside {
|
|||||||
|
|
||||||
|
|
||||||
.vxe-table {
|
.vxe-table {
|
||||||
border: 1px solid #96B8D9 !important;
|
// border: 1px solid #ccc !important;
|
||||||
// border-top: none !important;
|
|
||||||
/* 蓝色外边框 */
|
|
||||||
border-radius: .5rem;
|
|
||||||
/* 可选:添加边框圆角 */
|
/* 可选:添加边框圆角 */
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mytable-style {
|
.mytable-style {
|
||||||
|
.vxe-table.border--full {
|
||||||
|
border: 1px solid #ccc !important;
|
||||||
|
|
||||||
.vxe-header--column {
|
.vxe-header--column,
|
||||||
word-break: break-word;
|
.vxe-body--column,
|
||||||
background-color: #f6fafc !important;
|
.vxe-footer--column {
|
||||||
color: #3c526f;
|
border-right: 1px solid #ccc !important;
|
||||||
height: 1.875rem !important;
|
border-bottom: 1px solid #ccc !important;
|
||||||
line-height: 1.875rem !important;
|
height: 30px;
|
||||||
|
line-height: 30px;
|
||||||
padding: 0 !important;
|
padding: 0 !important;
|
||||||
font-size: 16px;
|
background-image: none !important;
|
||||||
border-color: #f6fafc !important;
|
|
||||||
|
&:last-child {
|
||||||
|
// border-right: none !important;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.vxe-table--render-default.is--padding .vxe-body--column .vxe-cell {
|
.vxe-footer--column {
|
||||||
|
border-bottom: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* 表头最下方单元格强制底红线 */
|
||||||
|
.vxe-header--row:last-of-type .vxe-header--column {
|
||||||
|
border-bottom: 1px solid #ccc !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vxe-body--row {
|
||||||
|
border-bottom: 1px solid #ccc !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vxe-footer--row.vxe-footer--row {
|
||||||
|
border-top: 1px solid #ccc !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.vxe-header--row th {
|
||||||
|
height: 30px !important;
|
||||||
|
line-height: 30px;
|
||||||
padding: 0 !important;
|
padding: 0 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.vxe-table--render-default .vxe-header--column .vxe-cell {
|
.vxe-body--row td {
|
||||||
|
height: 30px !important;
|
||||||
|
line-height: 30px;
|
||||||
padding: 0 !important;
|
padding: 0 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.vxe-table--render-default .vxe-body--column,
|
|
||||||
.vxe-footer--column,
|
.vxe-footer--row td {
|
||||||
.col--ellipsis {
|
height: 30px !important;
|
||||||
height: 1.875rem !important;
|
line-height: 30px;
|
||||||
line-height: 1.875rem !important;
|
font-size: 13px;
|
||||||
|
font-weight: 700;
|
||||||
|
padding: 0 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.el-checkbox {
|
/* 清除最后一列重复竖线,避免双线重叠 */
|
||||||
height: 1.875rem !important;
|
.vxe-header--col:last-child .vxe-header--column,
|
||||||
|
.vxe-body--col:last-child .vxe-body--column,
|
||||||
|
.vxe-footer--col:last-child .vxe-footer--column {
|
||||||
|
border-right: none !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.vxe-table--render-default .vxe-table--footer-wrapper {
|
||||||
|
border-top: 1px solid #ccc !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vxe-table--header-wrapper {
|
||||||
|
border-bottom: 1px solid #ccc !important;
|
||||||
|
background-color: #eff6fa !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 高亮
|
// 高亮
|
||||||
.vxe-table--render-default .vxe-body--row.row--current {
|
.vxe-table--render-default .vxe-body--row.row--current {
|
||||||
background-color: #a4beef !important;
|
background-color: #a4beef !important;
|
||||||
@ -766,3 +807,40 @@ aside {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.el-input.is-disabled .el-input__wrapper {
|
||||||
|
background-color: #f5f7fa !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-select__wrapper.is-disabled {
|
||||||
|
background-color: #f5f7fa !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-select__wrapper.is-disabled .el-select__selected-item {
|
||||||
|
color: #606266 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-date-editor.is-disabled,
|
||||||
|
.el-date-editor.is-disabled .el-input__wrapper {
|
||||||
|
background-color: #f5f7fa !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-radio__input.is-disabled+span.el-radio__label,
|
||||||
|
.el-checkbox.is-disabled {
|
||||||
|
color: #606266 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-radio__input.is-disabled.is-checked .el-radio__inner {
|
||||||
|
background: #00a5ff;
|
||||||
|
border-color: #00a5ff;
|
||||||
|
|
||||||
|
&::after {
|
||||||
|
background: #f5f7fa;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner {
|
||||||
|
background: #00a5ff;
|
||||||
|
}
|
||||||
113
src/components/CheckUser/index.vue
Normal file
113
src/components/CheckUser/index.vue
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-dialog v-model="checkShow" :title="title" width="500" :close-on-click-modal="false" :draggable="true"
|
||||||
|
@close="close">
|
||||||
|
<el-form ref="ruleFormRef" style="max-width: 600px" :model="ruleForm" :rules="rules" label-width="auto">
|
||||||
|
<el-form-item label="用户工号:" prop="yhdh">
|
||||||
|
<el-input ref="yhdhRef" v-model.trim="ruleForm.yhdh" placeholder="请输入用户工号" maxlength="20"
|
||||||
|
@keyup.enter="handleConfirm" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="密码:" prop="mm">
|
||||||
|
<el-input v-model.trim="ruleForm.mm" placeholder="请输入密码" type="mm" maxlength="20" show-password
|
||||||
|
@keyup.enter="handleConfirm" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<div style="text-align: center; width: 100%;">
|
||||||
|
<el-button type="primary" @click="handleConfirm()"> 确认 </el-button>
|
||||||
|
<el-button @click="handleCancel">取消</el-button>
|
||||||
|
</div>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
|
||||||
|
// 组件属性
|
||||||
|
const props = defineProps({
|
||||||
|
// 弹窗标题(由外部参数控制)
|
||||||
|
title: {
|
||||||
|
type: String,
|
||||||
|
default: '用户身份验证'
|
||||||
|
},
|
||||||
|
// 验证规则(可选,由外部传入)
|
||||||
|
validationRules: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({
|
||||||
|
// 工号最小长度
|
||||||
|
userIdMinLength: 3,
|
||||||
|
// 密码最小长度
|
||||||
|
passwordMinLength: 6
|
||||||
|
})
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 组件事件
|
||||||
|
const emit = defineEmits([
|
||||||
|
'onConfirm', // 验证成功回调
|
||||||
|
'onCancel'
|
||||||
|
]);
|
||||||
|
|
||||||
|
// 表单数据
|
||||||
|
const ruleForm = ref({
|
||||||
|
yhdh: '',
|
||||||
|
mm: '',
|
||||||
|
});
|
||||||
|
|
||||||
|
const rules = ref(
|
||||||
|
{
|
||||||
|
yhdh: [{ required: true, message: "请输入用户工号", trigger: "blur" },],
|
||||||
|
mm: [{ required: true, message: "请输入密码", trigger: "blur" },]
|
||||||
|
}
|
||||||
|
);
|
||||||
|
const yhdhRef = ref();
|
||||||
|
const open = () => {
|
||||||
|
checkShow.value = true;
|
||||||
|
flag.value = true;
|
||||||
|
nextTick(() => {
|
||||||
|
setTimeout(() => {
|
||||||
|
yhdhRef.value.focus();
|
||||||
|
}, 100);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
const checkShow = ref(false);
|
||||||
|
const ruleFormRef = ref();
|
||||||
|
const flag = ref(true);
|
||||||
|
// 处理确认验证
|
||||||
|
const handleConfirm = () => {
|
||||||
|
ruleFormRef.value.validate((valid: boolean) => {
|
||||||
|
if (valid) {
|
||||||
|
emit('onConfirm', { yhdh: ruleForm.value.yhdh, mm: ruleForm.value.mm });
|
||||||
|
flag.value = false;
|
||||||
|
checkShow.value = false;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const handleCancel = () => {
|
||||||
|
checkShow.value = false;
|
||||||
|
ruleForm.value.yhdh = '';
|
||||||
|
ruleForm.value.mm = '';
|
||||||
|
ruleFormRef.value.resetFields();
|
||||||
|
emit('onCancel');
|
||||||
|
};
|
||||||
|
|
||||||
|
const close = () => {
|
||||||
|
ruleForm.value.yhdh = '';
|
||||||
|
ruleForm.value.mm = '';
|
||||||
|
ruleFormRef.value.resetFields();
|
||||||
|
if (flag.value) {
|
||||||
|
emit('onCancel');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
defineExpose({
|
||||||
|
open,
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss"></style>
|
||||||
@ -1,12 +1,7 @@
|
|||||||
/**
|
|
||||||
* @file index.vue
|
|
||||||
* @description: 下拉表格选择
|
|
||||||
* @author: w
|
|
||||||
* @since: 2026-06-18
|
|
||||||
*/
|
|
||||||
<template>
|
<template>
|
||||||
<div class="dropdown-table-select" :style="{ width: inputWidth }">
|
<div class="dropdown-table-select" :style="{ width: inputWidth }">
|
||||||
<el-dropdown ref="dropdownRef" trigger="manual" placement="bottom-start" style="width:100%">
|
<el-dropdown ref="dropdownRef" trigger="manual" placement="bottom-start" style="width:100%" :teleported="false"
|
||||||
|
:popper-style="{ width: realtableWidth }">
|
||||||
<div class="input-wrap" style="width:100%">
|
<div class="input-wrap" style="width:100%">
|
||||||
<el-input v-model="inputText" :placeholder="placeholder" @keydown.enter.prevent="handleInputEnter" />
|
<el-input v-model="inputText" :placeholder="placeholder" @keydown.enter.prevent="handleInputEnter" />
|
||||||
<span class="arrow-icon" @click.stop="toggleDropdown">
|
<span class="arrow-icon" @click.stop="toggleDropdown">
|
||||||
@ -16,17 +11,35 @@
|
|||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<template #dropdown>
|
<template #dropdown>
|
||||||
<div class="table-panel" :style="{ width: panelWidth }">
|
<div class="table-panel mytable-style" style="width:100%">
|
||||||
<el-table :data="tableData" border :height="tableHeight" @row-click="handleRowClick" v-loading="tableLoading">
|
<!-- 搜索框-->
|
||||||
<el-table-column v-for="col in columnList" :key="col.prop" :label="col.label" :prop="col.prop"
|
<div style="text-align: left;" v-if="props.showSearch">
|
||||||
:width="col.width" :align="col.align || 'center'" />
|
<el-input v-model="searchKey" ref="searchInput" size="small" placeholder="快速搜索(支持简拼)" class="mb10" clearable
|
||||||
</el-table>
|
@clear="filterDataHandle" @input="filterDataHandle" @keydown="handleInputKeydown" />
|
||||||
|
</div>
|
||||||
|
<!-- 空数据提示 -->
|
||||||
|
<el-empty v-if="filterData.length === 0" description="没有匹配的数据" :image-size="100" />
|
||||||
|
<!-- 表格容器增加键盘监听 -->
|
||||||
|
<div v-else @keydown="handleTableKeydown" tabindex="0" style="outline: none;">
|
||||||
|
<vxe-table ref="tableRef" border resizable max-height="350px" v-loading="tableLoading"
|
||||||
|
:row-config="{ isHover: true, keyField: labelField, height: 30, isCurrent: true }" :data="filterData"
|
||||||
|
:current-row="currentRow" @cell-click="handleRowClick"
|
||||||
|
:tooltip-config="{ appendToBody: true, zIndex: 3000 }" :show-overflow="true"
|
||||||
|
:scroll-y="{ enabled: true, rSize: 30, height: '100%', oSize: 20, gt: 30, }">
|
||||||
|
<vxe-table-column v-for="field in props.columnList" :key="field.prop" :field="field.prop"
|
||||||
|
:title="field.label" align="center" :width="field.width" min-width="100" />
|
||||||
|
</vxe-table>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-dropdown>
|
</el-dropdown>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import { ArrowDown } from '@element-plus/icons-vue'
|
||||||
|
// 引入拼音首字母工具
|
||||||
|
import { getFirstLetter } from '@/utils/pinyin';
|
||||||
|
|
||||||
export interface TableColumnItem {
|
export interface TableColumnItem {
|
||||||
label: string
|
label: string
|
||||||
@ -35,6 +48,7 @@ export interface TableColumnItem {
|
|||||||
align?: 'left' | 'center' | 'right'
|
align?: 'left' | 'center' | 'right'
|
||||||
}
|
}
|
||||||
export type TableRowItem = Record<string, any>
|
export type TableRowItem = Record<string, any>
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
// 绑定值
|
// 绑定值
|
||||||
modelValue: {
|
modelValue: {
|
||||||
@ -56,38 +70,164 @@ const props = defineProps({
|
|||||||
type: String,
|
type: String,
|
||||||
default: '100%'
|
default: '100%'
|
||||||
},
|
},
|
||||||
// 下拉面板宽度
|
// 表格宽度
|
||||||
panelWidth: {
|
tableWidth: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '700px'
|
default: '100%'
|
||||||
},
|
},
|
||||||
//表格高度
|
// 表格高度
|
||||||
tableHeight: {
|
tableHeight: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '150px'
|
default: '150px'
|
||||||
},
|
},
|
||||||
// 表格列 父必传,无默认值
|
// 是否显示表头
|
||||||
|
showHeader: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true
|
||||||
|
},
|
||||||
|
// 表格列配置
|
||||||
columnList: {
|
columnList: {
|
||||||
type: Array as () => TableColumnItem[],
|
type: Array as () => TableColumnItem[],
|
||||||
required: true
|
required: true
|
||||||
},
|
},
|
||||||
// 表格数据 父必传
|
// 表格原始数据
|
||||||
tableData: {
|
tableData: {
|
||||||
type: Array as () => TableRowItem[],
|
type: Array as () => TableRowItem[],
|
||||||
required: true
|
required: true
|
||||||
|
},
|
||||||
|
//是否展示搜索框
|
||||||
|
showSearch: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
const emit = defineEmits<{
|
const emit = defineEmits<{
|
||||||
'update:modelValue': [val: string]
|
'update:modelValue': [val: string]
|
||||||
change: [row: TableRowItem]
|
change: [row: TableRowItem]
|
||||||
open: []
|
open: []
|
||||||
search: [val: string]
|
search: [val: string]
|
||||||
}>()
|
}>()
|
||||||
|
|
||||||
const bindField = props.labelField ?? 'billNo'
|
const bindField = props.labelField ?? 'billNo'
|
||||||
const dropdownRef = useTemplateRef('dropdownRef')
|
const dropdownRef = useTemplateRef('dropdownRef')
|
||||||
const showPanel = ref(false)
|
const showPanel = ref(false)
|
||||||
const inputText = ref('')
|
const inputText = ref('')
|
||||||
const tableLoading = ref(false)
|
const tableLoading = ref(false)
|
||||||
|
const currentRow = ref<any>(null)
|
||||||
|
const tableRef = useTemplateRef('tableRef')
|
||||||
|
// 搜索相关变量
|
||||||
|
const searchKey = ref('');
|
||||||
|
const searchInput = ref();
|
||||||
|
// 预处理带拼音的完整原始数据
|
||||||
|
const processedTableData = ref<{ [key: string]: any; pinyinMap: Record<string, string> }[]>([]);
|
||||||
|
// 过滤后渲染表格的数据
|
||||||
|
const filterData = ref<{ [key: string]: any; pinyinMap: Record<string, string> }[]>([]);
|
||||||
|
const currentIndex = ref(-1);
|
||||||
|
|
||||||
|
const realtableWidth = computed(() => {
|
||||||
|
if (props.tableWidth === '100%') {
|
||||||
|
return props.inputWidth
|
||||||
|
}
|
||||||
|
return props.tableWidth
|
||||||
|
})
|
||||||
|
|
||||||
|
// 数据预处理生成拼音简拼
|
||||||
|
const processTableData = (data: TableRowItem[]) => {
|
||||||
|
const list = Array.isArray(data) ? data : [];
|
||||||
|
return list.map((item: any) => {
|
||||||
|
const pinyinMap: Record<string, string> = {};
|
||||||
|
// 所有列都生成拼音用于检索
|
||||||
|
props.columnList.forEach((field) => {
|
||||||
|
if (item[field.prop]) {
|
||||||
|
pinyinMap[field.prop] = getFirstLetter(item[field.prop]).toLowerCase();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return { ...item, pinyinMap };
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
//搜索过滤逻辑
|
||||||
|
const filterDataHandle = () => {
|
||||||
|
const key = searchKey.value.trim().toLowerCase();
|
||||||
|
if (!key) {
|
||||||
|
filterData.value = [...processedTableData.value];
|
||||||
|
currentIndex.value = -1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
currentIndex.value = 0;
|
||||||
|
filterData.value = processedTableData.value.filter((item) => {
|
||||||
|
let match = false;
|
||||||
|
// 遍历所有列:文本匹配 + 拼音简拼匹配
|
||||||
|
props.columnList.forEach((field) => {
|
||||||
|
const text = item[field.prop]?.toString().toLowerCase() || '';
|
||||||
|
const pinyin = item.pinyinMap[field.prop] || '';
|
||||||
|
if (text.includes(key) || pinyin.includes(key)) {
|
||||||
|
match = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return match;
|
||||||
|
});
|
||||||
|
// 过滤完成自动选中第一行
|
||||||
|
if (filterData.value.length > 0) {
|
||||||
|
nextTick(() => {
|
||||||
|
tableRef.value?.setCurrentRow(filterData.value[0]);
|
||||||
|
tableRef.value?.scrollToRow(filterData.value[0]);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
tableRef.value?.clearCurrentRow();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//搜索框上下回车键盘事件 ==========
|
||||||
|
const handleInputKeydown = (e: KeyboardEvent) => {
|
||||||
|
if (!['ArrowUp', 'ArrowDown', 'Enter'].includes(e.key)) return;
|
||||||
|
e.stopPropagation();
|
||||||
|
if (filterData.value.length > 0) {
|
||||||
|
nextTick(() => {
|
||||||
|
const tableBox = searchInput.value.$el.closest('.table-panel').querySelector('div[tabindex="0"]') as HTMLElement;
|
||||||
|
if (tableBox) {
|
||||||
|
tableBox.focus();
|
||||||
|
tableBox.dispatchEvent(new KeyboardEvent('keydown', { key: e.key }));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (e.key === 'Enter') {
|
||||||
|
const targetRow = filterData.value[currentIndex.value];
|
||||||
|
targetRow && handleRowClick({ row: targetRow });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//表格容器上下键导航 ==========
|
||||||
|
const handleTableKeydown = (e: KeyboardEvent) => {
|
||||||
|
if (!['ArrowUp', 'ArrowDown', 'Enter'].includes(e.key)) return;
|
||||||
|
e.preventDefault();
|
||||||
|
const maxIdx = filterData.value.length - 1;
|
||||||
|
if (e.key === 'ArrowUp') {
|
||||||
|
currentIndex.value = Math.max(0, currentIndex.value - 1);
|
||||||
|
} else if (e.key === 'ArrowDown') {
|
||||||
|
currentIndex.value = Math.min(maxIdx, currentIndex.value + 1);
|
||||||
|
}
|
||||||
|
tableRef.value.setCurrentRow(filterData.value[currentIndex.value]);
|
||||||
|
tableRef.value.scrollToRow(filterData.value[currentIndex.value]);
|
||||||
|
if (e.key === 'Enter') {
|
||||||
|
const targetRow = filterData.value[currentIndex.value];
|
||||||
|
targetRow && handleRowClick({ row: targetRow });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// ========== 监听原始表格数据变化,重新生成拼音数据 ==========
|
||||||
|
watch(
|
||||||
|
() => props.tableData,
|
||||||
|
(newVal) => {
|
||||||
|
if (!Array.isArray(newVal)) return;
|
||||||
|
processedTableData.value = processTableData(newVal);
|
||||||
|
filterDataHandle();
|
||||||
|
},
|
||||||
|
{ deep: true, immediate: true }
|
||||||
|
)
|
||||||
|
|
||||||
|
// 原有监听逻辑不变
|
||||||
watch(
|
watch(
|
||||||
() => props.modelValue,
|
() => props.modelValue,
|
||||||
(val) => {
|
(val) => {
|
||||||
@ -99,13 +239,13 @@ watch(inputText, (val) => {
|
|||||||
emit('update:modelValue', val)
|
emit('update:modelValue', val)
|
||||||
})
|
})
|
||||||
|
|
||||||
// 回车处理
|
// 输入框回车(原有逻辑)
|
||||||
const handleInputEnter = (e: KeyboardEvent) => {
|
const handleInputEnter = (e: KeyboardEvent) => {
|
||||||
e.stopPropagation();
|
e.stopPropagation()
|
||||||
emit('search', inputText.value)
|
emit('search', inputText.value)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 仅点击箭头才切换下拉
|
// 切换下拉框(修改:打开时聚焦搜索框、刷新过滤)
|
||||||
const toggleDropdown = () => {
|
const toggleDropdown = () => {
|
||||||
if (!dropdownRef.value) return
|
if (!dropdownRef.value) return
|
||||||
showPanel.value = !showPanel.value
|
showPanel.value = !showPanel.value
|
||||||
@ -113,24 +253,32 @@ const toggleDropdown = () => {
|
|||||||
dropdownRef.value.handleOpen()
|
dropdownRef.value.handleOpen()
|
||||||
tableLoading.value = true
|
tableLoading.value = true
|
||||||
emit('open')
|
emit('open')
|
||||||
|
searchKey.value = '';
|
||||||
|
filterDataHandle();
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
tableLoading.value = false
|
tableLoading.value = false
|
||||||
|
// 只有开启搜索框才聚焦
|
||||||
|
if (props.showSearch && searchInput.value) {
|
||||||
|
searchInput.value?.focus();
|
||||||
|
}
|
||||||
}, 300)
|
}, 300)
|
||||||
} else {
|
} else {
|
||||||
dropdownRef.value.handleClose()
|
dropdownRef.value.handleClose()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 行点击选中
|
// 表格行点击(原有逻辑完全不变)
|
||||||
const handleRowClick = (row: TableRowItem) => {
|
const handleRowClick = (params: { row: TableRowItem }) => {
|
||||||
const text = row[bindField] ?? ''
|
const text = params.row[bindField] ?? ''
|
||||||
inputText.value = text
|
inputText.value = text
|
||||||
emit('update:modelValue', text)
|
emit('update:modelValue', text)
|
||||||
emit('change', row)
|
emit('change', params.row)
|
||||||
|
currentRow.value = params.row
|
||||||
dropdownRef.value?.handleClose()
|
dropdownRef.value?.handleClose()
|
||||||
showPanel.value = false
|
showPanel.value = false
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.dropdown-table-select {
|
.dropdown-table-select {
|
||||||
.input-wrap {
|
.input-wrap {
|
||||||
@ -152,6 +300,18 @@ const handleRowClick = (row: TableRowItem) => {
|
|||||||
|
|
||||||
.table-panel {
|
.table-panel {
|
||||||
padding: 12px;
|
padding: 12px;
|
||||||
|
width: 100%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 只清除最小宽度限制,删除强制 width:100% 代码 */
|
||||||
|
:deep(.el-popper) {
|
||||||
|
min-width: 0 !important;
|
||||||
|
max-width: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 修复vxe-table滚动空白样式 */
|
||||||
|
:deep(.vxe-table--body) {
|
||||||
|
overflow-anchor: none;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
@ -29,18 +29,18 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- 数据为空时显示空状态提示 -->
|
<!-- 数据为空时显示空状态提示 -->
|
||||||
<el-empty v-if="filterData.length === 0" description="没有匹配的数据" :image-size="100" />
|
<el-empty v-if="filterData.length === 0" description="没有匹配的数据" :image-size="100" />
|
||||||
<div @keydown="handleKeydown" v-else tabindex="0" style="outline: none;">
|
<div @keydown="handleKeydown" v-else tabindex="0" style="outline: none;" class="mytable-style">
|
||||||
<!-- 数据存在时显示表格 -->
|
<!-- 数据存在时显示表格 -->
|
||||||
<!-- <el-table ref="tableRef" :data="filterData" :highlight-current-row="props.isHighlight" style="width: 100%"
|
<!-- <el-table ref="tableRef" :data="filterData" :highlight-current-row="props.isHighlight" style="width: 100%"
|
||||||
:border="props.border" @row-click="handleRowChange" max-height="350px" :row-style="{ height: '25px' }">
|
:border="props.border" @row-click="handleRowChange" max-height="350px" :row-style="{ height: '25px' }">
|
||||||
<el-table-column v-for="field in props.fields" :prop="field.prop" :label="field.label"
|
<el-table-column v-for="field in props.fields" :prop="field.prop" :label="field.label"
|
||||||
:width="field.width" show-overflow-tooltip align="center" />
|
:width="field.width" show-overflow-tooltip align="center" />
|
||||||
</el-table> -->
|
</el-table> -->
|
||||||
<vxe-table class="mytable-style" ref="tableRef" border resizable max-height="350px"
|
<vxe-table ref="tableRef" border resizable max-height="350px"
|
||||||
:row-config="{ isHover: true, keyField: 'value', height: 30, isCurrent: true }" :data="filterData"
|
:row-config="{ isHover: true, keyField: 'value', height: 30, isCurrent: true }" :data="filterData"
|
||||||
:current-row="currentRow" @cell-click="currentChange"
|
:current-row="currentRow" @cell-click="currentChange"
|
||||||
:tooltip-config="{ appendToBody: true, zIndex: 3000 }" :show-overflow="true"
|
:tooltip-config="{ appendToBody: true, zIndex: 3000 }" :show-overflow="true"
|
||||||
:scroll-y="{ enabled: true, rSize: 30, height: '100%' }">
|
:scroll-y="{ enabled: true, rSize: 30, height: '100%', oSize: 20, gt: 30, }">
|
||||||
<vxe-table-column v-for="field in props.fields" :field="field.prop" :title="field.label" align="center"
|
<vxe-table-column v-for="field in props.fields" :field="field.prop" :title="field.label" align="center"
|
||||||
:width="field.width" min-width="150" />
|
:width="field.width" min-width="150" />
|
||||||
</vxe-table>
|
</vxe-table>
|
||||||
@ -359,23 +359,6 @@ const clearHandle = () => {
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.vxe-header--row th) {
|
|
||||||
border-color: #00a5ff;
|
|
||||||
// background-color: #e6edf9;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
|
|
||||||
:deep(.vxe-body--row td) {
|
|
||||||
border-color: #00a5ff;
|
|
||||||
}
|
|
||||||
|
|
||||||
:deep(.vxe-table--row-hover) {
|
|
||||||
background-color: #00a5ff;
|
|
||||||
}
|
|
||||||
|
|
||||||
:deep(.vxe-table--current-row) {
|
|
||||||
background-color: #00a5ff;
|
|
||||||
}
|
|
||||||
|
|
||||||
:deep(.el-table-header-cell) {
|
:deep(.el-table-header-cell) {
|
||||||
cursor: move;
|
cursor: move;
|
||||||
@ -383,20 +366,16 @@ const clearHandle = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 表格边框
|
// 表格边框
|
||||||
:deep(.vxe-table--render-default.border--full .vxe-body--column) {
|
// :deep(.vxe-table--render-default.border--full .vxe-body--column) {
|
||||||
background-image: linear-gradient(#96B8D9, #96B8D9), linear-gradient(#96B8D9, #96B8D9) !important;
|
// background-image: linear-gradient(#ccc, #ccc), linear-gradient(#ccc, #ccc) !important;
|
||||||
}
|
// }
|
||||||
|
|
||||||
// 表头边框
|
// // 表头边框
|
||||||
:deep(.vxe-table--render-default.border--full .vxe-header--column) {
|
// :deep(.vxe-table--render-default.border--full .vxe-header--column) {
|
||||||
background-image: linear-gradient(#e6edf9, #e6edf9), linear-gradient(#e6edf9, #e6edf9) !important;
|
// background-image: linear-gradient(#ccc, #ccc), linear-gradient(#ccc, #ccc) !important;
|
||||||
}
|
// }
|
||||||
|
|
||||||
.select-table-dropdown {
|
.select-table-dropdown {
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.el-table .el-table__cell) {
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
@ -1 +1,4 @@
|
|||||||
export * from './lisData/dictData';
|
export * from './lisData/dictData';
|
||||||
|
export * from './useSysParam'
|
||||||
|
export * from './messageBox'
|
||||||
|
export * from './useCommonDict'
|
||||||
102
src/hooks/useCommonDict.ts
Normal file
102
src/hooks/useCommonDict.ts
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
import { queryLisProject, queryUserInfo, currentDateTime, getBloodBreed, queryIllDiagnoseList } from '@/api/common'
|
||||||
|
import dayjs from 'dayjs'
|
||||||
|
// 员工下拉类型
|
||||||
|
type option = {
|
||||||
|
label: string
|
||||||
|
value: string
|
||||||
|
}
|
||||||
|
// 血液品种下拉类型
|
||||||
|
type BreedOption = {
|
||||||
|
label: string
|
||||||
|
value: string
|
||||||
|
unit: string
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检验项目表格初始行结构
|
||||||
|
type LisProjectRow = {
|
||||||
|
bill_no: string
|
||||||
|
item_name: string
|
||||||
|
item_result: string
|
||||||
|
item_unit: string
|
||||||
|
test_date: string
|
||||||
|
sid: string | number
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
export function useCommonDict() {
|
||||||
|
|
||||||
|
const getServerTime = async () => {
|
||||||
|
const res = await currentDateTime()
|
||||||
|
return res.data
|
||||||
|
}
|
||||||
|
|
||||||
|
// 员工下拉列表
|
||||||
|
const userList = ref<option[]>([])
|
||||||
|
const getUserData = async () => {
|
||||||
|
const res = await queryUserInfo()
|
||||||
|
userList.value = res.rows.map(item => ({
|
||||||
|
label: item.nickName,
|
||||||
|
value: item.userName
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
|
// 血液品种下拉
|
||||||
|
const bloodBreed = ref<BreedOption[]>([])
|
||||||
|
const getBloodList = async () => {
|
||||||
|
const res = await getBloodBreed()
|
||||||
|
bloodBreed.value = res.data.map(item => ({
|
||||||
|
label: item.breed_name,
|
||||||
|
value: item.breed_code,
|
||||||
|
unit: item.unit
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检验项目LIS项目
|
||||||
|
const lisProject = ref<LisProjectRow[]>([])
|
||||||
|
const getLisProject = async () => {
|
||||||
|
const res = await queryLisProject({ need: 'Y' })
|
||||||
|
lisProject.value = res.data.map(item => ({
|
||||||
|
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
|
||||||
|
}))
|
||||||
|
return lisProject.value
|
||||||
|
}
|
||||||
|
|
||||||
|
// 单病种列表
|
||||||
|
const diaList = ref<option[]>([])
|
||||||
|
const getDiaList = async () => {
|
||||||
|
const res = await queryIllDiagnoseList({ pageSize: 9999, pageNum: 1 })
|
||||||
|
diaList.value = res.rows.map(item => ({
|
||||||
|
label: item.dia_Name,
|
||||||
|
value: item.dia_Code
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
|
// 一次性加载
|
||||||
|
const loadAllDict = async () => {
|
||||||
|
await Promise.all([
|
||||||
|
getUserData(),
|
||||||
|
getBloodList(),
|
||||||
|
getLisProject(),
|
||||||
|
getDiaList()
|
||||||
|
])
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
getServerTime,
|
||||||
|
userList,
|
||||||
|
getUserData,
|
||||||
|
bloodBreed,
|
||||||
|
getBloodList,
|
||||||
|
loadAllDict,
|
||||||
|
lisProject,
|
||||||
|
getLisProject,
|
||||||
|
diaList,
|
||||||
|
getDiaList
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -25,8 +25,9 @@ const { initAllParams } = useSysParam()
|
|||||||
|
|
||||||
// ========== 在这里统一维护【所有需要全局获取的参数 key】 ==========
|
// ========== 在这里统一维护【所有需要全局获取的参数 key】 ==========
|
||||||
const GLOBAL_PARAM_KEYS = [
|
const GLOBAL_PARAM_KEYS = [
|
||||||
'YBZFXMTSXX', // YBZFXMTSXX
|
'YBZFXMTSXX', // 输血报销
|
||||||
'HZBQGY', // 患者病情概要是否必填
|
'HZBQGY', // 患者病情概要是否必填
|
||||||
|
'SQDSFKRLXGXX',//输血申请时是否可从HIS系统中调出患者信息,是否可以录入修改患者血型?以"/"分隔,"/"前指可以调出患者信息时是否可以修改患者血型(Y可以修改N不可以修改),"/"后指不可以调出患者信息时是否可以录入全部和只能录入"未知"患者血型(Y可以录入全部N只能录入"未知")
|
||||||
]
|
]
|
||||||
|
|
||||||
const settingsStore = useSettingsStore()
|
const settingsStore = useSettingsStore()
|
||||||
|
|||||||
@ -81,6 +81,7 @@ export function comDict(...args: string[]): Promise<DictResult> {
|
|||||||
const dictList = resp.data.map((p: any) => ({
|
const dictList = resp.data.map((p: any) => ({
|
||||||
label: p.wordbook_name,
|
label: p.wordbook_name,
|
||||||
value: p.wordbook_code,
|
value: p.wordbook_code,
|
||||||
|
remark: p.remark,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
res.value[dictType] = dictList;
|
res.value[dictType] = dictList;
|
||||||
|
|||||||
@ -131,6 +131,8 @@ service.interceptors.response.use((res: any) => {
|
|||||||
duration: 0,
|
duration: 0,
|
||||||
})
|
})
|
||||||
return Promise.resolve(res.data)
|
return Promise.resolve(res.data)
|
||||||
|
} else if (code === 2) {
|
||||||
|
return Promise.resolve(res.data)
|
||||||
} else if (code === 3) {
|
} else if (code === 3) {
|
||||||
ElMessage({
|
ElMessage({
|
||||||
message: msg,
|
message: msg,
|
||||||
|
|||||||
142
src/views/doctor/application/component/reviewComments.vue
Normal file
142
src/views/doctor/application/component/reviewComments.vue
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
<template>
|
||||||
|
<el-dialog v-model="dialogVisible" title="审核意见" width="900px" :close-on-click-modal="false" @close="resetForm">
|
||||||
|
<!-- 上方指征表格 -->
|
||||||
|
<el-table ref="tableRef" :data="tableData" border style="margin-bottom: 16px" max-height="320"
|
||||||
|
@selection-change="handleSelectionChange">
|
||||||
|
<el-table-column type="selection" width="50" align="center" />
|
||||||
|
<el-table-column label="指征名称" prop="indicateName" min-width="280" />
|
||||||
|
<el-table-column label="补充说明" prop="remark" min-width="320" />
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<!-- 下方表单区域 -->
|
||||||
|
<el-form label-width="130px" :model="indicationForm" :rules="rules">
|
||||||
|
<el-form-item label="审核意见" prop="checkResult">
|
||||||
|
<SelectTable v-model:data="indicationForm.checkResult" dict-type="sqdshyj" placeholder="" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="审核备注">
|
||||||
|
<el-input v-model="indicationForm.checkExplain" type="textarea" :rows="4" placeholder="" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="上次血型复核">
|
||||||
|
<span>{{ indicationForm.checkDateText }}</span>
|
||||||
|
</el-form-item>
|
||||||
|
<div class="row-flex">
|
||||||
|
<el-form-item label="是否需要血型复核">
|
||||||
|
<el-checkbox v-model="indicationForm.needCheck" true-value="Y" false-value="N" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="输血合理性">
|
||||||
|
<el-select v-model="indicationForm.validFlag" placeholder="" style="width:150px">
|
||||||
|
<el-option label="合理" value="Y"></el-option>
|
||||||
|
<el-option label="不合理" value="N"></el-option>
|
||||||
|
<el-option label="待定" value="W"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</el-form>
|
||||||
|
|
||||||
|
<template #footer>
|
||||||
|
<el-button type="primary" @click="handleSubmit">确定</el-button>
|
||||||
|
<el-button @click="dialogVisible = false">取消</el-button>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import type { ElTable } from 'element-plus'
|
||||||
|
import { checkExplain, queryCausailsList } from '@/api/doctor/application'
|
||||||
|
import { ElMessage } from 'element-plus'
|
||||||
|
import { ElMessageBox } from 'element-plus'
|
||||||
|
// 弹窗显隐
|
||||||
|
const dialogVisible = defineModel<boolean>()
|
||||||
|
const tableRef = ref<InstanceType<typeof ElTable>>()
|
||||||
|
// 存储表格勾选选中行
|
||||||
|
const selectedRows = ref<any[]>([])
|
||||||
|
|
||||||
|
const rules = {
|
||||||
|
checkResult: [{ required: true, message: '请选择审核意见', trigger: 'change' }]
|
||||||
|
}
|
||||||
|
// 表格数据源
|
||||||
|
const tableData = ref<{ indicateName: string; remark: string }[]>([])
|
||||||
|
|
||||||
|
// 表单变量
|
||||||
|
const indicationForm = ref({
|
||||||
|
checkExplain: '',
|
||||||
|
auditRemark: '',
|
||||||
|
checkResult: '',
|
||||||
|
validFlag: '',
|
||||||
|
needCheck: 'N'
|
||||||
|
})
|
||||||
|
|
||||||
|
const emit = defineEmits<{
|
||||||
|
(e: 'success'): void
|
||||||
|
}>()
|
||||||
|
|
||||||
|
// 表格勾选事件
|
||||||
|
const handleSelectionChange = (val: any[]) => {
|
||||||
|
selectedRows.value = val
|
||||||
|
}
|
||||||
|
|
||||||
|
// 提交逻辑
|
||||||
|
const handleSubmit = async () => {
|
||||||
|
if (!indicationForm.value.checkResult) return ElMessage.error('请选择审核意见')
|
||||||
|
if (indicationForm.value.checkResult == '001' && indicationForm.value.validFlag == 'N') {
|
||||||
|
ElMessageBox.confirm(
|
||||||
|
`审核意见:【同意】,输血合理性为【不合理】确定继续吗?`,
|
||||||
|
'提示',
|
||||||
|
{ type: 'warning', }
|
||||||
|
).then(() => {
|
||||||
|
comfirm()
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
comfirm()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const comfirm = () => {
|
||||||
|
checkExplain(indicationForm.value).then(res => {
|
||||||
|
if (res.code == 0) {
|
||||||
|
ElMessage.success(res.msg)
|
||||||
|
emit('success')
|
||||||
|
dialogVisible.value = false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 弹窗关闭重置表单、清空表格勾选
|
||||||
|
const resetForm = () => {
|
||||||
|
indicationForm.value = {
|
||||||
|
checkExplain: '',
|
||||||
|
auditRemark: '',
|
||||||
|
checkResult: '',
|
||||||
|
validFlag: '',
|
||||||
|
needCheck: 'N'
|
||||||
|
}
|
||||||
|
selectedRows.value = []
|
||||||
|
// 清空表格勾选
|
||||||
|
tableRef.value?.clearSelection()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const open = (data) => {
|
||||||
|
indicationForm.value = data
|
||||||
|
dialogVisible.value = true
|
||||||
|
queryCausailsList({ billNo: data.applyNo }).then(res => {
|
||||||
|
tableData.value = res.data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
defineExpose({
|
||||||
|
open
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.row-flex {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
gap: 12px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
File diff suppressed because it is too large
Load Diff
@ -42,7 +42,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- 基础信息 -->
|
<!-- 基础信息 -->
|
||||||
<div class="section">
|
<div class="section">
|
||||||
<div class="title">基础信息</div>
|
<div class="title">患者信息</div>
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<el-col :span="4">
|
<el-col :span="4">
|
||||||
<el-form-item label="住院号/ID号">
|
<el-form-item label="住院号/ID号">
|
||||||
@ -228,10 +228,10 @@
|
|||||||
</el-form>
|
</el-form>
|
||||||
|
|
||||||
<!-- 结果表格区 -->
|
<!-- 结果表格区 -->
|
||||||
<el-table :data="tableData" border style="width: 100%; margin-top: 10px" height="350" @row-click="handleRowClick"
|
<el-table :data="tableData" border style="width: 100%; margin-top: 10px" show-overflow-tooltip height="350"
|
||||||
highlight-current-row>
|
@row-click="handleRowClick" highlight-current-row>
|
||||||
<el-table-column prop="bill_no" label="评估单号" align="center" width="180" />
|
<el-table-column prop="bill_no" label="评估单号" align="center" width="150" />
|
||||||
<el-table-column prop="dept_id" label="科室" align="center">
|
<el-table-column prop="dept_id" label="科室" align="center" width="160">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
{{ formatDict(scope.row.dept_id, 'ks') }}
|
{{ formatDict(scope.row.dept_id, 'ks') }}
|
||||||
</template>
|
</template>
|
||||||
@ -304,11 +304,11 @@ const handleSearch = () => {
|
|||||||
getList()
|
getList()
|
||||||
}
|
}
|
||||||
const handleConfirm = () => {
|
const handleConfirm = () => {
|
||||||
if (!seelctRow.value.bill_no) return ElMessage.warning('请选择评估单')
|
if (!selectRow.value.bill_no) return ElMessage.warning('请选择评估单')
|
||||||
evaluationInfo.value.billNo = seelctRow.value.bill_no
|
evaluationInfo.value.billNo = selectRow.value.bill_no
|
||||||
getBillInfo()
|
getBillInfo()
|
||||||
visible.value = false
|
visible.value = false
|
||||||
seelctRow.value = {}
|
selectRow.value = {}
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleClose = () => {
|
const handleClose = () => {
|
||||||
@ -320,7 +320,7 @@ const handleClose = () => {
|
|||||||
bill_no: '',
|
bill_no: '',
|
||||||
beinhos_id: ''
|
beinhos_id: ''
|
||||||
}
|
}
|
||||||
seelctRow.value = {}
|
selectRow.value = {}
|
||||||
}
|
}
|
||||||
|
|
||||||
//获取评估单信息
|
//获取评估单信息
|
||||||
@ -333,7 +333,7 @@ const getBillInfo = () => {
|
|||||||
lisProject.value = res.data.xkTransfuseApplyTestitemList.map(item => {
|
lisProject.value = res.data.xkTransfuseApplyTestitemList.map(item => {
|
||||||
return {
|
return {
|
||||||
bill_no: item.bill_no,
|
bill_no: item.bill_no,
|
||||||
item_name: item.pro_name,
|
item_name: item.item_name,
|
||||||
item_result: item.item_result,
|
item_result: item.item_result,
|
||||||
item_unit: item.item_unit,
|
item_unit: item.item_unit,
|
||||||
test_date: item.test_date,
|
test_date: item.test_date,
|
||||||
@ -361,9 +361,9 @@ const splitAge = (ageStr: string) => {
|
|||||||
baseInfo.value.nldw = unit
|
baseInfo.value.nldw = unit
|
||||||
}
|
}
|
||||||
|
|
||||||
const seelctRow = ref({})
|
const selectRow = ref({})
|
||||||
const handleRowClick = (row) => {
|
const handleRowClick = (row) => {
|
||||||
seelctRow.value = row
|
selectRow.value = row
|
||||||
}
|
}
|
||||||
//查询单据信息
|
//查询单据信息
|
||||||
const getList = () => {
|
const getList = () => {
|
||||||
@ -441,14 +441,14 @@ const handleSubmit = () => {
|
|||||||
}
|
}
|
||||||
if (bloodInfo.value.bill_status && bloodInfo.value.bill_status == '1') {
|
if (bloodInfo.value.bill_status && bloodInfo.value.bill_status == '1') {
|
||||||
updatePat(data).then((res) => {
|
updatePat(data).then((res) => {
|
||||||
saveLoading.value = false
|
|
||||||
if (res.code == 0) {
|
if (res.code == 0) {
|
||||||
ElMessage.success('保存成功')
|
ElMessage.success('保存成功')
|
||||||
}
|
}
|
||||||
|
}).finally(() => {
|
||||||
|
saveLoading.value = false
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
savePat(data).then((res) => {
|
savePat(data).then((res) => {
|
||||||
saveLoading.value = false
|
|
||||||
if (res.code == 0) {
|
if (res.code == 0) {
|
||||||
ElMessage.success('保存成功')
|
ElMessage.success('保存成功')
|
||||||
evaluationInfo.value.billNo = res.data
|
evaluationInfo.value.billNo = res.data
|
||||||
@ -456,6 +456,8 @@ const handleSubmit = () => {
|
|||||||
//获取到评估单号后请求最新评估单信息
|
//获取到评估单号后请求最新评估单信息
|
||||||
getBillInfo()
|
getBillInfo()
|
||||||
}
|
}
|
||||||
|
}).finally(() => {
|
||||||
|
saveLoading.value = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -463,7 +465,12 @@ const handleSubmit = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const goSxPath = () => {
|
const goSxPath = () => {
|
||||||
router.push({ path: `/doctor/application` })
|
const billNo = evaluationInfo.value.billNo.trim()
|
||||||
|
// 额外添加标识 isJump 区分是主动跳转携带的参数
|
||||||
|
router.push({
|
||||||
|
name: 'Application',
|
||||||
|
state: { billNo, isJump: true }
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const getProject = () => {
|
const getProject = () => {
|
||||||
@ -513,7 +520,7 @@ onMounted(() => {
|
|||||||
background: #fff;
|
background: #fff;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.08);
|
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.08);
|
||||||
padding: 12px;
|
padding: 10px;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
|
|
||||||
.title {
|
.title {
|
||||||
|
|||||||
17
src/views/doctor/autologous/index.vue
Normal file
17
src/views/doctor/autologous/index.vue
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
/**
|
||||||
|
* @file index.vue
|
||||||
|
* @description: 储存室自体血登记
|
||||||
|
* @author: w
|
||||||
|
* @since: 2026-07-08
|
||||||
|
*/
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
储存室自体血登记
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped></style>
|
||||||
313
src/views/doctor/treatment/index copy.vue
Normal file
313
src/views/doctor/treatment/index copy.vue
Normal file
@ -0,0 +1,313 @@
|
|||||||
|
/**
|
||||||
|
* @file index.vue
|
||||||
|
* @description: 输血治疗登记
|
||||||
|
* @author: w
|
||||||
|
* @since: 2026-07-08
|
||||||
|
*/
|
||||||
|
<template>
|
||||||
|
<div class="box-container">
|
||||||
|
<div class="toolbar">
|
||||||
|
<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>
|
||||||
|
<el-button type="warning" plain>打印</el-button>
|
||||||
|
<el-button type="info" plain>标签重打</el-button>
|
||||||
|
</div>
|
||||||
|
<el-form label-width="auto">
|
||||||
|
<div class="section">
|
||||||
|
<div class="section-title">申请信息</div>
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="4">
|
||||||
|
<el-form-item label="申请单号">
|
||||||
|
<DropdownTableSelect v-model="form.beinhos_id" :columnList="sqcolumnList" :tableData="sqList"
|
||||||
|
tableWidth="300px" labelField="beinhos_id" :showSearch="false" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="4">
|
||||||
|
<el-form-item label="住院号/ID号">
|
||||||
|
<el-input v-model="form.patientId" readonly />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="4">
|
||||||
|
<el-form-item label="姓 名">
|
||||||
|
<el-input v-model="form.patientName" readonly />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="4">
|
||||||
|
<el-form-item label="性 别">
|
||||||
|
<el-select v-model="form.sex" placeholder="" readonly>
|
||||||
|
<el-option label="男" value="男" />
|
||||||
|
<el-option label="女" value="女" />
|
||||||
|
<el-option label="未知" value="未知" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="4">
|
||||||
|
<el-form-item label="血 型">
|
||||||
|
<el-input v-model="form.bloodType" readonly />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="4">
|
||||||
|
<el-form-item label="科 室">
|
||||||
|
<SelectTable v-model:data="form.deptId" :tableData="dictData.ks" placeholder="" readonly />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="4">
|
||||||
|
<el-form-item label="申请日期">
|
||||||
|
<el-date-picker v-model="form.applyDate" type="datetime" style="width: 100%"
|
||||||
|
value-format="YYYY-MM-DD HH:mm:ss" readonly />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="4">
|
||||||
|
<el-form-item label="治疗日期">
|
||||||
|
<el-date-picker v-model="form.treatDate" type="datetime" style="width: 100%"
|
||||||
|
value-format="YYYY-MM-DD HH:mm:ss" readonly />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="4">
|
||||||
|
<el-form-item label="年 龄">
|
||||||
|
<div>
|
||||||
|
<el-input v-model="form.age" readonly />
|
||||||
|
<!-- <el-select v-model="form.nldw" placeholder="" style="width: 45%">
|
||||||
|
<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="Rh(D)">
|
||||||
|
<el-input v-model="form.rh" readonly />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="4">
|
||||||
|
<el-form-item label="是否采血">
|
||||||
|
<el-checkbox v-model="form.collectBlood" true-value="Y" false-value="N" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="4">
|
||||||
|
<el-form-item label="输血史">
|
||||||
|
<el-checkbox v-model="form.transfusionHistory" true-value="Y" false-value="N" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="4">
|
||||||
|
<el-form-item label="输血反应史">
|
||||||
|
<el-checkbox v-model="form.transfusionReactionHistory" true-value="Y" false-value="N" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="4">
|
||||||
|
<el-form-item label="妊娠史">
|
||||||
|
<el-checkbox v-model="form.pregnancyHistory" true-value="Y" false-value="N" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="4">
|
||||||
|
<el-form-item label="分娩史">
|
||||||
|
<el-checkbox v-model="form.deliveryHistory" true-value="Y" false-value="N" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</div>
|
||||||
|
</el-form>
|
||||||
|
<el-row :gutter="10">
|
||||||
|
<el-col :span="12">
|
||||||
|
<div class="box-item">
|
||||||
|
<div class="box-title">治疗项目</div>
|
||||||
|
<div class="table-box">
|
||||||
|
<el-table :data="treatmentItems" border height="150" style="width: 100%" show-overflow-tooltip
|
||||||
|
highlight-current-row>
|
||||||
|
<el-table-column prop="project" label="治疗项目" align="center" />
|
||||||
|
<el-table-column prop="quantity" label="数量" align="center" />
|
||||||
|
<el-table-column prop="unit" label="单位" align="center" />
|
||||||
|
<el-table-column prop="remark" label="备注" align="center" />
|
||||||
|
</el-table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<div class="box-item">
|
||||||
|
<div class="box-title">采血血液</div>
|
||||||
|
<div class="table-box">
|
||||||
|
<el-table :data="bloodItems" border height="150" style="width: 100%" show-overflow-tooltip
|
||||||
|
highlight-current-row>
|
||||||
|
<el-table-column prop="bloodBreed" label="血液品种" align="center" />
|
||||||
|
<el-table-column prop="volume" label="容量" align="center" />
|
||||||
|
<el-table-column prop="unit" label="单位" align="center" />
|
||||||
|
<el-table-column prop="remark" label="备注" align="center" />
|
||||||
|
</el-table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<div class="section">
|
||||||
|
<div class="section-title">登记信息</div>
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="4">
|
||||||
|
<el-form-item label="治 疗 人">
|
||||||
|
<SelectTable v-model:data="registerInfo.apply_medic" :tableData="userList" placeholder="" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="4">
|
||||||
|
<el-form-item label="治疗日期">
|
||||||
|
<el-date-picker v-model="registerInfo.treatDate" type="datetime" style="width: 100%"
|
||||||
|
value-format="YYYY-MM-DD HH:mm:ss" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="治疗不良反应">
|
||||||
|
<el-input v-model="registerInfo.adverseReaction" placeholder="双击选择" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="不良反应处理">
|
||||||
|
<el-input v-model="registerInfo.adverseHandle" placeholder="双击选择" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="section">
|
||||||
|
<div class="section-title">采血信息</div>
|
||||||
|
<div class="table-box">
|
||||||
|
<el-button type="primary" plain class="mb10">新增血液</el-button>
|
||||||
|
<el-table :data="bloodRecords" border height="220" style="width: 100%">
|
||||||
|
<el-table-column prop="bloodBreed" label="血液品种" align="center" />
|
||||||
|
<el-table-column prop="bloodType" label="血型" align="center" />
|
||||||
|
<el-table-column prop="rh" label="Rh(D)" align="center" />
|
||||||
|
<el-table-column prop="volume" label="容量" align="center" />
|
||||||
|
<el-table-column prop="unit" label="单位" align="center" />
|
||||||
|
<el-table-column label="操作" align="center">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<el-button type="primary" text plain>删除</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import DropdownTableSelect from '@/components/DropdownTableSelect/index.vue'
|
||||||
|
import { getDictData, formatDict, dictData, useCommonDict, useSysParam } from '@/hooks'
|
||||||
|
|
||||||
|
const { userList, getUserData } = useCommonDict()
|
||||||
|
const form = reactive({})
|
||||||
|
const sqcolumnList = ref([
|
||||||
|
{ label: '申请单编号', prop: 'sqbh' },
|
||||||
|
{ label: '姓名', prop: 'name' },
|
||||||
|
])
|
||||||
|
const sqList = ref([])
|
||||||
|
const treatmentItems = ref([])
|
||||||
|
|
||||||
|
const bloodItems = ref([])
|
||||||
|
|
||||||
|
const registerInfo = reactive({
|
||||||
|
treatPerson: '',
|
||||||
|
treatDate: '',
|
||||||
|
adverseReaction: '',
|
||||||
|
adverseHandle: ''
|
||||||
|
})
|
||||||
|
|
||||||
|
const bloodRecords = ref([])
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
getUserData()
|
||||||
|
getDictData('ks', 'nldw')
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.box-container {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
box-sizing: border-box;
|
||||||
|
gap: 10px;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toolbar {
|
||||||
|
padding: 8px;
|
||||||
|
background: #fff;
|
||||||
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section {
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 4px;
|
||||||
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-form-item {
|
||||||
|
margin-bottom: 6px;
|
||||||
|
|
||||||
|
:deep(.el-form-item__label) {
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.section-title {
|
||||||
|
font-size: 15px;
|
||||||
|
font-weight: 700;
|
||||||
|
position: relative;
|
||||||
|
padding-left: 14px;
|
||||||
|
padding-bottom: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section-title::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
top: 4px;
|
||||||
|
width: 4px;
|
||||||
|
height: 16px;
|
||||||
|
border-radius: 0 4px 4px 0;
|
||||||
|
background-color: #409eff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.box-item {
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 4px;
|
||||||
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
|
||||||
|
padding: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.box-title {
|
||||||
|
font-size: 15px;
|
||||||
|
font-weight: 700;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
position: relative;
|
||||||
|
padding-left: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.box-title::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
top: 4px;
|
||||||
|
width: 4px;
|
||||||
|
height: 16px;
|
||||||
|
border-radius: 0 4px 4px 0;
|
||||||
|
background-color: #409eff;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.age-input {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-danger {
|
||||||
|
color: #f00 !important;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
11
src/views/doctor/treatment/index.vue
Normal file
11
src/views/doctor/treatment/index.vue
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
输血治疗登记
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped></style>
|
||||||
@ -238,6 +238,7 @@ function reset() {
|
|||||||
form.value = {
|
form.value = {
|
||||||
wordbook_sign: '',
|
wordbook_sign: '',
|
||||||
wordbook_name: '',
|
wordbook_name: '',
|
||||||
|
wordbook_code_old: '',
|
||||||
wordbook_code: '',
|
wordbook_code: '',
|
||||||
use_sign: "Y",
|
use_sign: "Y",
|
||||||
remark: undefined
|
remark: undefined
|
||||||
@ -268,6 +269,7 @@ function handleAdd() {
|
|||||||
function handleUpdate(row) {
|
function handleUpdate(row) {
|
||||||
reset()
|
reset()
|
||||||
form.value = row.wordbook_sign ? JSON.parse(JSON.stringify(row)) : info.value
|
form.value = row.wordbook_sign ? JSON.parse(JSON.stringify(row)) : info.value
|
||||||
|
form.value.wordbook_code_old = row.wordbook_code
|
||||||
open.value = true;
|
open.value = true;
|
||||||
title.value = '编辑字典';
|
title.value = '编辑字典';
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user