角色和权限

This commit is contained in:
wu.jifen
2025-04-23 21:00:10 +08:00
parent 37ad5091a5
commit 0a52690c5b
2 changed files with 125 additions and 24 deletions

View File

@@ -50,3 +50,10 @@ export function getRoleList(data) {
data
})
}
// 获取角色菜单列表
export function getRoleMenu(roleId) {
return request({
url: getUrl('/sysRoleEx/getRoleMenu?roleId=' + roleId),
method: 'get'
})
}

View File

@@ -27,26 +27,46 @@
</el-form>
</div>
<r-table :columns="tableConfig.columns" :data="tableData" :deletion="false" :total="tableConfig.total"
@currentChange="handleCurrentChange" @sizeChange="handleSizeChange" :currentPage="tableConfig.currentPage"
:pageSize="tableConfig.pageSize" />
<r-table
:columns="tableConfig.columns"
:data="tableData"
:deletion="false"
:total="tableConfig.total"
@currentChange="handleCurrentChange"
@sizeChange="handleSizeChange"
:currentPage="tableConfig.currentPage"
:pageSize="tableConfig.pageSize"
/>
</el-card>
<!-- 角色新增弹窗 -->
<role-dialog :visible.sync="dialogVisible" :title="dialogTitle" :is-edit="isEdit" :is-view="isView"
:role-data="currentRoleData" @submit="handleSubmit" />
<role-dialog :visible.sync="dialogVisible" :title="dialogTitle" :is-edit="isEdit" :is-view="isView" :role-data="currentRoleData" @submit="handleSubmit" />
<!-- 角色权限 抽屉 -->
<el-drawer :visible.sync="permissionDrawer.visible" :title="permissionDrawer.title" size="60%">
<el-tree :data="data" show-checkbox node-key="id" :default-expanded-keys="[2, 3]" :default-checked-keys="[5]"
:props="defaultProps">
<el-tree
:data="menuTree"
show-checkbox
node-key="id"
default-expand-all
:props="defaultProps"
:default-checked-keys="defaultCheckedKeys"
@check="handleCheckChange"
>
</el-tree>
<el-row>
<el-col :span="6">
<el-button type="primary" size="medium" @click="handleOnSave">确定</el-button>
<el-button type="primary" plain size="medium" @click="handleOnClose">取消</el-button>
</el-col>
</el-row>
</el-drawer>
</div>
</template>
<script>
import { getRolePage, deleteRole, queryRoleDetail, getMenuTree } from '@/api/system/role'
import { getRolePage, deleteRole, queryRoleDetail, updateRole, getRoleMenu } from '@/api/system/role'
import { getMenuTree } from '@/api/system/menu'
import RoleDialog from '@/views/system/role/components/RoleDialog'
export default {
@@ -69,12 +89,23 @@ export default {
currentRoleData: {},
total: 0,
roleList: [],
menuTree: [],
defaultProps: {
children: 'children',
label: 'menuName'
},
defaultCheckedKeys: [],
checkedKeys: [], // 存储当前选中的节点key
queryParams: {
pageNum: 1,
pageSize: 10,
roleCodeLike: '',
roleNameLike: ''
},
roleMenuForm: {
id: '',
sysMenuRoleDTOs: [{ menuId: '' }]
},
// 表格配置项
tableConfig: {
total: 0,
@@ -89,31 +120,28 @@ export default {
isRedraw: true,
render: (h, params) => {
return h('div', [
h(
'el-button',
{
props: { type: 'primary', size: 'mini', icon: 'el-icon-edit-outline', title: '编辑' },
class: "normal-button",
on: { click: () => this.handleEdit(params.row) }
},
),
h('el-button', {
props: { type: 'primary', size: 'mini', icon: 'el-icon-edit-outline', title: '编辑' },
class: 'normal-button',
on: { click: () => this.handleEdit(params.row) }
}),
h(
'el-button',
{
props: { type: 'danger', size: 'mini', icon: 'el-icon-delete', title: '删除' },
class: "normal-button",
class: 'normal-button',
on: { click: () => this.handleDelete(params.row) }
},
"删除"
'删除'
),
h(
'el-button',
{
props: { type: 'primary', size: 'mini', icon: 'el-icon-tickets', title: '设置权限' },
class: "normal-button",
class: 'normal-button',
on: { click: () => this.handlePermissionVisible(params.row) }
},
"设置权限"
'设置权限'
)
])
}
@@ -128,11 +156,46 @@ export default {
},
methods: {
async handlePermissionVisible(row) {
this.getRoleMenuData(row.id)
this.roleMenuForm.id = row.id
this.permissionDrawer.visible = true
// const response = await getMenuTree()
// console.log(response);
getMenuTree({})
.then(response => {
if (response.code === '0') {
this.menuTree = response.content.content
} else {
this.$message.error(response.msg || '获取菜单列表失败')
}
})
.catch(error => {
this.$message.error('获取菜单列表出错', error)
})
.finally(() => {
this.loading = false
})
},
getRoleMenuData(roleId) {
getRoleMenu(roleId)
.then(response => {
if (response.code === '0') {
const nodes = response.content.content
nodes.forEach(node => {
this.defaultCheckedKeys.push(node.id)
if (node.children !== null) {
node.children.forEach(v => {
this.defaultCheckedKeys.push(v.id)
})
}
})
console.log(this.defaultCheckedKeys, 'getRoleMenu')
} else {
this.$message.error(response.msg || '获取角色菜单失败')
}
})
.catch(error => {
this.$message.error('获取角色菜单出错', error)
})
},
// 获取角色列表
getRoleList() {
@@ -188,7 +251,6 @@ export default {
}
})
.catch(error => {
console.error('获取角色详情出错:', error)
this.$message.error('获取角色详情出错')
})
.finally(() => {
@@ -237,6 +299,38 @@ export default {
.catch(() => {
this.$message.info('已取消删除')
})
},
// 关闭权限抽屉
handleOnClose() {
this.permissionDrawer.visible = false
},
// 选中状态变化时的处理
handleCheckChange(checkedNodes, object) {
this.checkedKeys = object.checkedKeys
},
// 修改权限
handleOnSave() {
this.checkedKeys.forEach(menuId => {
if (menuId !== '' && menuId !== null) {
this.roleMenuForm.sysMenuRoleDTOs.push({ menuId: menuId })
}
})
console.log(this.roleMenuForm, '角色权限表单')
updateRole(this.roleMenuForm)
.then(response => {
if (response.code === '0') {
this.$message.success(this.isEdit ? '修改成功' : '添加成功')
delete this.roleMenuForm.id
delete this.roleMenuForm.sysMenuRoleDTOs
} else {
this.$message.error(response.msg || (this.isEdit ? '修改失败' : '添加失败'))
delete this.roleMenuForm.id
delete this.roleMenuForm.sysMenuRoleDTOs
}
})
.finally(() => {
this.permissionDrawer.visible = false
})
}
}
}