From 0823c750b2d4f1f38a6508d81e053379ca34886c Mon Sep 17 00:00:00 2001 From: liuyun Date: Sun, 11 Oct 2026 12:50:23 +0800 Subject: [PATCH] feat: tenant list search filter Co-Authored-By: Claude Opus 4.8 --- src/tenants/dto.ts | 18 ++++++++++++++++++ src/tenants/tenants.controller.ts | 7 +++---- src/tenants/tenants.service.ts | 10 +++++++++- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/tenants/dto.ts b/src/tenants/dto.ts index ccf39bc..49941d8 100644 --- a/src/tenants/dto.ts +++ b/src/tenants/dto.ts @@ -1,5 +1,6 @@ import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; import { IsNotEmpty, IsOptional, IsString } from 'class-validator'; +import { PageQuery } from '../common/page.dto.js'; export class CreateTenantDto { @ApiProperty({ description: '租户编码' }) @@ -39,3 +40,20 @@ export class UpdateTenantDto { @IsString() remark?: string; } + +export class ListTenantQuery extends PageQuery { + @ApiPropertyOptional({ description: '租户名称(模糊)' }) + @IsOptional() + @IsString() + name?: string; + + @ApiPropertyOptional({ description: '租户编码(模糊)' }) + @IsOptional() + @IsString() + code?: string; + + @ApiPropertyOptional({ description: '状态:enabled/disabled' }) + @IsOptional() + @IsString() + status?: string; +} diff --git a/src/tenants/tenants.controller.ts b/src/tenants/tenants.controller.ts index a1c7125..405abe6 100644 --- a/src/tenants/tenants.controller.ts +++ b/src/tenants/tenants.controller.ts @@ -1,8 +1,7 @@ import { Body, Controller, Delete, Get, Param, Patch, Post, Query } from '@nestjs/common'; -import { PageQuery } from '../common/page.dto.js'; import { Permissions } from '../common/permissions.js'; import { AuditLog, RequirePermissions } from '../auth/decorators.js'; -import { CreateTenantDto, UpdateTenantDto } from './dto.js'; +import { CreateTenantDto, ListTenantQuery, UpdateTenantDto } from './dto.js'; import { TenantsService } from './tenants.service.js'; @Controller('tenants') @@ -11,8 +10,8 @@ export class TenantsController { @Get() @RequirePermissions(Permissions.tenant.list) - list(@Query() q: PageQuery) { - return this.service.paginate(q.page, q.pageSize); + list(@Query() q: ListTenantQuery) { + return this.service.listTenants(q); } @Get(':id') diff --git a/src/tenants/tenants.service.ts b/src/tenants/tenants.service.ts index d785012..7613f4a 100644 --- a/src/tenants/tenants.service.ts +++ b/src/tenants/tenants.service.ts @@ -1,7 +1,7 @@ import { Injectable, NotFoundException } from '@nestjs/common'; import { BaseCrudService } from '../common/base-crud.service.js'; import { PrismaService } from '../prisma/prisma.service.js'; -import { CreateTenantDto, UpdateTenantDto } from './dto.js'; +import { CreateTenantDto, ListTenantQuery, UpdateTenantDto } from './dto.js'; @Injectable() export class TenantsService extends BaseCrudService { @@ -13,6 +13,14 @@ export class TenantsService extends BaseCrudService { return this.create({ ...dto }); } + listTenants(q: ListTenantQuery) { + const where: Record = {}; + if (q.name) where.name = { contains: q.name }; + if (q.code) where.code = { contains: q.code }; + if (q.status) where.status = q.status; + return this.paginate(q.page, q.pageSize, where); + } + async updateTenant(id: string, dto: UpdateTenantDto) { const existing = await this.findById(id); if (!existing) throw new NotFoundException('租户不存在');