67 lines
1.2 KiB
TypeScript
67 lines
1.2 KiB
TypeScript
import { IsString, IsUUID, IsBoolean, IsOptional, IsObject, IsIn } from 'class-validator';
|
|
|
|
export type PageLayoutType = 'detail' | 'list';
|
|
|
|
export class CreatePageLayoutDto {
|
|
@IsString()
|
|
name: string;
|
|
|
|
@IsUUID()
|
|
objectId: string;
|
|
|
|
@IsIn(['detail', 'list'])
|
|
@IsOptional()
|
|
layoutType?: PageLayoutType = 'detail';
|
|
|
|
@IsBoolean()
|
|
@IsOptional()
|
|
isDefault?: boolean;
|
|
|
|
@IsObject()
|
|
layoutConfig: {
|
|
// For detail layouts: grid-based field positions
|
|
fields: Array<{
|
|
fieldId: string;
|
|
x?: number;
|
|
y?: number;
|
|
w?: number;
|
|
h?: number;
|
|
// For list layouts: field order (optional, defaults to array index)
|
|
order?: number;
|
|
}>;
|
|
relatedLists?: string[];
|
|
};
|
|
|
|
@IsString()
|
|
@IsOptional()
|
|
description?: string;
|
|
}
|
|
|
|
export class UpdatePageLayoutDto {
|
|
@IsString()
|
|
@IsOptional()
|
|
name?: string;
|
|
|
|
@IsBoolean()
|
|
@IsOptional()
|
|
isDefault?: boolean;
|
|
|
|
@IsObject()
|
|
@IsOptional()
|
|
layoutConfig?: {
|
|
fields: Array<{
|
|
fieldId: string;
|
|
x?: number;
|
|
y?: number;
|
|
w?: number;
|
|
h?: number;
|
|
order?: number;
|
|
}>;
|
|
relatedLists?: string[];
|
|
};
|
|
|
|
@IsString()
|
|
@IsOptional()
|
|
description?: string;
|
|
}
|