feat(menu): 添加菜单完整路径功能和待写病历管理

- 在SysMenu实体类中新增fullPath字段用于存储完整路径
- 实现buildMenuTreeWithFullPath方法构建带完整路径的菜单树
- 添加getMenuFullPath和generateFullPath服务方法获取和生成完整路径
- 在菜单控制器中增加获取完整路径的API接口
- 前端菜单组件显示完整路径并在新增修改时使用后端返回的路径
- 添加待写病历管理功能包括获取待写病历列表、数量统计和检查接口
- 在医生工作站界面集成待写病历选项卡和相关处理逻辑
- 更新首页统计数据接口路径并添加待写病历数量获取功能
- 重构首页快捷功能配置为动态从数据库获取用户自定义配置
- 优化菜单列表查询使用异步方式处理带完整路径的菜单数据
- 添加菜单完整路径的数据库映射配置和前端API调用支持
This commit is contained in:
2026-02-01 14:50:22 +08:00
parent 29ecfd90f2
commit 0a08088ada
14 changed files with 1240 additions and 163 deletions

View File

@@ -74,6 +74,12 @@
<el-table-column prop="orderNum" label="排序" width="60"></el-table-column>
<el-table-column prop="perms" label="权限标识" :show-overflow-tooltip="true"></el-table-column>
<el-table-column prop="path" label="路由地址" :show-overflow-tooltip="true"></el-table-column>
<el-table-column prop="fullPath" label="完整路径" :show-overflow-tooltip="true">
<template #default="scope">
<span v-if="scope.row.fullPath">{{ scope.row.fullPath }}</span>
<span v-else-if="scope.row.path">{{ scope.row.path }}</span>
</template>
</el-table-column>
<el-table-column prop="component" label="组件路径" :show-overflow-tooltip="true"></el-table-column>
<el-table-column prop="status" label="状态" width="80">
<template #default="scope">
@@ -186,6 +192,11 @@
<el-input v-model="form.path" placeholder="请输入路由地址" />
</el-form-item>
</el-col>
<el-col :span="24" v-if="form.menuType != 'F' && form.fullPath">
<el-form-item label="完整路径">
<el-input v-model="form.fullPath" readonly placeholder="完整路径" />
</el-form-item>
</el-col>
<el-col :span="12" v-if="form.menuType == 'C'">
<el-form-item prop="component">
<template #label>
@@ -325,12 +336,17 @@ const data = reactive({
const { queryParams, form, rules } = toRefs(data);
/** 查询菜单列表 */
function getList() {
async function getList() {
loading.value = true;
listMenu(queryParams.value).then(response => {
menuList.value = proxy.handleTree(response.data, "menuId");
try {
const response = await listMenu(queryParams.value);
// 后端已经返回了带完整路径的菜单树,直接使用即可
menuList.value = response.data;
} catch (error) {
console.error('获取菜单列表失败:', error);
} finally {
loading.value = false;
});
}
}
/** 查询菜单下拉树结构 */
function getTreeselect() {
@@ -380,13 +396,16 @@ function resetQuery() {
handleQuery();
}
/** 新增按钮操作 */
function handleAdd(row) {
async function handleAdd(row) {
reset();
getTreeselect();
await getTreeselect();
if (row != null && row.menuId) {
form.value.parentId = row.menuId;
// 使用后端返回的完整路径
form.value.parentFullPath = row.fullPath || row.path;
} else {
form.value.parentId = 0;
form.value.parentFullPath = '';
}
open.value = true;
title.value = "添加菜单";
@@ -403,11 +422,16 @@ function toggleExpandAll() {
async function handleUpdate(row) {
reset();
await getTreeselect();
getMenu(row.menuId).then(response => {
try {
const response = await getMenu(row.menuId);
form.value = response.data;
// 使用后端返回的完整路径
form.value.fullPath = row.fullPath || row.path;
open.value = true;
title.value = "修改菜单";
});
} catch (error) {
console.error('获取菜单信息失败:', error);
}
}
/** 提交按钮 */
function submitForm() {