gameapi-client/src/views/system/user/role/README.md

222 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 权限树状表格组件使用说明
## 概述
这个权限树状表格组件实现了类似表格的树形权限管理界面,左侧显示树形菜单结构,右侧显示对应的权限复选框,完全符合您截图中的设计需求。
## 文件结构
```
src/views/system/user/role/
├── render.vue # 核心权限树状表格组件
├── permission-dialog.vue # 权限选择对话框组件
├── permission-example.vue # 完整使用示例
└── README.md # 使用说明
```
## 核心功能
### 1. 树状表格展示
- 表格样式的树形结构展示
- 支持多级树形结构
- 可展开/收起节点
- 支持节点复选框选择(含半选状态)
### 2. 权限复选框管理
- 每个节点可以配置独立的权限项
- 权限项以复选框形式展示在右侧
- 支持权限项的选中状态管理
- 支持热门权限标记
### 3. 表格式布局
- 左侧:菜单名称列(支持树形缩进)
- 右侧:权限操作列(权限复选框)
- 表格头部标题
- 行分隔线和悬停效果
## 数据结构
```javascript
const treeData = [
{
id: 1, // 节点唯一标识
label: '开站管理', // 节点显示名称
children: [ // 子节点(可选)
{
id: 11,
label: '待审核',
perms: [] // 权限列表(可选)
},
{
id: 12,
label: '待付款',
perms: [ // 权限项配置
{
key: 'pay',
label: '付款',
checked: false
}
]
},
{
id: 15,
label: '已上线',
perms: [
{
key: 'add_brand',
label: '新增子品牌',
checked: false,
isHot: true // 热门权限标记
},
{
key: 'edit',
label: '修改',
checked: false
}
]
}
]
}
]
```
## 使用方法
### 1. 基础使用
```vue
<template>
<PermissionTreeTable ref="treeTableRef" />
</template>
<script setup>
import { ref } from 'vue'
import PermissionTreeTable from './render.vue'
const treeTableRef = ref()
// 获取选中的数据
const getSelectedData = () => {
if (treeTableRef.value) {
return treeTableRef.value.getCheckedData()
}
}
</script>
```
### 2. 对话框形式使用
```vue
<template>
<PermissionDialog
v-model="dialogVisible"
:role-id="currentRoleId"
@confirm="handlePermissionConfirm"
/>
</template>
<script setup>
import PermissionDialog from './permission-dialog.vue'
const dialogVisible = ref(false)
const currentRoleId = ref(1)
const handlePermissionConfirm = (data) => {
console.log('选中的权限:', data)
}
</script>
```
## 样式说明
### 1. 表格式布局
- 使用 CSS Grid 布局实现表格效果
- 左列:菜单名称(固定宽度 300px
- 右列:权限操作(自适应宽度)
- 表格头部和内容分离
### 2. 主要样式类名
- `.permission-tree-table`: 组件容器
- `.table-header`: 表格头部
- `.table-content`: 表格内容区域
- `.table-row`: 每行的容器
- `.row-left`: 左侧菜单名称区域
- `.row-right`: 右侧权限操作区域
- `.expand-icon`: 展开/收起图标
- `.hot-tag`: 热门权限标记
### 3. 核心样式
```css
.permission-tree-table {
border: 1px solid #ebeef5;
border-radius: 4px;
overflow: hidden;
}
.table-header {
display: grid;
grid-template-columns: 300px 1fr;
background: #f5f7fa;
border-bottom: 1px solid #ebeef5;
}
.table-row {
display: grid;
grid-template-columns: 300px 1fr;
border-bottom: 1px solid #ebeef5;
}
.table-row:hover {
background-color: #f5f7fa;
}
```
## API 说明
### Props
- `modelValue`: 对话框显示状态(仅对话框组件)
- `roleId`: 角色ID可选
### Events
- `confirm`: 确认选择权限时触发,返回选中的权限数据
### Methods
- `getCheckedData()`: 获取当前选中的数据
- 返回格式:
```javascript
{
checkedNodes: [ // 选中的节点
{ id: 1, label: '开站管理' }
],
checkedPermissions: { // 选中的权限
"12": [
{ key: 'pay', label: '付款' }
]
}
}
```
## 扩展功能
### 1. 权限标记
可以为特定权限添加标记(如"热门"标记):
```javascript
const isHot = perm === '新增子品牌'
// 在渲染时添加标记
h('span', { class: 'hot-tag' }, '热')
```
### 2. 权限分组
可以通过树形结构对权限进行分组管理。
### 3. 权限搜索
可以添加搜索功能来快速定位特定权限。
## 注意事项
1. 确保每个节点的 `id` 唯一
2. `perms` 数组为空时不会显示权限复选框
3. 权限状态通过 `permissionState` 响应式对象管理
4. 使用 `:deep()` 选择器来修改 Element Plus 组件的默认样式