import { Type } from 'class-transformer'; import { IsBoolean, IsIn, IsInt, IsNotEmpty, IsOptional, IsString, Matches, MaxLength, Min, ValidateIf, } from 'class-validator'; export class HqProxyOrderPreviewDto { @IsString() @IsNotEmpty() productId: string; @IsOptional() @IsString() skuId?: string; @Type(() => Number) @IsInt() @Min(1) quantity: number; @IsOptional() @IsIn(['ADDRESS', 'ON_SITE_PICKUP']) deliveryMode?: 'ADDRESS' | 'ON_SITE_PICKUP'; @IsOptional() @IsString() receiverCity?: string; @IsOptional() @IsString() receiverDistrict?: string; } export class HqProxyOrderCreateDto { @IsString() @Matches(/^1\d{10}$/, { message: '请输入有效手机号' }) phone: string; @IsIn(['ADDRESS', 'ON_SITE_PICKUP']) deliveryMode: 'ADDRESS' | 'ON_SITE_PICKUP'; @ValidateIf((o: HqProxyOrderCreateDto) => o.deliveryMode === 'ADDRESS') @IsBoolean() autoReceive?: boolean; @IsOptional() @IsString() @MaxLength(32) receiverName?: string; @ValidateIf((o: HqProxyOrderCreateDto) => o.deliveryMode === 'ADDRESS') @IsString() @MaxLength(32) province?: string; @ValidateIf((o: HqProxyOrderCreateDto) => o.deliveryMode === 'ADDRESS') @IsString() @MaxLength(32) city?: string; @ValidateIf((o: HqProxyOrderCreateDto) => o.deliveryMode === 'ADDRESS') @IsString() @MaxLength(32) district?: string; @ValidateIf((o: HqProxyOrderCreateDto) => o.deliveryMode === 'ADDRESS') @IsString() @MaxLength(256) addressDetail?: string; @IsString() @IsNotEmpty() productId: string; @IsOptional() @IsString() skuId?: string; @Type(() => Number) @IsInt() @Min(1) quantity: number; @IsOptional() @IsString() promoCodeId?: string; } export class HqProxyOrderPayDto { @IsOptional() @IsIn(['NATIVE', 'JSAPI']) payMethod?: 'NATIVE' | 'JSAPI'; }