feat(menu): 优化菜单服务性能并新增医生排班功能
- 添加菜单缓存注解以提升查询性能 - 实现菜单完整路径计算优化,解决 N+1 查询问题 - 新增 selectAllMenus 方法供路径计算使用 - 添加今日医生排班查询功能 - 重构前端图标显示逻辑,使用 SVG 图标替代 Element 图标 - 添加前端菜单数据本地缓存机制 - 更新菜单管理界面的表单组件绑定方式 - 新增预约管理、门诊管理和药房管理路由配置
This commit is contained in:
@@ -124,9 +124,9 @@
|
||||
<el-col :span="24">
|
||||
<el-form-item label="菜单类型" prop="menuType">
|
||||
<el-radio-group v-model="form.menuType">
|
||||
<el-radio label="M">目录</el-radio>
|
||||
<el-radio label="C">菜单</el-radio>
|
||||
<el-radio label="F">按钮</el-radio>
|
||||
<el-radio value="M">目录</el-radio>
|
||||
<el-radio value="C">菜单</el-radio>
|
||||
<el-radio value="F">按钮</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@@ -174,8 +174,8 @@
|
||||
</span>
|
||||
</template>
|
||||
<el-radio-group v-model="form.isFrame">
|
||||
<el-radio label="0">是</el-radio>
|
||||
<el-radio label="1">否</el-radio>
|
||||
<el-radio value="0">是</el-radio>
|
||||
<el-radio value="1">否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@@ -247,8 +247,8 @@
|
||||
</span>
|
||||
</template>
|
||||
<el-radio-group v-model="form.isCache">
|
||||
<el-radio label="0">缓存</el-radio>
|
||||
<el-radio label="1">不缓存</el-radio>
|
||||
<el-radio value="0">缓存</el-radio>
|
||||
<el-radio value="1">不缓存</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@@ -266,7 +266,7 @@
|
||||
<el-radio
|
||||
v-for="dict in sys_show_hide"
|
||||
:key="dict.value"
|
||||
:label="dict.value"
|
||||
:value="dict.value"
|
||||
>{{ dict.label }}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
@@ -285,7 +285,7 @@
|
||||
<el-radio
|
||||
v-for="dict in sys_normal_disable"
|
||||
:key="dict.value"
|
||||
:label="dict.value"
|
||||
:value="dict.value"
|
||||
>{{ dict.label }}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
@@ -303,7 +303,7 @@
|
||||
</template>
|
||||
|
||||
<script setup name="Menu">
|
||||
import {addMenu, delMenu, getMenu, listMenu, updateMenu} from "@/api/system/menu";
|
||||
import {addMenu, delMenu, getMenu, listMenu, updateMenu, treeselect} from "@/api/system/menu";
|
||||
import SvgIcon from "@/components/SvgIcon";
|
||||
import IconSelect from "@/components/IconSelect";
|
||||
|
||||
@@ -351,10 +351,28 @@ async function getList() {
|
||||
/** 查询菜单下拉树结构 */
|
||||
function getTreeselect() {
|
||||
menuOptions.value = [];
|
||||
listMenu().then(response => {
|
||||
const menu = { menuId: 0, menuName: "主类目", children: [] };
|
||||
menu.children = proxy.handleTree(response.data, "menuId");
|
||||
menuOptions.value.push(menu);
|
||||
// 使用专门的treeselect API,它返回预构建的树形结构
|
||||
treeselect().then(response => {
|
||||
// TreeSelect对象使用id、label、children字段,但el-tree-select组件期望menuId、menuName、children字段
|
||||
// 需要将TreeSelect对象转换为el-tree-select组件期望的格式
|
||||
const convertTreeSelectToMenuFormat = (treeSelectList) => {
|
||||
return treeSelectList.map(item => ({
|
||||
menuId: item.id,
|
||||
menuName: item.label,
|
||||
value: item.id,
|
||||
label: item.label,
|
||||
children: item.children ? convertTreeSelectToMenuFormat(item.children) : []
|
||||
}));
|
||||
};
|
||||
|
||||
const rootNode = {
|
||||
menuId: 0,
|
||||
menuName: "主类目",
|
||||
value: 0,
|
||||
label: "主类目",
|
||||
children: convertTreeSelectToMenuFormat(response.data)
|
||||
};
|
||||
menuOptions.value.push(rootNode);
|
||||
});
|
||||
}
|
||||
/** 取消按钮 */
|
||||
@@ -426,7 +444,7 @@ async function handleUpdate(row) {
|
||||
const response = await getMenu(row.menuId);
|
||||
form.value = response.data;
|
||||
// 使用后端返回的完整路径
|
||||
form.value.fullPath = row.fullPath || row.path;
|
||||
form.value.fullPath = response.data.fullPath || response.data.path;
|
||||
open.value = true;
|
||||
title.value = "修改菜单";
|
||||
} catch (error) {
|
||||
|
||||
Reference in New Issue
Block a user