fix(admin): 列设置靠右并支持订单状态多选
HQ 列表主操作居右、列设置贴最右侧;订单筛选状态可多选,导出同步过滤。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -155,7 +155,9 @@ export class AdminOrdersService {
|
||||
const where: Prisma.OrderWhereInput = {};
|
||||
|
||||
if (query.orderNo) where.orderNo = { contains: query.orderNo };
|
||||
if (query.status) where.status = query.status as Prisma.EnumOrderStatusFilter['equals'];
|
||||
if (query.status?.length) {
|
||||
where.status = { in: query.status as Prisma.EnumOrderStatusFilter['in'] };
|
||||
}
|
||||
if (query.orderType) where.orderType = query.orderType as Prisma.EnumOrderTypeFilter['equals'];
|
||||
if (query.userId) where.userId = BigInt(query.userId);
|
||||
if (query.cityId) where.cityId = BigInt(query.cityId);
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
import { OrderStatus } from '@dukang/shared-types';
|
||||
import { Type, Transform } from 'class-transformer';
|
||||
import { IsArray, IsBoolean, IsIn, IsInt, IsOptional, IsString, Max, Min } from 'class-validator';
|
||||
|
||||
const ORDER_STATUS_VALUES = Object.values(OrderStatus);
|
||||
|
||||
function toOptionalBoolean(value: unknown): boolean | undefined {
|
||||
if (value === undefined || value === null || value === '') return undefined;
|
||||
if (value === true || value === 'true' || value === '1' || value === 1) return true;
|
||||
@@ -8,6 +11,19 @@ function toOptionalBoolean(value: unknown): boolean | undefined {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
/** Query/body:单值、逗号串、重复 key、数组均可 → string[] */
|
||||
function toOptionalStringList(value: unknown): string[] | undefined {
|
||||
if (value === undefined || value === null || value === '') return undefined;
|
||||
const raw = Array.isArray(value) ? value : [value];
|
||||
const items = [...new Set(
|
||||
raw
|
||||
.flatMap((v) => String(v).split(','))
|
||||
.map((s) => s.trim())
|
||||
.filter(Boolean),
|
||||
)];
|
||||
return items.length ? items : undefined;
|
||||
}
|
||||
|
||||
export class PaginationQueryDto {
|
||||
@IsOptional()
|
||||
@Type(() => Number)
|
||||
@@ -57,9 +73,12 @@ export class AdminOrdersQueryDto extends PaginationQueryDto {
|
||||
@IsString()
|
||||
orderNo?: string;
|
||||
|
||||
/** 单值或多项:`?status=PENDING_PAY` / `?status=A&status=B` / `?status=A,B` */
|
||||
@IsOptional()
|
||||
@IsString()
|
||||
status?: string;
|
||||
@Transform(({ value }) => toOptionalStringList(value))
|
||||
@IsArray()
|
||||
@IsIn(ORDER_STATUS_VALUES, { each: true })
|
||||
status?: string[];
|
||||
|
||||
@IsOptional()
|
||||
@IsIn(['NORMAL', 'PROXY'])
|
||||
@@ -117,8 +136,10 @@ export class AdminOrdersExportDto {
|
||||
orderNo?: string;
|
||||
|
||||
@IsOptional()
|
||||
@IsString()
|
||||
status?: string;
|
||||
@Transform(({ value }) => toOptionalStringList(value))
|
||||
@IsArray()
|
||||
@IsIn(ORDER_STATUS_VALUES, { each: true })
|
||||
status?: string[];
|
||||
|
||||
@IsOptional()
|
||||
@IsIn(['NORMAL', 'PROXY', 'RESHIPMENT'])
|
||||
|
||||
Reference in New Issue
Block a user