Files
his/openhis-ui-vue3/src/views/inpatientDoctor/home/components/applicationShow/nursingStatus.vue
2025-12-27 15:30:25 +08:00

1092 lines
35 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="nursing-status-container">
<div class="nursing-status-header">
<h3>护理状态</h3>
</div>
<div v-if="loading" class="loading-container">
<el-row justify="center">
<el-col :span="6">
<el-empty description="正在加载数据..." image-size="100" />
</el-col>
</el-row>
</div>
<template v-else>
<!-- 护理状态表格 -->
<el-table
:data="nursingItems"
border
style="width: 100%"
class="nursing-table"
:header-cell-style="{ backgroundColor: '#f5f7fa' }"
>
<el-table-column prop="item" label="项目" width="180" align="center" />
<el-table-column prop="currentStatus" label="当前状态" width="260" align="center">
<template #default="scope">
<<<<<<< HEAD
<el-tag :type="getStatusType(scope.row.currentStatus)" size="small" class="status-tag">
=======
<el-tag
v-if="scope.row.currentStatus"
:type="getStatusType(scope.row.currentStatus)"
size="small"
class="status-tag"
>
>>>>>>> v1.3
{{ scope.row.currentStatus }}
</el-tag>
</template>
</el-table-column>
<el-table-column prop="operation" label="操作" align="center">
<template #default="scope">
<div class="operation-content">
<!-- 护理级别选项 - 水平排列 -->
<div v-if="scope.row.item === '护理级别'" class="options-horizontal">
<div
v-for="option in nursingLevelList"
:key="option.definitionId"
:class="[
'option-item',
{ selected: option.nursingOrderName === currentNursingLevel },
]"
@click="selectNursingLevel(option.nursingOrderName)"
>
{{ option.nursingOrderName }}
</div>
</div>
<!-- 病情选项 - 水平排列 -->
<div v-else-if="scope.row.item === '病情'" class="options-horizontal">
<div
v-for="option in conditionList"
:key="option.definitionId"
:class="[
'option-item',
{ selected: option.nursingOrderName === currentCondition },
]"
@click="selectCondition(option.nursingOrderName)"
>
{{ option.nursingOrderName }}
</div>
</div>
<!-- 护理常规选项 - 水平排列 -->
<div v-else-if="scope.row.item === '护理常规'" class="options-horizontal">
<div
v-for="option in nursingRoutineList"
:key="option.definitionId"
:class="[
'option-item',
{ selected: option.nursingOrderName === currentNursingRoutine },
]"
@click="selectNursingRoutine(option.nursingOrderName)"
>
{{ getShortName(option.nursingOrderName, 10) }}
</div>
</div>
<!-- 饮食选项 - 水平排列 -->
<div v-else-if="scope.row.item === '饮食'" class="options-horizontal">
<div
v-for="option in dietList"
:key="option.definitionId"
:class="['option-item', { selected: option.nursingOrderName === currentDiet }]"
@click="selectDiet(option.nursingOrderName)"
>
{{ option.nursingOrderName }}
</div>
</div>
<!-- 体位选项 - 水平排列 -->
<div v-else-if="scope.row.item === '体位'" class="options-horizontal">
<div
v-for="option in positionList"
:key="option.definitionId"
:class="[
'option-item',
{ selected: option.nursingOrderName === currentPosition },
]"
@click="selectPosition(option.nursingOrderName)"
>
{{ option.nursingOrderName }}
</div>
</div>
<!-- 陪护选项 - 水平排列 -->
<div v-else-if="scope.row.item === '陪护'" class="options-horizontal">
<div
v-for="option in companionCareList"
:key="option.definitionId"
:class="[
'option-item',
{ selected: option.nursingOrderName === currentCompanionCare },
]"
@click="selectCompanionCare(option.nursingOrderName)"
>
{{ option.nursingOrderName }}
</div>
</div>
<!-- 隔离等级选项 - 水平排列 -->
<div v-else-if="scope.row.item === '隔离等级'" class="options-horizontal">
<div
v-for="option in isolationLevelList"
:key="option.definitionId"
:class="[
'option-item',
{ selected: option.nursingOrderName === currentIsolationLevel },
]"
@click="selectIsolationLevel(option.nursingOrderName)"
>
{{ option.nursingOrderName }}
</div>
</div>
</div>
</template>
</el-table-column>
</el-table>
<!-- 操作按钮区域 -->
<div class="nursing-status-actions">
<<<<<<< HEAD
<el-button @click="handleCancel" size="small">取消</el-button>
<el-button type="primary" @click="handleConfirm" size="small">确定</el-button>
=======
<el-button @click="handleCancel" size="medium">取消</el-button>
<el-button type="primary" @click="handleConfirm" size="medium">确定</el-button>
>>>>>>> v1.3
</div>
</template>
</div>
</template>
<script setup>
import { getCurrentInstance, onMounted, ref, reactive, watch } from 'vue';
import { getNursingOrdersInfos, saveNursingOrders, getEncounterNursingOrders } from './api';
import { patientInfo } from '../../store/patient.js';
// 导入获取诊断信息的API
import { getEncounterDiagnosis } from '@/views/doctorstation/components/api';
const { proxy } = getCurrentInstance();
const loading = ref(false);
// 护理状态数据列表
const nursingLevelList = ref([]);
const conditionList = ref([]);
const dietList = ref([]);
const positionList = ref([]);
const companionCareList = ref([]);
const isolationLevelList = ref([]);
const nursingRoutineList = ref([]);
const nursingStatusList = ref([]);
// 当前选中的值 - 使用null表示未选择
const currentNursingLevel = ref(null);
const currentCondition = ref(null);
const currentDiet = ref(null);
const currentPosition = ref(null);
const currentNursingRoutine = ref(null);
const currentCompanionCare = ref(null);
const currentIsolationLevel = ref(null);
// 跟踪明确取消选择的项目,用于处理保存后的数据加载
const lastModifiedItems = reactive({
nursingLevel: false,
condition: false,
nursingRoutine: false,
diet: false,
position: false,
companionCare: false,
isolationLevel: false,
});
// 护理项目列表
const nursingItems = reactive([
{
item: '护理级别',
currentStatus: '',
changing: '',
operation: '',
},
{
item: '病情',
currentStatus: '',
changing: '',
operation: '',
},
{
item: '护理常规',
currentStatus: '',
changing: '',
operation: '',
},
{
item: '饮食',
currentStatus: '',
changing: '',
operation: '',
},
{
item: '体位',
currentStatus: '',
changing: '',
operation: '',
},
{
item: '陪护',
currentStatus: '',
changing: '',
operation: '',
},
{
item: '隔离等级',
currentStatus: '',
changing: '',
operation: '',
},
]);
// 获取标签类型
const getStatusType = (status) => {
if (status === '无') return 'default';
return 'primary'; // 改为蓝色
};
// 获取短名称(用于显示)
const getShortName = (fullName, maxLength) => {
if (fullName.length <= maxLength) return fullName;
return fullName.substring(0, maxLength) + '...';
};
// 护理级别选择处理
const selectNursingLevel = (value) => {
// 如果点击的是当前选中的值则取消选中设为null
if (currentNursingLevel.value === value) {
currentNursingLevel.value = null;
lastModifiedItems.nursingLevel = true; // 标记为已明确取消选择
} else {
currentNursingLevel.value = value;
lastModifiedItems.nursingLevel = false; // 有选择值,清除取消标记
}
// 更新当前状态显示
const nursingLevelItem = nursingItems.find((item) => item.item === '护理级别');
if (nursingLevelItem) {
nursingLevelItem.currentStatus = currentNursingLevel.value || '';
}
};
// 病情选择处理
const selectCondition = (value) => {
// 如果点击的是当前选中的值则取消选中设为null
if (currentCondition.value === value) {
currentCondition.value = null;
lastModifiedItems.condition = true; // 标记为已明确取消选择
} else {
currentCondition.value = value;
lastModifiedItems.condition = false; // 有选择值,清除取消标记
}
// 更新当前状态显示
const conditionItem = nursingItems.find((item) => item.item === '病情');
if (conditionItem) {
conditionItem.currentStatus = currentCondition.value || '';
}
};
// 护理常规选择处理
const selectNursingRoutine = (value) => {
// 如果点击的是当前选中的值则取消选中设为null
if (currentNursingRoutine.value === value) {
currentNursingRoutine.value = null;
lastModifiedItems.nursingRoutine = true; // 标记为已明确取消选择
} else {
currentNursingRoutine.value = value;
lastModifiedItems.nursingRoutine = false; // 有选择值,清除取消标记
}
// 更新当前状态显示
const nursingRoutineItem = nursingItems.find((item) => item.item === '护理常规');
if (nursingRoutineItem) {
nursingRoutineItem.currentStatus = currentNursingRoutine.value || '';
}
};
// 饮食选择处理
const selectDiet = (value) => {
// 如果点击的是当前选中的值则取消选中设为null
if (currentDiet.value === value) {
currentDiet.value = null;
lastModifiedItems.diet = true; // 标记为已明确取消选择
} else {
currentDiet.value = value;
lastModifiedItems.diet = false; // 有选择值,清除取消标记
}
// 更新当前状态显示
const dietItem = nursingItems.find((item) => item.item === '饮食');
if (dietItem) {
dietItem.currentStatus = currentDiet.value || '';
}
};
// 体位选择处理
const selectPosition = (value) => {
// 如果点击的是当前选中的值则取消选中设为null
if (currentPosition.value === value) {
currentPosition.value = null;
lastModifiedItems.position = true; // 标记为已明确取消选择
} else {
currentPosition.value = value;
lastModifiedItems.position = false; // 有选择值,清除取消标记
}
// 更新当前状态显示
const positionItem = nursingItems.find((item) => item.item === '体位');
if (positionItem) {
positionItem.currentStatus = currentPosition.value || '';
}
};
// 陪护选择处理
const selectCompanionCare = (value) => {
// 如果点击的是当前选中的值则取消选中设为null
if (currentCompanionCare.value === value) {
currentCompanionCare.value = null;
lastModifiedItems.companionCare = true; // 标记为已明确取消选择
} else {
currentCompanionCare.value = value;
lastModifiedItems.companionCare = false; // 有选择值,清除取消标记
}
// 更新当前状态显示
const companionCareItem = nursingItems.find((item) => item.item === '陪护');
if (companionCareItem) {
companionCareItem.currentStatus = currentCompanionCare.value || '';
}
};
// 隔离等级选择处理
const selectIsolationLevel = (value) => {
// 如果点击的是当前选中的值则取消选中设为null
if (currentIsolationLevel.value === value) {
currentIsolationLevel.value = null;
lastModifiedItems.isolationLevel = true; // 标记为已明确取消选择
} else {
currentIsolationLevel.value = value;
lastModifiedItems.isolationLevel = false; // 有选择值,清除取消标记
}
// 更新当前状态显示
const isolationLevelItem = nursingItems.find((item) => item.item === '隔离等级');
if (isolationLevelItem) {
isolationLevelItem.currentStatus = currentIsolationLevel.value || '';
}
};
// 从后端获取护理状态数据
const fetchNursingStatusData = () => {
// 显示加载状态
loading.value = true;
// 调用后端接口
getNursingOrdersInfos({
// encounterId: patientInfo.value.encounterId
})
.then((res) => {
// 隐藏加载状态
loading.value = false;
if (res.code === 200 && res.data) {
<<<<<<< HEAD
// 填充各列表数据
nursingLevelList.value = res.data.nursingList || [];
=======
let nursingList = [];
let nursingOrderNameList = ['I级护理', 'II级护理', 'III级护理', '特级护理'];
nursingOrderNameList.forEach((str) => {
(res.data.nursingList || []).forEach((item) => {
if (item.nursingOrderName == str) {
nursingList.push(item);
}
});
});
// 填充各列表数据
nursingLevelList.value = nursingList || [];
>>>>>>> v1.3
conditionList.value = res.data.conditionList || [];
dietList.value = res.data.dietList || [];
positionList.value = res.data.positionList || [];
companionCareList.value = res.data.companionCareList || [];
isolationLevelList.value = res.data.isolationLevelList || [];
nursingRoutineList.value = res.data.nursingRoutineList || [];
// 确保选项数据加载完成后,如果有患者信息则获取患者护理医嘱信息
if (patientInfo.value?.encounterId) {
fetchPatientNursingOrders();
}
}
})
.catch((error) => {
// 隐藏加载状态
loading.value = false;
// 记录错误日志
console.error('获取护理状态数据失败:', error);
// 添加用户友好的错误提示
if (proxy && proxy.$message) {
proxy.$message({
message: '获取护理状态数据失败,请稍后重试',
type: 'error',
});
}
});
};
// 组件挂载时自动获取数据
onMounted(() => {
fetchNursingStatusData();
});
// 监听患者信息变化,重新获取数据
watch(
patientInfo,
(newInfo) => {
if (newInfo?.encounterId) {
// 重置当前状态
resetCurrentStatus();
// 重新获取护理选项数据
fetchNursingStatusData();
// 延迟一小段时间再获取患者的护理医嘱信息,确保选项数据已经加载完成
setTimeout(() => {
fetchPatientNursingOrders();
}, 100);
}
},
{ deep: true }
);
// 重置当前选择状态
const resetCurrentStatus = () => {
currentNursingLevel.value = null;
currentCondition.value = null;
currentDiet.value = null;
currentPosition.value = null;
currentNursingRoutine.value = null;
currentCompanionCare.value = null;
currentIsolationLevel.value = null;
// 重置取消选择跟踪对象
Object.keys(lastModifiedItems).forEach((key) => {
lastModifiedItems[key] = false;
});
// 更新显示状态
nursingItems.forEach((item) => {
item.currentStatus = '';
});
};
// 获取患者的护理医嘱信息
const fetchPatientNursingOrders = () => {
// 确保有有效的就诊ID
if (!patientInfo.value?.encounterId) return;
// 调用API获取患者的护理医嘱数据
getEncounterNursingOrders({
encounterId: patientInfo.value.encounterId,
})
.then((res) => {
if (res.code === 200 && res.data) {
// 根据后端返回的definitionId匹配对应的选项
// 护理级别 (categoryEnum: 26)
// 只有当项目未被标记为明确取消选择时,才从后端加载数据
if (!lastModifiedItems.nursingLevel && res.data.nursing?.definitionId) {
const definitionId = res.data.nursing.definitionId;
// 在nursingLevelList中查找对应的选项
const matchedItem = nursingLevelList.value.find(
(item) => item.id === definitionId || item.definitionId === definitionId
);
if (matchedItem) {
currentNursingLevel.value = matchedItem.nursingOrderName;
const nursingLevelItem = nursingItems.find((item) => item.item === '护理级别');
if (nursingLevelItem) {
nursingLevelItem.currentStatus = matchedItem.nursingOrderName;
}
} else {
currentNursingLevel.value = null;
const nursingLevelItem = nursingItems.find((item) => item.item === '护理级别');
if (nursingLevelItem) {
nursingLevelItem.currentStatus = '';
}
}
} else {
currentNursingLevel.value = null;
const nursingLevelItem = nursingItems.find((item) => item.item === '护理级别');
if (nursingLevelItem) {
nursingLevelItem.currentStatus = '';
}
}
// 病情 (categoryEnum: 38)
if (!lastModifiedItems.condition && res.data.condition?.definitionId) {
const definitionId = res.data.condition.definitionId;
const matchedItem = conditionList.value.find(
(item) => item.id === definitionId || item.definitionId === definitionId
);
if (matchedItem) {
currentCondition.value = matchedItem.nursingOrderName;
const conditionItem = nursingItems.find((item) => item.item === '病情');
if (conditionItem) {
conditionItem.currentStatus = matchedItem.nursingOrderName;
}
} else {
currentCondition.value = null;
const conditionItem = nursingItems.find((item) => item.item === '病情');
if (conditionItem) {
conditionItem.currentStatus = '';
}
}
} else {
currentCondition.value = null;
const conditionItem = nursingItems.find((item) => item.item === '病情');
if (conditionItem) {
conditionItem.currentStatus = '';
}
}
// 护理常规 (categoryEnum: 39)
if (!lastModifiedItems.nursingRoutine && res.data.nursingRoutine?.definitionId) {
const definitionId = res.data.nursingRoutine.definitionId;
const matchedItem = nursingRoutineList.value.find(
(item) => item.id === definitionId || item.definitionId === definitionId
);
if (matchedItem) {
currentNursingRoutine.value = matchedItem.nursingOrderName;
const nursingRoutineItem = nursingItems.find((item) => item.item === '护理常规');
if (nursingRoutineItem) {
nursingRoutineItem.currentStatus = matchedItem.nursingOrderName;
}
} else {
currentNursingRoutine.value = null;
const nursingRoutineItem = nursingItems.find((item) => item.item === '护理常规');
if (nursingRoutineItem) {
nursingRoutineItem.currentStatus = '';
}
}
} else {
currentNursingRoutine.value = null;
const nursingRoutineItem = nursingItems.find((item) => item.item === '护理常规');
if (nursingRoutineItem) {
nursingRoutineItem.currentStatus = '';
}
}
// 饮食 (categoryEnum: 27)
if (!lastModifiedItems.diet && res.data.diet?.definitionId) {
const definitionId = res.data.diet.definitionId;
const matchedItem = dietList.value.find(
(item) => item.id === definitionId || item.definitionId === definitionId
);
if (matchedItem) {
currentDiet.value = matchedItem.nursingOrderName;
const dietItem = nursingItems.find((item) => item.item === '饮食');
if (dietItem) {
dietItem.currentStatus = matchedItem.nursingOrderName;
}
} else {
currentDiet.value = null;
const dietItem = nursingItems.find((item) => item.item === '饮食');
if (dietItem) {
dietItem.currentStatus = '';
}
}
} else {
currentDiet.value = null;
const dietItem = nursingItems.find((item) => item.item === '饮食');
if (dietItem) {
dietItem.currentStatus = '';
}
}
// 体位 (categoryEnum: 40)
if (!lastModifiedItems.position && res.data.position?.definitionId) {
const definitionId = res.data.position.definitionId;
const matchedItem = positionList.value.find(
(item) => item.id === definitionId || item.definitionId === definitionId
);
if (matchedItem) {
currentPosition.value = matchedItem.nursingOrderName;
const positionItem = nursingItems.find((item) => item.item === '体位');
if (positionItem) {
positionItem.currentStatus = matchedItem.nursingOrderName;
}
} else {
currentPosition.value = null;
const positionItem = nursingItems.find((item) => item.item === '体位');
if (positionItem) {
positionItem.currentStatus = '';
}
}
} else {
currentPosition.value = null;
const positionItem = nursingItems.find((item) => item.item === '体位');
if (positionItem) {
positionItem.currentStatus = '';
}
}
// 陪护 (categoryEnum: 41)
if (!lastModifiedItems.companionCare && res.data.companionCare?.definitionId) {
const definitionId = res.data.companionCare.definitionId;
const matchedItem = companionCareList.value.find(
(item) => item.id === definitionId || item.definitionId === definitionId
);
if (matchedItem) {
currentCompanionCare.value = matchedItem.nursingOrderName;
const companionCareItem = nursingItems.find((item) => item.item === '陪护');
if (companionCareItem) {
companionCareItem.currentStatus = matchedItem.nursingOrderName;
}
} else {
currentCompanionCare.value = null;
const companionCareItem = nursingItems.find((item) => item.item === '陪护');
if (companionCareItem) {
companionCareItem.currentStatus = '';
}
}
} else {
currentCompanionCare.value = null;
const companionCareItem = nursingItems.find((item) => item.item === '陪护');
if (companionCareItem) {
companionCareItem.currentStatus = '';
}
}
// 隔离等级 (categoryEnum: 42)
if (!lastModifiedItems.isolationLevel && res.data.isolationLevel?.definitionId) {
const definitionId = res.data.isolationLevel.definitionId;
const matchedItem = isolationLevelList.value.find(
(item) => item.id === definitionId || item.definitionId === definitionId
);
if (matchedItem) {
currentIsolationLevel.value = matchedItem.nursingOrderName;
const isolationLevelItem = nursingItems.find((item) => item.item === '隔离等级');
if (isolationLevelItem) {
isolationLevelItem.currentStatus = matchedItem.nursingOrderName;
}
} else {
currentIsolationLevel.value = null;
const isolationLevelItem = nursingItems.find((item) => item.item === '隔离等级');
if (isolationLevelItem) {
isolationLevelItem.currentStatus = '';
}
}
} else {
currentIsolationLevel.value = null;
const isolationLevelItem = nursingItems.find((item) => item.item === '隔离等级');
if (isolationLevelItem) {
isolationLevelItem.currentStatus = '';
}
}
}
})
.catch((error) => {
console.error('获取患者护理医嘱信息失败:', error);
});
};
// 定义暴露的属性
defineExpose({
refreshData: fetchNursingStatusData,
});
// 取消按钮处理函数
const handleCancel = () => {
// 重置所有选择状态
resetCurrentStatus();
// 重新获取患者的护理医嘱信息
if (patientInfo.value?.encounterId) {
fetchPatientNursingOrders();
}
// 添加提示信息
if (proxy && proxy.$message) {
proxy.$message({
message: '已取消设置',
type: 'info',
});
}
};
// 日期格式化函数
const formatDate = (date) => {
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
const hours = String(date.getHours()).padStart(2, '0');
const minutes = String(date.getMinutes()).padStart(2, '0');
const seconds = String(date.getSeconds()).padStart(2, '0');
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
};
// 确认按钮处理函数
const handleConfirm = async () => {
// 检查是否有有效的就诊ID和患者ID
if (!patientInfo.value?.encounterId || !patientInfo.value?.patientId) {
if (proxy && proxy.$message) {
proxy.$message({
message: '请先选择患者',
type: 'warning',
});
}
return;
}
// 显示加载状态
loading.value = true;
// 获取真实诊断ID
let conditionId = null;
let encounterDiagnosisId = null;
try {
// 确保patientInfo和encounterId存在
if (patientInfo.value && patientInfo.value.encounterId) {
console.log('开始获取诊断信息encounterId:', patientInfo.value.encounterId);
// 调用API获取患者的诊断信息
const diagnosisRes = await getEncounterDiagnosis(patientInfo.value.encounterId);
// 检查API响应是否成功
if (
diagnosisRes &&
diagnosisRes.code === 200 &&
diagnosisRes.data &&
Array.isArray(diagnosisRes.data) &&
diagnosisRes.data.length > 0
) {
const firstDiagnosis = diagnosisRes.data[0];
console.log('获取到的第一个诊断信息:', firstDiagnosis);
// 直接使用API返回的真实诊断ID
if (firstDiagnosis.conditionId && firstDiagnosis.encounterDiagnosisId) {
conditionId = firstDiagnosis.conditionId;
encounterDiagnosisId = firstDiagnosis.encounterDiagnosisId;
console.log(
'使用API返回的真实诊断ID - conditionId:',
conditionId,
'encounterDiagnosisId:',
encounterDiagnosisId
);
}
}
}
// 如果无法获取真实诊断ID才使用encounterId作为后备
if (!conditionId || !encounterDiagnosisId) {
conditionId = patientInfo.value?.encounterId;
encounterDiagnosisId = patientInfo.value?.encounterId;
console.log('使用encounterId作为诊断ID的后备值:', conditionId);
}
// 准备提交的数据,包含就诊相关信息和护理项目数组
const submitData = {
// 就诊id - 从store中获取真实的就诊ID
encounterId: patientInfo.value.encounterId,
// 患者id - 从store中获取真实的患者ID
patientId: patientInfo.value.patientId,
// 诊断ID - 使用真实的诊断ID
conditionId: conditionId,
// 就诊诊断id - 使用真实的诊断ID
encounterDiagnosisId: encounterDiagnosisId,
// 医嘱开始时间格式化为yyyy-MM-dd HH:mm:ss
startTime: formatDate(new Date()),
};
// 准备护理项目数据数组,按照后端要求的格式
const nursingOrdersSaveDetailDtoList = [];
// 添加护理级别 - 根据选项找到对应的definitionId
const selectedLevel = nursingLevelList.value.find(
(item) => item.nursingOrderName === currentNursingLevel.value
);
nursingOrdersSaveDetailDtoList.push({
definitionId: selectedLevel?.definitionId || null,
categoryEnum: 26, // 护理级别的categoryCode
});
// 添加病情
const selectedCondition = conditionList.value.find(
(item) => item.nursingOrderName === currentCondition.value
);
nursingOrdersSaveDetailDtoList.push({
definitionId: selectedCondition?.definitionId || null,
categoryEnum: 38, // 病情的categoryCode
});
// 添加护理常规
const selectedRoutine = nursingRoutineList.value.find(
(item) => item.nursingOrderName === currentNursingRoutine.value
);
nursingOrdersSaveDetailDtoList.push({
definitionId: selectedRoutine?.definitionId || null,
categoryEnum: 39, // 护理常规的categoryCode
});
// 添加饮食
const selectedDiet = dietList.value.find((item) => item.nursingOrderName === currentDiet.value);
nursingOrdersSaveDetailDtoList.push({
definitionId: selectedDiet?.definitionId || null,
categoryEnum: 27, // 膳食的categoryCode
});
// 添加体位
const selectedPosition = positionList.value.find(
(item) => item.nursingOrderName === currentPosition.value
);
nursingOrdersSaveDetailDtoList.push({
definitionId: selectedPosition?.definitionId || null,
categoryEnum: 40, // 体位的categoryCode
});
// 添加陪护
const selectedCompanion = companionCareList.value.find(
(item) => item.nursingOrderName === currentCompanionCare.value
);
nursingOrdersSaveDetailDtoList.push({
definitionId: selectedCompanion?.definitionId || null,
categoryEnum: 41, // 陪护的categoryCode
});
// 添加隔离等级
const selectedIsolation = isolationLevelList.value.find(
(item) => item.nursingOrderName === currentIsolationLevel.value
);
nursingOrdersSaveDetailDtoList.push({
definitionId: selectedIsolation?.definitionId || null,
categoryEnum: 42, // 隔离等级的categoryCode
});
// 将护理项目数组添加到提交数据中
submitData.nursingOrdersSaveDetailDtoList = nursingOrdersSaveDetailDtoList;
// 在控制台输出传给后端的数据
console.log('提交给后端的护理状态数据:', submitData);
// 调用API保存数据
const res = await saveNursingOrders(submitData);
// 处理成功响应
if (res.code === 200) {
if (proxy && proxy.$message) {
proxy.$message({
message: '护理医嘱保存成功',
type: 'success',
});
}
// 先重置当前状态,确保清除所有选择和跟踪标记
resetCurrentStatus();
// 延迟一小段时间再获取数据,确保后端已更新
setTimeout(() => {
// 重新加载患者的护理医嘱信息
fetchPatientNursingOrders();
}, 100);
} else {
if (proxy && proxy.$message) {
proxy.$message({
message: res.message || '保存失败',
type: 'error',
});
}
}
} catch (error) {
// 处理错误
console.error('保存护理医嘱失败:', error);
if (proxy && proxy.$message) {
proxy.$message({
message: '保存失败,请稍后重试',
type: 'error',
});
}
} finally {
// 隐藏加载状态
loading.value = false;
// 保存成功后,重新获取患者的护理医嘱信息以更新显示
if (patientInfo.value?.encounterId) {
fetchPatientNursingOrders();
}
}
};
</script>
<style lang="scss" scoped>
/* 操作按钮区域样式 */
.nursing-status-actions {
margin-top: 15px;
display: flex;
justify-content: flex-end;
gap: 10px;
padding: 10px 0;
border-top: 1px solid #ebeef5;
}
.nursing-status-container {
height: 100%;
padding: 15px;
display: flex;
flex-direction: column;
background-color: #ffffff;
overflow: auto;
}
.nursing-status-header {
margin-bottom: 15px;
padding-bottom: 10px;
border-bottom: 1px solid #ebeef5;
}
.nursing-status-header h3 {
margin: 0;
font-size: 16px;
font-weight: 600;
color: #303133;
}
.loading-container {
height: 200px;
display: flex;
align-items: center;
justify-content: center;
}
.nursing-table {
flex: 1;
overflow: auto;
font-size: 14px;
color: #303133;
::v-deep .el-table__header {
font-weight: 600;
}
::v-deep .el-table__cell {
padding: 12px 10px; /* 增加左右内边距 */
text-align: left; /* 调整为左对齐 */
border-right: 1px solid #ebeef5;
white-space: normal; /* 允许换行 */
word-break: break-word;
min-height: 40px; /* 设置最小高度 */
}
::v-deep .el-table__row:hover {
background-color: #f5f7fa;
}
::v-deep .el-table__row:nth-child(odd) {
background-color: #fafafa;
}
/* 为操作列设置更宽的最小宽度 */
::v-deep .el-table__column--operation {
min-width: 400px !important;
}
}
.status-tag {
padding: 4px 12px;
border-radius: 4px;
background-color: #409eff; /* 蓝色背景 */
color: #ffffff; /* 白色文字 */
}
.condition-text {
color: #409eff;
font-weight: 500;
}
.operation-content {
display: flex;
height: 100%;
width: 100%;
overflow: visible;
}
/* 水平排列样式 */
.options-horizontal {
display: flex;
flex-wrap: wrap;
gap: 8px;
justify-content: flex-start;
width: 100%;
align-items: flex-start;
}
.option-item {
padding: 6px 12px;
margin: 2px 0;
border-radius: 4px;
background-color: #f0f2f5;
color: #606266;
font-size: 13px;
text-align: center;
transition: all 0.3s ease;
cursor: pointer;
white-space: normal; /* 允许文本换行 */
max-width: 150px; /* 设置最大宽度 */
min-width: 80px; /* 设置最小宽度 */
word-break: keep-all; /* 保持单词完整性 */
}
/* 增强选中状态样式的优先级 */
.options-horizontal .option-item.selected {
background-color: #409eff !important;
color: #ffffff !important;
}
.option-item:hover:not(.selected) {
background-color: #ecf5ff;
color: #409eff;
}
/* 响应式调整 */
@media (max-width: 1200px) {
.nursing-table {
::v-deep .el-table__cell {
padding: 8px 8px;
}
::v-deep .el-table__column--operation {
min-width: 350px !important;
}
}
.option-item {
padding: 4px 8px;
font-size: 12px;
max-width: 130px;
}
}
@media (max-width: 768px) {
.nursing-status-container {
padding: 10px;
}
.nursing-table {
font-size: 12px;
::v-deep .el-table__cell {
padding: 6px 6px;
}
::v-deep .el-table__column--operation {
min-width: 300px !important;
}
}
.options-horizontal {
gap: 5px;
}
.option-item {
padding: 3px 6px;
font-size: 11px;
max-width: 120px;
}
}
</style>