133 lines
4.5 KiB
TypeScript
133 lines
4.5 KiB
TypeScript
|
|
import {
|
||
|
|
Controller,
|
||
|
|
Get,
|
||
|
|
Post,
|
||
|
|
Put,
|
||
|
|
Delete,
|
||
|
|
Body,
|
||
|
|
Param,
|
||
|
|
Query,
|
||
|
|
UseGuards,
|
||
|
|
HttpCode,
|
||
|
|
HttpStatus
|
||
|
|
} from '@nestjs/common';
|
||
|
|
import { ApiTags, ApiOperation, ApiResponse, ApiBearerAuth } from '@nestjs/swagger';
|
||
|
|
import { RoleAdminService } from '../../services/admin/RoleAdminService';
|
||
|
|
import { CreateRoleDto, UpdateRoleDto, QueryRoleDto, BatchUpdateStatusDto, AssignMenusDto } from '../../dto/admin/RoleDto';
|
||
|
|
import { JwtAuthGuard } from '../../../auth/guards/JwtAuthGuard';
|
||
|
|
import { RolesGuard } from '../../../auth/guards/RolesGuard';
|
||
|
|
import { Roles } from '../../../auth/decorators/RolesDecorator';
|
||
|
|
|
||
|
|
@ApiTags('角色管理')
|
||
|
|
@Controller('adminapi/role')
|
||
|
|
@UseGuards(JwtAuthGuard, RolesGuard)
|
||
|
|
@ApiBearerAuth()
|
||
|
|
export class RoleController {
|
||
|
|
constructor(private readonly roleAdminService: RoleAdminService) {}
|
||
|
|
|
||
|
|
@Post()
|
||
|
|
@ApiOperation({ summary: '创建角色' })
|
||
|
|
@ApiResponse({ status: 201, description: '角色创建成功' })
|
||
|
|
@ApiResponse({ status: 400, description: '请求参数错误' })
|
||
|
|
@Roles('admin')
|
||
|
|
async createRole(@Body() createRoleDto: CreateRoleDto) {
|
||
|
|
return await this.roleAdminService.createRole(createRoleDto);
|
||
|
|
}
|
||
|
|
|
||
|
|
@Get()
|
||
|
|
@ApiOperation({ summary: '获取角色列表' })
|
||
|
|
@ApiResponse({ status: 200, description: '获取角色列表成功' })
|
||
|
|
@Roles('admin')
|
||
|
|
async getRoleList(@Query() queryRoleDto: QueryRoleDto) {
|
||
|
|
return await this.roleAdminService.getRoleList(queryRoleDto);
|
||
|
|
}
|
||
|
|
|
||
|
|
@Get(':id')
|
||
|
|
@ApiOperation({ summary: '获取角色详情' })
|
||
|
|
@ApiResponse({ status: 200, description: '获取角色详情成功' })
|
||
|
|
@ApiResponse({ status: 404, description: '角色不存在' })
|
||
|
|
@Roles('admin')
|
||
|
|
async getRoleDetail(@Param('id') id: string) {
|
||
|
|
return await this.roleAdminService.getRoleDetail(Number(id));
|
||
|
|
}
|
||
|
|
|
||
|
|
@Put(':id')
|
||
|
|
@ApiOperation({ summary: '更新角色' })
|
||
|
|
@ApiResponse({ status: 200, description: '角色更新成功' })
|
||
|
|
@ApiResponse({ status: 400, description: '请求参数错误' })
|
||
|
|
@ApiResponse({ status: 404, description: '角色不存在' })
|
||
|
|
@Roles('admin')
|
||
|
|
async updateRole(
|
||
|
|
@Param('id') id: string,
|
||
|
|
@Body() updateRoleDto: UpdateRoleDto
|
||
|
|
) {
|
||
|
|
return await this.roleAdminService.updateRole(Number(id), updateRoleDto);
|
||
|
|
}
|
||
|
|
|
||
|
|
@Delete(':id')
|
||
|
|
@ApiOperation({ summary: '删除角色' })
|
||
|
|
@ApiResponse({ status: 200, description: '角色删除成功' })
|
||
|
|
@ApiResponse({ status: 404, description: '角色不存在' })
|
||
|
|
@HttpCode(HttpStatus.OK)
|
||
|
|
@Roles('admin')
|
||
|
|
async deleteRole(@Param('id') id: string) {
|
||
|
|
return await this.roleAdminService.deleteRole(Number(id));
|
||
|
|
}
|
||
|
|
|
||
|
|
@Delete('batch')
|
||
|
|
@ApiOperation({ summary: '批量删除角色' })
|
||
|
|
@ApiResponse({ status: 200, description: '批量删除角色成功' })
|
||
|
|
@HttpCode(HttpStatus.OK)
|
||
|
|
@Roles('admin')
|
||
|
|
async batchDeleteRoles(@Body() body: { roleIds: number[] }) {
|
||
|
|
return await this.roleAdminService.batchDeleteRoles(body.roleIds);
|
||
|
|
}
|
||
|
|
|
||
|
|
@Put(':id/status')
|
||
|
|
@ApiOperation({ summary: '更新角色状态' })
|
||
|
|
@ApiResponse({ status: 200, description: '角色状态更新成功' })
|
||
|
|
@ApiResponse({ status: 404, description: '角色不存在' })
|
||
|
|
@Roles('admin')
|
||
|
|
async updateRoleStatus(
|
||
|
|
@Param('id') id: string,
|
||
|
|
@Body() body: { status: number }
|
||
|
|
) {
|
||
|
|
return await this.roleAdminService.updateRoleStatus(Number(id), body.status);
|
||
|
|
}
|
||
|
|
|
||
|
|
@Put('batch/status')
|
||
|
|
@ApiOperation({ summary: '批量更新角色状态' })
|
||
|
|
@ApiResponse({ status: 200, description: '批量更新角色状态成功' })
|
||
|
|
@Roles('admin')
|
||
|
|
async batchUpdateRoleStatus(@Body() body: BatchUpdateStatusDto) {
|
||
|
|
return await this.roleAdminService.batchUpdateRoleStatus(body.roleIds, body.status);
|
||
|
|
}
|
||
|
|
|
||
|
|
@Put(':id/menus')
|
||
|
|
@ApiOperation({ summary: '分配菜单权限' })
|
||
|
|
@ApiResponse({ status: 200, description: '菜单权限分配成功' })
|
||
|
|
@ApiResponse({ status: 404, description: '角色不存在' })
|
||
|
|
@Roles('admin')
|
||
|
|
async assignMenus(
|
||
|
|
@Param('id') id: string,
|
||
|
|
@Body() assignMenusDto: AssignMenusDto
|
||
|
|
) {
|
||
|
|
return await this.roleAdminService.assignMenus(Number(id), assignMenusDto.menuIds);
|
||
|
|
}
|
||
|
|
|
||
|
|
@Get('stats/overview')
|
||
|
|
@ApiOperation({ summary: '获取角色统计信息' })
|
||
|
|
@ApiResponse({ status: 200, description: '获取角色统计信息成功' })
|
||
|
|
@Roles('admin')
|
||
|
|
async getRoleStats() {
|
||
|
|
return await this.roleAdminService.getRoleStats();
|
||
|
|
}
|
||
|
|
|
||
|
|
@Post('export')
|
||
|
|
@ApiOperation({ summary: '导出角色数据' })
|
||
|
|
@ApiResponse({ status: 200, description: '导出角色数据成功' })
|
||
|
|
@Roles('admin')
|
||
|
|
async exportRoles(@Body() query: any) {
|
||
|
|
return await this.roleAdminService.exportRoles();
|
||
|
|
}
|
||
|
|
}
|