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

@@ -1,6 +1,8 @@
<template>
<!-- 跌倒/坠床评估护理记录单主容器 -->
<div>
<div class="business">
<!-- 已有记录展示表格 -->
<el-table
:data="tableDataSource"
border
@@ -8,10 +10,15 @@
fit
:header-cell-style="{ background: '#f2f2f2', color: 'black' }"
>
<!-- 记录时间列 -->
<el-table-column prop="content.recordTime" label="记录时间" />
<!-- 评估分数列 -->
<el-table-column prop="content.totalScore" label="评估分数" />
<!-- 护理措施列 -->
<el-table-column prop="content.patientCareSessionsTableList" label="护理措施" />
<!-- 责任护士列 -->
<el-table-column prop="content.nurseSignature" label="责任护士" />
<!-- 操作列编辑和删除按钮 -->
<el-table-column label="操作" align="center">
<template #default="scope">
<el-button
@@ -36,9 +43,12 @@
</el-table-column>
</el-table>
<!-- 跌倒/坠床评估护理记录单表单区域 -->
<div name="跌倒/坠床评估护理记录单" class="changeMajor" style="width: 99.9%">
<div>
<!-- 表单主体 -->
<el-form ref="formRef" :model="form" style="width: 99.9%">
<!-- 标题行 -->
<el-form-item style="text-align: center">
<div
style="
@@ -54,10 +64,12 @@
</div>
</el-form-item>
<!-- 日期时间选择器 -->
<el-form-item label="日期:" class="changeMajorFromItem" style="width: 100%">
<el-row :span="20">
<el-col :span="8" style="padding-left: 0px !important">
<el-form-item>
<!-- 日期时间选择器 -->
<el-date-picker
v-model="form.ZKDATE"
type="datetime"
@@ -67,6 +79,7 @@
style="width: 800px"
:disabled="admissionDataForm !== undefined"
/>
<!-- 时间选择器被注释掉 -->
<!-- <span style="margin-left: 5px">时间</span>
<el-time-picker
v-model="form.ZKTIME"
@@ -77,6 +90,7 @@
/> -->
</el-form-item>
</el-col>
<!-- 新增/保存按钮 -->
<el-col :span="5">
<el-button
v-if="!updateFlag"
@@ -100,6 +114,7 @@
</el-row>
</el-form-item>
<!-- 危险因素评估表格 -->
<el-form-item style="padding-top: 10px; margin: 0px !important">
<el-table
:data="dangerData"
@@ -107,6 +122,7 @@
:span-method="handleSpan"
style="text-align: center"
>
<!-- 动态生成表格列 -->
<el-table-column
v-for="column in dangerColumns"
:key="column.key"
@@ -115,6 +131,7 @@
:label="column.title"
align="center"
/>
<!-- 选择列复选框 -->
<el-table-column prop="id" label="选择" width="80" align="center">
<template #default="{ row }">
<el-checkbox v-model="row.checked" @change="handleDangerChange(row)" />
@@ -123,6 +140,7 @@
</el-table>
</el-form-item>
<!-- 总分显示 -->
<el-form-item
style="text-align: center; margin-bottom: 0px; padding: 0px"
class="changeMajorFromItem"
@@ -135,6 +153,7 @@
</el-row>
</el-form-item>
<!-- 护理措施表格 -->
<el-form-item style="padding-top: 10px">
<el-table
:data="nursingData"
@@ -142,6 +161,7 @@
:span-method="arraySpanMethod"
style="width: 100%"
>
<!-- 动态生成表格列 -->
<el-table-column
v-for="column in nursingColumns"
:key="column.key"
@@ -150,6 +170,7 @@
:label="column.title"
align="center"
/>
<!-- 选择列复选框 -->
<el-table-column prop="id" label="选择" width="80" align="center">
<template #default="{ row }">
<el-checkbox v-model="row.checked" @change="handleNursingChange(row)" />
@@ -158,6 +179,7 @@
</el-table>
</el-form-item>
<!-- 护士签字输入框 -->
<el-form-item
style="text-align: center; margin-bottom: 0px; padding: 0px"
class="changeMajorFromItem"
@@ -177,6 +199,7 @@
</el-row>
</el-form-item>
<!-- 备注信息 -->
<el-form-item>
<el-row :span="20">
<el-col :span="5">
@@ -197,22 +220,24 @@
</template>
<script setup>
// 组件选项定义
defineOptions({
name: 'FallBedFallAssessment',
name: '跌倒/坠床评估护理记录单',
});
// 导入所需模块
import { ref, reactive, computed, onMounted } from 'vue';
import { ElMessage } from 'element-plus';
// import { webapp_ws_ajax_run, urlAddRandomNo } from '@/utils/grwebapp';
// import { useRoute, useRouter } from 'vue-router';
// 响应式数据
// 使用路由相关功能
const route = useRoute();
const router = useRouter();
// 定义引用变量
const queryRef = ref();
const formRef = ref();
// 基本数据变量
const wardCode = ref('');
const patientId = ref('');
const visitId = ref('');
@@ -226,17 +251,18 @@ const totalScore = ref(0);
const lastSubmit = ref('');
const admissionDataForm = ref(route.params.admissionData);
// 表单数据模型
const form = reactive({
ZKDATE: '',
ZKTIME: '',
recordTime: '',
totalScore: 0,
bedFallRiskAssessmentList: [],
nurseSignature: '',
patientCareSessionsCheckedList: [],
ZKDATE: '', // 日期
ZKTIME: '', // 时间
recordTime: '', // 记录时间
totalScore: 0, // 总分
bedFallRiskAssessmentList: [], // 跌倒风险评估列表
nurseSignature: '', // 护士签名
patientCareSessionsCheckedList: [], // 护理措施选中列表
});
// 危险因素表格列
// 危险因素表格列配置
const dangerColumns = [
{
key: 'content',
@@ -301,7 +327,7 @@ const dangerData = ref([
{ id: '27', evalContent: '麻醉止痛剂', score: 2, checked: false },
]);
// 护理措施表格列
// 护理措施表格列配置
const nursingColumns = [
{
key: 'content',
@@ -338,21 +364,21 @@ const instructions = [
'3.评分≥5高度风险每周至少评估一次需采取适宜的预防措施同时填写《预防患者跌倒/坠床知情告知书》',
];
// 计算属性
// 计算属性:计算选中的危险因素总分
const calculate = computed(() => {
return dangerData.value
.filter((option) => option.checked)
.reduce((total, option) => total + option.score, 0);
});
// 计算属性:判断表单是否为空
const isFormEmpty = computed(() => {
return (
form.ZKDATE === '' && form.ZKTIME === '' && form.recordTime === '' && form.nurseSignature === ''
);
});
// 方法 - 不再需要handleData方法通过表单输入和按钮加载数据
// 危险因素选择变化处理函数
const handleDangerChange = (row) => {
totalScore.value = calculate.value;
form.bedFallRiskAssessmentList = dangerData.value
@@ -360,12 +386,14 @@ const handleDangerChange = (row) => {
.map((item) => item.id);
};
// 护理措施选择变化处理函数
const handleNursingChange = (row) => {
form.patientCareSessionsCheckedList = nursingData.value
.filter((item) => item.checked)
.map((item) => item.id);
};
// 初始化函数:加载模拟数据
const init = async () => {
// 使用模拟数据不再调用后端API
try {
@@ -427,6 +455,7 @@ const init = async () => {
}
};
// 危险因素表格合并单元格处理函数
const handleSpan = ({ row, column, rowIndex, columnIndex }) => {
if (columnIndex === 0) {
if (rowIndex === 0) {
@@ -473,6 +502,7 @@ const handleSpan = ({ row, column, rowIndex, columnIndex }) => {
return [1, 1];
};
// 护理措施表格合并单元格处理函数
const arraySpanMethod = ({ row, column, rowIndex, columnIndex }) => {
// 护理措施
if (columnIndex === 0) {
@@ -489,8 +519,9 @@ const arraySpanMethod = ({ row, column, rowIndex, columnIndex }) => {
return [1, 1];
};
// 提交表单处理函数
const onSubmit = async () => {
// 检查上次提交时间
// 检查上次提交时间,防止重复提交
if (lastSubmit.value && new Date() - lastSubmit.value < 2000) {
ElMessage.error('禁止重复提交!');
return;
@@ -562,6 +593,7 @@ const onSubmit = async () => {
}
};
// 编辑记录处理函数
const handleUpdate = (row) => {
const loginUser = JSON.parse(window.localStorage.getItem('loginUser'));
@@ -591,6 +623,7 @@ const handleUpdate = (row) => {
}
};
// 重置表单函数
const reset = () => {
Object.assign(form, {
ZKDATE: '',
@@ -623,6 +656,7 @@ const reset = () => {
}
};
// 删除记录处理函数
const handleDelete = (row) => {
const loginUser = JSON.parse(window.localStorage.getItem('loginUser'));
@@ -646,6 +680,7 @@ const handleDelete = (row) => {
}
};
// 打印预览函数(暂未实现)
const dc_ajax_preview = () => {
var args = {
report: urlAddRandomNo('./grf/NurseRecord_Pressure_208.grf'),
@@ -656,6 +691,7 @@ const dc_ajax_preview = () => {
webapp_ws_ajax_run(args);
};
// 数据转换函数,用于报表打印
const transformData = () => {
const jsonDate = [...tableDataSource.value];
@@ -802,7 +838,7 @@ const transformData = () => {
return transformedData;
};
// 生命周期钩子
// 组件挂载后执行的生命周期函数
onMounted(() => {
try {
// 安全获取用户信息
@@ -831,6 +867,7 @@ onMounted(() => {
</script>
<style scoped>
/* 页面样式定义 */
.business {
background: white;
border-radius: 5px;
@@ -894,4 +931,10 @@ onMounted(() => {
margin-bottom: 0px !important;
}
}
</style>
/* 备注信息列表样式 */
.instructions-list {
list-style-type: none;
padding-left: 0;
}
</style>