# 出国登记审批权限配置总结
## 📋 配置概览
**菜单名称**: 出国登记审批
**权限标识规范**: 二段式(`模块:操作`)
**按钮数量**: 4个
**最后更新**: 2025-10-08 v1.1
---
## 🔐 完整权限清单
### 1️⃣ 菜单权限(1个)
| 菜单名称 | 权限标识 | 说明 |
|---------|---------|------|
| 出国登记审批 | `rs:registration:list` | 菜单访问权限 |
---
### 2️⃣ 按钮权限(4个)
| 序号 | 按钮名称 | 权限标识 | 说明 |
|-----|---------|---------|------|
| 1 | 查询/查看详情 | `rs:registration:query` | 查询列表、查看详情 |
| 2 | 审批通过 | `rs:registration:approve` | 审批通过操作 |
| 3 | 审批拒绝 | `rs:registration:approve` | 审批拒绝操作(复用approve) |
| 4 | 导出 | `rs:registration:export` | 导出Excel |
**总计**: 1个菜单 + 4个按钮 = **5条sys_menu记录**
---
## 💡 核心设计原则
### ✅ 二段式权限标识
- **格式**: `模块:操作`
- **示例**: `rs:registration:approve`
- **优势**: 简洁明了,易于管理
### ✅ 权限复用策略
**审批通过和拒绝使用同一个权限**:`rs:registration:approve`
**原因**:
1. 业务逻辑统一:有审批权限的人,自然可以通过或拒绝
2. 简化权限管理:不需要为每个操作单独配置
3. 降低配置复杂度
### ✅ 删除批量操作
**已删除**:
- ~~批量审批通过~~
- ~~批量审批拒绝~~
**原因**:
- 简化权限配置
- 保持菜单简洁
- 后续如需批量操作,可在业务层实现
---
## 📊 菜单结构
```
📁 人事管理 / 出国管理
📄 出国登记审批 (rs:registration:list)
🔘 查询 (rs:registration:query)
🔘 审批通过 (rs:registration:approve)
🔘 审批拒绝 (rs:registration:approve)
🔘 导出 (rs:registration:export)
```
---
## 🗂️ 数据库配置
### sys_menu 表记录
| menu_id | menu_name | parent_id | order_num | menu_type | perms | remark |
|---------|-----------|-----------|-----------|-----------|-------|--------|
| 2001 | 出国登记审批 | 父菜单ID | 1 | C | rs:registration:list | 菜单 |
| 2001001 | 出国登记审批查询 | 2001 | 1 | F | rs:registration:query | 查询按钮 |
| 2001002 | 审批通过 | 2001 | 2 | F | rs:registration:approve | 审批通过按钮 |
| 2001003 | 审批拒绝 | 2001 | 3 | F | rs:registration:approve | 审批拒绝按钮 |
| 2001004 | 导出 | 2001 | 4 | F | rs:registration:export | 导出按钮 |
**注意**:menu_id 实际使用雪花ID
---
## 🚀 快速部署指南
### Step 1:查询父菜单ID
```sql
SELECT menu_id, menu_name
FROM sys_menu
WHERE menu_name LIKE '%出国%' OR menu_name LIKE '%人事%';
```
### Step 2:修改SQL脚本
打开 `出国登记审批菜单权限配置-快速版.sql`
修改第14行:
```sql
SET @parent_menu_id = 2000; -- 改为实际的父菜单ID
```
### Step 3:执行SQL脚本
在数据库工具中执行快速版SQL脚本
### Step 4:分配角色权限
1. 登录系统 → 【系统管理】→【角色管理】
2. 编辑需要审批权限的角色(如:人事管理员)
3. 勾选"出国登记审批"菜单及其4个按钮
4. 保存
### Step 5:验证测试
- ✅ 菜单是否显示
- ✅ 按钮是否显示
- ✅ 审批功能是否正常
---
## 🎯 前端权限控制
### Vue组件示例
```vue
审批通过
审批拒绝
导出
```
---
## ⚙️ 后端权限控制
### Controller示例
```java
/**
* 查询出国登记审批列表
*/
@SaCheckPermission("rs:registration:query")
@GetMapping("/list")
public TableDataInfo list(RsOverseasRegistrationBo bo, PageQuery pageQuery) {
return iRsOverseasRegistrationService.queryPageList(bo, pageQuery);
}
/**
* 审批通过
*/
@SaCheckPermission("rs:registration:approve")
@Log(title = "出国登记审批", businessType = BusinessType.UPDATE)
@PutMapping("/approve/{registrationId}")
public R approve(@PathVariable Long registrationId, @RequestBody Map data) {
// 审批通过逻辑
return R.ok();
}
/**
* 审批拒绝
*/
@SaCheckPermission("rs:registration:approve")
@Log(title = "出国登记审批", businessType = BusinessType.UPDATE)
@PutMapping("/reject/{registrationId}")
public R reject(@PathVariable Long registrationId, @RequestBody Map data) {
// 审批拒绝逻辑
return R.ok();
}
/**
* 导出
*/
@SaCheckPermission("rs:registration:export")
@Log(title = "出国登记审批", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(RsOverseasRegistrationBo bo, HttpServletResponse response) {
// 导出逻辑
}
```
---
## 🔍 常见问题排查
### 问题1:菜单不显示
**可能原因**:
- 菜单权限未分配给角色
- 菜单状态为停用或隐藏
**解决方法**:
```sql
-- 检查菜单配置
SELECT menu_id, menu_name, perms, visible, status
FROM sys_menu
WHERE menu_name = '出国登记审批';
-- 检查角色权限
SELECT r.role_name, m.menu_name, m.perms
FROM sys_role r
INNER JOIN sys_role_menu rm ON r.role_id = rm.role_id
INNER JOIN sys_menu m ON rm.menu_id = m.menu_id
WHERE m.menu_name = '出国登记审批';
```
### 问题2:按钮不显示
**可能原因**:
- 按钮权限未分配
- 前端权限标识不匹配
**解决方法**:
1. 检查角色是否勾选了按钮权限
2. 检查 `v-hasPermi` 权限标识是否正确
3. 清除浏览器缓存重新登录
### 问题3:接口403无权限
**可能原因**:
- 后端权限注解不匹配
- Token过期
**解决方法**:
1. 检查 `@SaCheckPermission` 权限标识
2. 重新登录获取新Token
---
## 📚 相关文档
### SQL配置脚本
- ✅ **出国登记审批菜单权限配置-快速版.sql** ⭐ 推荐
- ✅ **出国登记审批菜单权限配置.sql** - 详细版
### 说明文档
- ✅ **出国登记审批权限标识对照表.md** - 详细权限说明
- ✅ **出国登记审批权限配置总结.md** - 本文档
### 前端代码
- `web/src/views/rs/overseas-registration/approval.vue` - 审批页面
- `web/src/api/rs/overseas-registration.ts` - API接口
### 后端代码
- 待开发
---
## ✅ 配置检查清单
### SQL配置
- [ ] 查询父菜单ID
- [ ] 修改SQL脚本中的 `@parent_menu_id`
- [ ] 执行SQL脚本
- [ ] 检查sys_menu表(应有5条记录)
### 角色权限
- [ ] 分配菜单权限给角色
- [ ] 勾选所有按钮权限
- [ ] 保存配置
### 前端验证
- [ ] 菜单是否显示
- [ ] 4个按钮是否都显示
- [ ] 权限标识是否正确
### 后端验证
- [ ] Controller权限注解是否正确
- [ ] 接口是否正常调用
- [ ] 无权限时是否返回403
---
## 📝 版本记录
| 版本 | 日期 | 说明 | 维护人 |
|-----|------|------|--------|
| v1.0 | 2025-10-08 | 创建权限配置,采用二段式权限标识 | AI Assistant |
| v1.1 | 2025-10-08 | 删除批量审批按钮,保留4个基础按钮 | AI Assistant |
---
## 🎯 配置要点
1. ✅ **权限标识统一为二段式**:`rs:registration:操作`
2. ✅ **审批操作复用权限**:通过和拒绝都使用 `approve`
3. ✅ **菜单结构简洁**:1个菜单 + 4个按钮
4. ✅ **前后端权限一致**:确保权限标识完全匹配
5. ✅ **删除批量操作**:简化权限配置
---
**🎉 配置完成后,出国登记审批菜单即可正常使用!**