feat(menu): 优化菜单路径唯一性校验并更新前端界面

- 在SysLoginController中添加optionMap数据返回
- 添加JSQLParser依赖支持MyBatis Plus功能
- 实现selectMenuByPathExcludeId方法用于排除当前菜单的路径唯一性校验
- 在SysMenuServiceImpl中添加日志记录并优化路径唯一性判断逻辑
- 在SysMenuMapper.xml中添加LIMIT 1限制并实现排除ID查询
- 在前端路由中注释患者管理相关路由配置
- 在用户store中添加optionMap配置项并优先从optionMap获取医院名称
- 重构检查项目设置页面的操作按钮样式为统一的圆形按钮设计
- 更新检查项目设置页面的导航栏样式和交互体验
- 优化门诊记录页面的搜索条件和表格展示功能
- 添加性别和状态筛选条件并改进数据加载逻辑
This commit is contained in:
2026-01-03 23:47:09 +08:00
parent 61f4020487
commit 0c35044231
54 changed files with 5871 additions and 510 deletions

View File

@@ -337,36 +337,46 @@
</el-table-column>
<el-table-column label="操作" width="150" align="center" fixed="right">
<template #default="{ row, $index }">
<el-button
v-if="!row.editing"
type="primary"
size="small"
icon="Edit"
circle
@click="handleEditRow(row)"
/>
<el-button
v-if="row.editing"
type="success"
size="small"
icon="Check"
circle
@click="handleConfirmRow(row)"
/>
<el-button
type="primary"
size="small"
icon="Plus"
circle
@click="handleAddRow"
/>
<el-button
type="danger"
size="small"
icon="Delete"
circle
@click="handleDeleteRow($index)"
/>
<div class="actions">
<el-button
v-if="!row.editing"
class="btn btn-edit"
size="small"
circle
@click="handleEditRow(row)"
title="编辑"
>
✏️
</el-button>
<el-button
v-if="row.editing"
class="btn btn-confirm"
size="small"
circle
@click="handleConfirmRow(row)"
title="保存"
>
</el-button>
<el-button
class="btn btn-add"
size="small"
circle
@click="handleAddRow"
title="添加"
>
+
</el-button>
<el-button
class="btn btn-delete"
size="small"
circle
@click="handleDeleteRow($index)"
title="删除"
>
</el-button>
</div>
</template>
</el-table-column>
</el-table>
@@ -1229,6 +1239,76 @@ async function handleSave() {
margin-top: 16px;
}
/* 统一的操作按钮样式 */
.actions {
display: flex;
justify-content: center;
gap: 6px;
position: relative;
z-index: 10;
}
.btn {
width: 30px;
height: 30px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
border: none;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
font-size: 14px;
font-weight: bold;
position: relative;
z-index: 10;
color: white;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.12);
}
.btn:hover {
transform: translateY(-2px) scale(1.1);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.18);
}
.btn:active {
transform: translateY(0) scale(0.95);
}
.btn-confirm {
background: linear-gradient(135deg, #52C41A 0%, #73d13d 100%);
}
.btn-confirm:hover {
background: linear-gradient(135deg, #389E0D 0%, #52C41A 100%);
}
.btn-edit {
background: linear-gradient(135deg, #1890FF 0%, #40a9ff 100%);
}
.btn-edit:hover {
background: linear-gradient(135deg, #096DD9 0%, #1890FF 100%);
}
.btn-add {
background: linear-gradient(135deg, #1890FF 0%, #40a9ff 100%);
}
.btn-add:hover {
background: linear-gradient(135deg, #096DD9 0%, #1890FF 100%);
}
.btn-delete {
background: linear-gradient(135deg, #FF4D4F 0%, #ff7875 100%);
z-index: 20;
pointer-events: auto;
}
.btn-delete:hover {
background: linear-gradient(135deg, #CF1322 0%, #FF4D4F 100%);
}
/* 响应式设计 */
@media (max-width: 768px) {
.package-settings {
@@ -1249,4 +1329,3 @@ async function handleSave() {
}
}
</style>