feat:添加角色用户管理,修复一堆相关问题

This commit is contained in:
李大饼
2024-10-12 17:16:48 +08:00
parent 6f691e45d8
commit b6b54164a8
5 changed files with 159 additions and 160 deletions

View File

@@ -97,13 +97,13 @@ namespace Yi.Framework.Rbac.Application.Services.System
public override async Task<RoleGetOutputDto> UpdateAsync(Guid id, RoleUpdateInputVo input) public override async Task<RoleGetOutputDto> UpdateAsync(Guid id, RoleUpdateInputVo input)
{ {
var entity = await _repository.GetByIdAsync(id); var entity = await _repository.GetByIdAsync(id);
var isExist =await _repository._DbQueryable.Where(x=>x.Id!=entity.Id).AnyAsync(x=>x.RoleCode==input.RoleCode||x.RoleName==input.RoleName); var isExist = await _repository._DbQueryable.Where(x => x.Id != entity.Id).AnyAsync(x => x.RoleCode == input.RoleCode || x.RoleName == input.RoleName);
if (isExist) if (isExist)
{ {
throw new UserFriendlyException(RoleConst.Exist); throw new UserFriendlyException(RoleConst.Exist);
} }
await MapToEntityAsync(input, entity); await MapToEntityAsync(input, entity);
await _repository.UpdateAsync(entity); await _repository.UpdateAsync(entity);
@@ -195,7 +195,7 @@ namespace Yi.Framework.Rbac.Application.Services.System
/// </summary> /// </summary>
/// <param name="input"></param> /// <param name="input"></param>
/// <returns></returns> /// <returns></returns>
public async Task CreateAuthUserAsync(RoleAuthUserCreateOrDeleteInput input) public async Task CreateAuthUserAsync([FromBody] RoleAuthUserCreateOrDeleteInput input)
{ {
var userRoleEntities = input.UserIds.Select(u => new UserRoleEntity { RoleId = input.RoleId, UserId = u }) var userRoleEntities = input.UserIds.Select(u => new UserRoleEntity { RoleId = input.RoleId, UserId = u })
.ToList(); .ToList();
@@ -208,7 +208,7 @@ namespace Yi.Framework.Rbac.Application.Services.System
/// </summary> /// </summary>
/// <param name="input"></param> /// <param name="input"></param>
/// <returns></returns> /// <returns></returns>
public async Task DeleteAuthUserAsync(RoleAuthUserCreateOrDeleteInput input) public async Task DeleteAuthUserAsync([FromBody] RoleAuthUserCreateOrDeleteInput input)
{ {
await _userRoleRepository._Db.Deleteable<UserRoleEntity>().Where(x => x.RoleId == input.RoleId) await _userRoleRepository._Db.Deleteable<UserRoleEntity>().Where(x => x.RoleId == input.RoleId)
.Where(x => input.UserIds.Contains(x.UserId)) .Where(x => input.UserIds.Contains(x.UserId))

View File

@@ -95,7 +95,7 @@ export const dynamicRoutes = [
permissions: ['system:user:edit'], permissions: ['system:user:edit'],
children: [ children: [
{ {
path: 'role/:userId(\\d+)', path: 'role/:userId([\\w-]+)',
component: () => import('@/views/system/user/authRole'), component: () => import('@/views/system/user/authRole'),
name: 'AuthRole', name: 'AuthRole',
meta: { title: '分配角色', activeMenu: '/system/user' } meta: { title: '分配角色', activeMenu: '/system/user' }
@@ -109,7 +109,7 @@ export const dynamicRoutes = [
permissions: ['system:role:edit'], permissions: ['system:role:edit'],
children: [ children: [
{ {
path: 'user/:roleId(\\d+)', path: 'user/:roleId([\\w-]+)',
component: () => import('@/views/system/role/authUser'), component: () => import('@/views/system/role/authUser'),
name: 'AuthUser', name: 'AuthUser',
meta: { title: '分配用户', activeMenu: '/system/role' } meta: { title: '分配用户', activeMenu: '/system/role' }
@@ -151,7 +151,7 @@ export const dynamicRoutes = [
permissions: ['tool:gen:edit'], permissions: ['tool:gen:edit'],
children: [ children: [
{ {
path: 'index/:tableId(\\d+)', path: 'index/:tableId([\\w-]+)',
component: () => import('@/views/tool/gen/editTable'), component: () => import('@/views/tool/gen/editTable'),
name: 'GenEdit', name: 'GenEdit',
meta: { title: '修改生成配置', activeMenu: '/tool/gen' } meta: { title: '修改生成配置', activeMenu: '/tool/gen' }

View File

@@ -1,99 +1,99 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryRef" v-show="showSearch" :inline="true"> <el-form :model="queryParams" ref="queryRef" v-show="showSearch" :inline="true">
<el-form-item label="用户名称" prop="userName"> <el-form-item label="用户名称" prop="userName">
<el-input <el-input
v-model="queryParams.userName" v-model="queryParams.userName"
placeholder="请输入用户名称" placeholder="请输入用户名称"
clearable clearable
style="width: 240px" style="width: 240px"
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="手机号码" prop="phone"> <el-form-item label="手机号码" prop="phone">
<el-input <el-input
v-model="queryParams.phone" v-model="queryParams.phone"
placeholder="请输入手机号码" placeholder="请输入手机号码"
clearable clearable
style="width: 240px" style="width: 240px"
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="primary" type="primary"
plain plain
icon="Plus" icon="Plus"
@click="openSelectUser" @click="openSelectUser"
v-hasPermi="['system:role:add']" v-hasPermi="['system:role:add']"
>添加用户</el-button> >添加用户</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="danger" type="danger"
plain plain
icon="CircleClose" icon="CircleClose"
:disabled="multiple" :disabled="multiple"
@click="cancelAuthUserAll" @click="cancelAuthUserAll"
v-hasPermi="['system:role:remove']" v-hasPermi="['system:role:remove']"
>批量取消授权</el-button> >批量取消授权</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="warning" type="warning"
plain plain
icon="Close" icon="Close"
@click="handleClose" @click="handleClose"
>关闭</el-button> >关闭</el-button>
</el-col> </el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="用户名称" prop="userName" :show-overflow-tooltip="true" /> <el-table-column label="用户名称" prop="userName" :show-overflow-tooltip="true" />
<el-table-column label="用户昵称" prop="nick" :show-overflow-tooltip="true" /> <el-table-column label="用户昵称" prop="nick" :show-overflow-tooltip="true" />
<el-table-column label="邮箱" prop="email" :show-overflow-tooltip="true" /> <el-table-column label="邮箱" prop="email" :show-overflow-tooltip="true" />
<el-table-column label="手机" prop="phone" :show-overflow-tooltip="true" /> <el-table-column label="手机" prop="phone" :show-overflow-tooltip="true" />
<el-table-column label="状态" align="center" prop="state"> <el-table-column label="状态" align="center" prop="state">
<template #default="scope"> <template #default="scope">
<dict-tag :options="sys_normal_disable" :value="scope.row.state" /> <dict-tag :options="sys_normal_disable" :value="scope.row.state" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="创建时间" align="center" prop="creationTime" width="180"> <el-table-column label="创建时间" align="center" prop="creationTime" width="180">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.creationTime) }}</span> <span>{{ parseTime(scope.row.creationTime) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-button <el-button
link link
icon="CircleClose" icon="CircleClose"
@click="cancelAuthUser(scope.row)" @click="cancelAuthUser(scope.row)"
v-hasPermi="['system:role:remove']" v-hasPermi="['system:role:remove']"
>取消授权</el-button> >取消授权</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination <pagination
v-show="total > 0" v-show="total > 0"
:total="Number(total)" :total="Number(total)"
v-model:page="queryParams.skipCount" v-model:page="queryParams.skipCount"
v-model:limit="queryParams.maxResultCount" v-model:limit="queryParams.maxResultCount"
@pagination="getList" @pagination="getList"
/> />
<select-user ref="selectRef" :roleId="queryParams.roleId" @ok="handleQuery" /> <select-user ref="selectRef" :roleId="queryParams.roleId" @ok="handleQuery" />
</div> </div>
</template> </template>
<script setup name="AuthUser"> <script setup name="AuthUser">

View File

@@ -74,10 +74,10 @@
<el-button link icon="CircleCheck" @click="handleDataScope(scope.row)" <el-button link icon="CircleCheck" @click="handleDataScope(scope.row)"
v-hasPermi="['system:role:edit']"></el-button> v-hasPermi="['system:role:edit']"></el-button>
</el-tooltip> </el-tooltip>
<!-- <el-tooltip content="分配用户" placement="top" v-if="scope.row.roleId !== 1"> <el-tooltip content="分配用户" placement="top" v-if="scope.row.roleId !== 1">
<el-button link icon="User" @click="handleAuthUser(scope.row)" v-hasPermi="['system:role:edit']"> <el-button link icon="User" @click="handleAuthUser(scope.row)" v-hasPermi="['system:role:edit']">
</el-button> </el-button>
</el-tooltip> --> </el-tooltip>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>

View File

@@ -1,61 +1,61 @@
<template> <template>
<!-- 授权用户 --> <!-- 授权用户 -->
<el-dialog title="选择用户" v-model="visible" width="800px" top="5vh" append-to-body> <el-dialog title="选择用户" v-model="visible" width="800px" top="5vh" append-to-body>
<el-form :model="queryParams" ref="queryRef" :inline="true"> <el-form :model="queryParams" ref="queryRef" :inline="true">
<el-form-item label="用户名称" prop="userName"> <el-form-item label="用户名称" prop="userName">
<el-input <el-input
v-model="queryParams.userName" v-model="queryParams.userName"
placeholder="请输入用户名称" placeholder="请输入用户名称"
clearable clearable
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="手机号码" prop="phone"> <el-form-item label="手机号码" prop="phone">
<el-input <el-input
v-model="queryParams.phone" v-model="queryParams.phone"
placeholder="请输入手机号码" placeholder="请输入手机号码"
clearable clearable
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-row> <el-row>
<el-table @row-click="clickRow" ref="refTable" :data="userList" @selection-change="handleSelectionChange" height="260px"> <el-table @row-click="clickRow" ref="refTable" :data="userList" @selection-change="handleSelectionChange" height="260px">
<el-table-column type="selection" width="55"></el-table-column> <el-table-column type="selection" width="55"></el-table-column>
<el-table-column label="用户名称" prop="userName" :show-overflow-tooltip="true" /> <el-table-column label="用户名称" prop="userName" :show-overflow-tooltip="true" />
<el-table-column label="用户昵称" prop="nick" :show-overflow-tooltip="true" /> <el-table-column label="用户昵称" prop="nick" :show-overflow-tooltip="true" />
<el-table-column label="邮箱" prop="email" :show-overflow-tooltip="true" /> <el-table-column label="邮箱" prop="email" :show-overflow-tooltip="true" />
<el-table-column label="手机" prop="phone" :show-overflow-tooltip="true" /> <el-table-column label="手机" prop="phone" :show-overflow-tooltip="true" />
<el-table-column label="状态" align="center" prop="state"> <el-table-column label="状态" align="center" prop="state">
<template #default="scope"> <template #default="scope">
<dict-tag :options="sys_normal_disable" :value="scope.row.state" /> <dict-tag :options="sys_normal_disable" :value="scope.row.state" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="创建时间" align="center" prop="creationTime" width="180"> <el-table-column label="创建时间" align="center" prop="creationTime" width="180">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.creationTime) }}</span> <span>{{ parseTime(scope.row.creationTime) }}</span>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination <pagination
v-show="total > 0" v-show="total > 0"
:total="Number(total)" :total="Number(total)"
v-model:page="queryParams.skipCount" v-model:page="queryParams.skipCount"
v-model:limit="queryParams.maxResultCount" v-model:limit="queryParams.maxResultCount"
@pagination="getList" @pagination="getList"
/> />
</el-row> </el-row>
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button type="primary" @click="handleSelectUser"> </el-button> <el-button type="primary" @click="handleSelectUser"> </el-button>
<el-button @click="visible = false"> </el-button> <el-button @click="visible = false"> </el-button>
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
</template> </template>
<script setup name="SelectUser"> <script setup name="SelectUser">
@@ -124,9 +124,8 @@ function handleSelectUser() {
proxy.$modal.msgError("请选择要分配的用户"); proxy.$modal.msgError("请选择要分配的用户");
return; return;
} }
authUserSelectAll({ roleId: roleId, userIds:uIds }).then(res => { authUserSelectAll({ roleId: roleId, userIds:uIds }).then(res => {
if (res.statusCode == 200) { if (res.status == 200 || res.status == 204) {
proxy.$modal.msgSuccess("成功"); proxy.$modal.msgSuccess("成功");
visible.value = false; visible.value = false;
emit("ok"); emit("ok");