fix(login): 修复获取用户绑定租户列表时用户名为空导致的URL错误

确保username参数存在,避免因为空值造成接口调用失败

feat(editor): 重构富文本编辑器组件并优化图片上传逻辑
- 使用 Composition API 重构代码结构,提升可维护性
- 改进图片上传功能,增强对 quill 实例的安全访问
- 更新样式排版,提高组件可读性和一致性

refactor(file-upload): 移除旧代理引用,使用 modern Vue API
替换 `proxy` 调用为 `modal` 插件直接调用,提升代码清晰度与健壮性

refactor(image-upload): 替换旧实例调用方式,强化错误提示机制
统一使用 `modal` 进行消息提示和加载状态控制,改善用户体验

refactor(tree-select): 引入 Composition API 优化节点操作逻辑
移除 `getCurrentInstance` 的不必要使用,改为明确的模板引用管理

chore(main): 添加 util._extend 补丁以消除 Node.js 环境警告
解决开发环境下由于 Node.js 内建模块缺失造成的运行时警告问题

feat(template): 完善跌倒/坠床评估护理记录单模板
- 增加详细注释说明各部分作用,便于后续维护
- 明确组件名称为中文,利于业务识别
- 丰富表单交互细节及数据处理逻辑,支持动态打分、措施选择等功能

refactor(template-index): 加强模板组件自动注册逻辑
增加组件 name 属性校验,防止无效或匿名组件被注册到全局
This commit is contained in:
2025-12-14 14:22:55 +08:00
parent e1b9d36153
commit 5bfadb9174
16 changed files with 367 additions and 237 deletions

View File

@@ -5,13 +5,11 @@
-->
<template>
<div class="container">
<!-- 页面头部标题 -->
<div class="header">
<h2 class="title">乾安县人民医院</h2>
<h3 class="subtitle">患者护理记录单</h3>
</div>
<!-- 护理记录表单 -->
<el-form :model="state.formData" label-position="top" class="nursing-form">
<!-- 患者基本信息 -->
<div class="patient-info">
@@ -60,11 +58,9 @@
</el-row>
</div>
<!-- 生命体征记录表格 -->
<!-- 基本信息记录表格 -->
<div class="vital-signs-table">
<!-- 护理记录详细信息表格 -->
<el-table :data="state.formData.vitalSigns" border style="width: 100%">
<!-- 记录日期列 -->
<el-table-column label="日期" width="100">
<template #default="scope">
<el-date-picker
@@ -77,7 +73,6 @@
></el-date-picker>
</template>
</el-table-column>
<!-- 记录时间列 -->
<el-table-column label="时间" width="100">
<template #default="scope">
<el-time-picker
@@ -89,9 +84,7 @@
></el-time-picker>
</template>
</el-table-column>
<!-- 基本信息列组 -->
<el-table-column label="基本信息">
<!-- 意识状态 -->
<el-table-column label="意识" width="80">
<template #default="scope">
<el-select v-model="scope.row.consciousness" placeholder="选择">
@@ -101,46 +94,38 @@
</el-select>
</template>
</el-table-column>
<!-- 体温测量值 -->
<el-table-column label="体温℃" width="80">
<template #default="scope">
<el-input v-model="scope.row.temperature" placeholder="体温"></el-input>
</template>
</el-table-column>
<!-- 心率测量值 -->
<el-table-column label="心率次/分" width="100">
<template #default="scope">
<el-input v-model="scope.row.heartRate" placeholder="心率"></el-input>
</template>
</el-table-column>
<!-- 脉搏测量值 -->
<el-table-column label="脉搏次/分" width="100">
<el-table-column label="脉搏次/分" width="100">
<template #default="scope">
<el-input v-model="scope.row.heartRate" placeholder="心率"></el-input>
</template>
</el-table-column>
<!-- 呼吸频率 -->
<el-table-column label="呼吸次/分" width="100">
<template #default="scope">
<el-input v-model="scope.row.respiratoryRate" placeholder="呼吸"></el-input>
</template>
</el-table-column>
<!-- 血压测量值 -->
<el-table-column label="血压mmHg" width="120">
<template #default="scope">
<el-input v-model="scope.row.bloodPressure" placeholder="血压"></el-input>
</template>
</el-table-column>
<!-- 血氧饱和度 -->
<el-table-column label="血氧饱和度" width="120">
<el-table-column label="血氧饱和度" width="120">
<template #default="scope">
<el-input v-model="scope.row.bloodPressure" placeholder="血压"></el-input>
</template>
</el-table-column>
</el-table-column>
<!-- 氧疗相关信息 -->
<el-table-column label="氧疗L/min" width="200">
<!-- 氧疗方式 -->
<el-table-column label="方式" >
<template #default="scope">
<el-select v-model="scope.row.intake" placeholder="选择">
@@ -150,16 +135,13 @@
</el-select>
</template>
</el-table-column>
<!-- 氧流量 -->
<el-table-column label="流量" width="80">
<template #default="scope">
<el-input v-model="scope.row.flowRate" placeholder="流量"></el-input>
</template>
</el-table-column>
</el-table-column>
<!-- 入量记录 -->
<el-table-column label="入量" width="200">
<!-- 入量名称 -->
<el-table-column label="入量" width="200">
<el-table-column label="名称" >
<template #default="scope">
<el-select v-model="scope.row.intake" placeholder="选择">
@@ -169,22 +151,18 @@
</el-select>
</template>
</el-table-column>
<!-- 入量毫升数 -->
<el-table-column label="ml" width="80">
<template #default="scope">
<el-input v-model="scope.row.flowRate" placeholder="流量"></el-input>
</template>
</el-table-column>
<!-- 入量途径 -->
<el-table-column label="途径" width="80">
<el-table-column label="途径" width="80">
<template #default="scope">
<el-input v-model="scope.row.flowRate" placeholder="流量"></el-input>
</template>
</el-table-column>
</el-table-column>
<!-- 出量记录 -->
<el-table-column label="出量" width="200">
<!-- 出量名称 -->
<el-table-column label="出量" width="200">
<el-table-column label="名称" >
<template #default="scope">
<el-select v-model="scope.row.intake" placeholder="选择">
@@ -194,38 +172,32 @@
</el-select>
</template>
</el-table-column>
<!-- 出量毫升数 -->
<el-table-column label="ml" width="80">
<template #default="scope">
<el-input v-model="scope.row.flowRate" placeholder="流量"></el-input>
</template>
</el-table-column>
</el-table-column>
<!-- 皮肤情况记录 -->
<el-table-column label="皮肤情况" width="80">
<template #default="scope">
<el-input v-model="scope.row.flowRate" placeholder="流量"></el-input>
<el-table-column label="皮肤情况" width="80">
<template #default="scope">
<el-input v-model="scope.row.flowRate" placeholder="流量"></el-input>
</template>
</el-table-column>
<!-- 管路护理记录 -->
<el-table-column label="管路护理" width="80">
<template #default="scope">
<el-input v-model="scope.row.flowRate" placeholder="流量"></el-input>
</template>
</el-table-column>
<!-- 病情与措施记录 -->
<el-table-column label="病情与措施" width="80">
<template #default="scope">
<el-input v-model="scope.row.flowRate" placeholder="流量"></el-input>
</template>
</el-table-column>
<!-- 护士签名 -->
</el-table-column>
<el-table-column label="管路护理" width="80">
<template #default="scope">
<el-input v-model="scope.row.flowRate" placeholder="流量"></el-input>
</template>
</el-table-column>
<el-table-column label="病情与措施" width="80">
<template #default="scope">
<el-input v-model="scope.row.flowRate" placeholder="流量"></el-input>
</template>
</el-table-column>
<el-table-column label="护士签名" width="100">
<template #default="scope">
<el-input v-model="scope.row.nurseSignature" placeholder="签名"></el-input>
</template>
</el-table-column>
<!-- 操作列提供删除功能 -->
<el-table-column label="操作" width="120" fixed="right">
<template #default="scope">
<el-button type="danger" size="small" @click="removeVitalSign(scope.$index)"
@@ -234,13 +206,12 @@
</template>
</el-table-column>
</el-table>
<!-- 添加新记录按钮 -->
<div class="add-row">
<el-button type="primary" @click="addVitalSign">添加记录</el-button>
</div>
</div>
<!-- 表单底部说明信息 -->
<!-- 表单底部按钮 -->
<div class="form-actions">
<div>
意识:①清醒②嗜睡③意识模糊④昏睡⑤谗妄⑥浅昏迷⑦中度昏迷⑧深昏迷⑨全麻未醒⑩镇静
@@ -260,21 +231,12 @@
</template>
<script setup>
// 定义组件选项
defineOptions({
name: 'NursingRecordSheet',
});
// 导入所需Vue功能
import { getCurrentInstance, onBeforeMount, onMounted, reactive, ref } from 'vue';
// 获取组件实例代理
import { getCurrentInstance, onBeforeMount, onMounted, reactive } from 'vue';
const { proxy } = getCurrentInstance();
// 定义组件发射事件
const emits = defineEmits([]);
// 定义组件接收的属性
const props = defineProps({
patientId: {
type: String,
@@ -282,28 +244,28 @@ const props = defineProps({
},
});
// 表单数据状态管理
// 表单数据
const state = ref({
formData: {
name: '', // 患者姓名
age: '', // 年龄
gender: '', // 性别
ward: '', // 病区
bedNumber: '', // 床号
hospitalNumber: '', // 住院号
diagnosis: '', // 入院诊断
vitalSigns: [ // 生命体征记录数组
name: '',
age: '',
gender: '',
ward: '',
bedNumber: '',
hospitalNumber: '',
diagnosis: '',
vitalSigns: [
{
date: new Date().toISOString().split('T')[0], // 默认当天日期
time: new Date().toTimeString().slice(0, 5), // 默认当前时间
consciousness: '清醒', // 意识状态默认值
temperature: '', // 体温
heartRate: '', // 心率
respiratoryRate: '', // 呼吸频率
bloodPressure: '', // 血压
intake: '', // 入量
flowRate: '', // 流量
nurseSignature: '', // 护士签名
date: new Date().toISOString().split('T')[0],
time: new Date().toTimeString().slice(0, 5),
consciousness: '清醒',
temperature: '',
heartRate: '',
respiratoryRate: '',
bloodPressure: '',
intake: '',
flowRate: '',
nurseSignature: '',
},
],
},
@@ -311,7 +273,7 @@ const state = ref({
});
// 添加生命体征记录方法
// 添加生命体征记录
const addVitalSign = () => {
state.value.formData.vitalSigns.push({
date: new Date().toISOString().split('T')[0],
@@ -328,16 +290,17 @@ const addVitalSign = () => {
});
};
// 删除指定索引的生命体征记录
// 删除生命体征记录
const removeVitalSign = (index) => {
state.value.formData.vitalSigns.splice(index, 1);
// 如果删除后没有记录,则自动添加一条空记录
if (state.value.formData.vitalSigns.length === 0) {
addVitalSign();
}
};
// 重置整个表单数据
// 重置表单
const resetForm = () => {
state.value.formData = {
name: '',
@@ -352,44 +315,34 @@ const resetForm = () => {
};
// 组件挂载前执行的逻辑
onBeforeMount(() => {
// 如果有传入患者ID可以在此处加载患者数据
// 如果有patientId可以在这里加载患者数据
if (props.patientId) {
// 加载患者数据的逻辑
}
});
// 组件挂载完成后执行的逻辑
onMounted(() => {
// 组件挂载后的逻辑
});
// 表单提交方法
const submit = () => {
// 触发submitOk事件传递表单数据给父组件
// ElMessage.success('提交成功');
emits('submitOk', state.formData);
};
// 设置表单数据方法(供父组件调用)
const setFormData = (data) => {
if (data) {
state.value.formData = data;
}
};
// 暴露组件内部属性和方法给父组件使用
defineExpose({ state, submit, setFormData });
</script>
<style lang="scss" scoped>
// 容器样式
.container {
padding: 20px;
background-color: #fff;
}
// 头部标题样式
.header {
text-align: center;
margin-bottom: 20px;
@@ -406,7 +359,6 @@ defineExpose({ state, submit, setFormData });
}
}
// 护理表单样式
.nursing-form {
.patient-info {
padding: 15px;
@@ -435,4 +387,4 @@ defineExpose({ state, submit, setFormData });
text-align: left;
}
}
</style>
</style>