Files
smart_grid_iot/server/src/dto/worker.dto.ts
T
andyesfly f4454ad014 feat: 新增电工APP端与定时任务管理功能
- 新增电工APP独立鉴权中间件与登录注册接口
- 新增定时任务管理模块,支持任务配置、执行日志与手动触发
- 新增运维费定价与电工派单成本价目管理
- 新增电工资质证照管理与到期提醒定时任务
- 完善数据库实体与DTO校验,优化权限控制
2026-10-02 16:08:00 +08:00

84 lines
3.4 KiB
TypeScript

import {
IsOptional,
IsString,
IsInt,
IsNumber,
IsBoolean,
IsArray,
IsIn,
IsNotEmpty,
ValidateNested,
Matches,
Min,
Max,
MaxLength
} from "class-validator";
import { Type } from "class-transformer";
export class WorkerQueryDTO {
@IsOptional() @IsString() @MaxLength(64) keyword?: string;
@IsOptional() @IsInt() status?: number;
// 审核状态筛选:0待审核 1已通过 2已驳回
@IsOptional() @IsInt() @IsIn([0, 1, 2]) auditStatus?: number;
// 资质状态筛选:none无证书 normal正常 expiring临期 expired已过期
@IsOptional() @IsString() @IsIn(["none", "normal", "expiring", "expired"]) certStatus?: string;
@IsOptional() @IsInt() @Min(1) page?: number = 1;
@IsOptional() @IsInt() @Min(1) @Max(200) pageSize?: number = 10;
// 兼容部分前端分页参数命名
@IsOptional() @IsInt() @Min(1) @Max(200) limit?: number;
}
export class WorkerRecommendQueryDTO {
@IsOptional() @IsInt() @Min(0) loopCount?: number;
@IsOptional() @IsInt() @Min(1) @Max(3) priority?: number;
@IsOptional() @IsString() @MaxLength(64) certKeyword?: string;
}
// 单条资质证照
export class WorkerCertDTO {
@IsNotEmpty({ message: "证书类型不能为空" }) @IsString() @MaxLength(64) certType!: string;
@IsNotEmpty({ message: "证书编号不能为空" }) @IsString() @MaxLength(64) certNo!: string;
@IsOptional() @IsString() @MaxLength(128) issueAuthority?: string;
@IsOptional() @IsString() @MaxLength(10) issueDate?: string;
// 有效期至(NULL/缺省=长期有效)
@IsOptional() @IsString() @MaxLength(10) expireDate?: string;
@IsOptional() @IsString() @MaxLength(512) certImageUrl?: string;
}
// 证书整体保存(覆盖式)
export class WorkerCertListDTO {
@IsArray() @ValidateNested({ each: true }) @Type(() => WorkerCertDTO) certs!: WorkerCertDTO[];
}
// 电工新增
export class WorkerCreateDTO {
@IsNotEmpty({ message: "电工姓名不能为空" }) @IsString() @MaxLength(64) workerName!: string;
@IsNotEmpty({ message: "手机号不能为空" }) @Matches(/^1[3-9]\d{9}$/, { message: "手机号格式不正确" }) phone!: string;
@IsOptional() @IsString() @MaxLength(18) idCard?: string;
@IsOptional() @IsString() @MaxLength(32) workerTitle?: string;
@IsOptional() @IsNumber() @Min(0) @Max(5) rating?: number;
@IsOptional() @IsString() @MaxLength(128) certInfo?: string;
// 是否同时开通电工APP账号(默认密码为手机号后 6 位)
@IsOptional() @IsBoolean() withAccount?: boolean = false;
@IsOptional() @IsArray() @ValidateNested({ each: true }) @Type(() => WorkerCertDTO) certs?: WorkerCertDTO[];
}
// 电工更新(字段白名单)
export class WorkerUpdateDTO {
@IsOptional() @IsString() @MaxLength(64) workerName?: string;
@IsOptional() @Matches(/^1[3-9]\d{9}$/, { message: "手机号格式不正确" }) phone?: string;
@IsOptional() @IsString() @MaxLength(18) idCard?: string;
@IsOptional() @IsString() @MaxLength(32) workerTitle?: string;
@IsOptional() @IsInt() @IsIn([0, 1]) status?: number;
@IsOptional() @IsNumber() @Min(0) @Max(5) rating?: number;
@IsOptional() @IsString() @MaxLength(128) certInfo?: string;
// 存在时整体覆盖该电工的全部证书
@IsOptional() @IsArray() @ValidateNested({ each: true }) @Type(() => WorkerCertDTO) certs?: WorkerCertDTO[];
}
// 资质审核
export class WorkerAuditDTO {
@IsNotEmpty({ message: "审核结果不能为空" }) @IsBoolean() approved!: boolean;
// 驳回理由(驳回时必填)
@IsOptional() @IsString() @MaxLength(255) remark?: string;
}