|
|
@@ -0,0 +1,535 @@
|
|
|
+import { Entity, PrimaryGeneratedColumn, Column, Index } from 'typeorm';
|
|
|
+import { z } from '@hono/zod-openapi';
|
|
|
+
|
|
|
+@Entity('client')
|
|
|
+export class Client {
|
|
|
+ @PrimaryGeneratedColumn({ unsigned: true })
|
|
|
+ id!: number;
|
|
|
+
|
|
|
+ @Column({ name: 'company_name', type: 'varchar', length: 255 })
|
|
|
+ companyName!: string;
|
|
|
+
|
|
|
+ @Column({ name: 'area_id', type: 'int', unsigned: true, nullable: true })
|
|
|
+ areaId?: number;
|
|
|
+
|
|
|
+ @Column({ name: 'square', type: 'varchar', length: 50, nullable: true })
|
|
|
+ square?: string;
|
|
|
+
|
|
|
+ @Column({ name: 'address', type: 'varchar', length: 255, nullable: true })
|
|
|
+ address?: string;
|
|
|
+
|
|
|
+ @Column({ name: 'contact_person', type: 'varchar', length: 100, nullable: true })
|
|
|
+ contactPerson?: string;
|
|
|
+
|
|
|
+ @Column({ name: 'position', type: 'varchar', length: 100, nullable: true })
|
|
|
+ position?: string;
|
|
|
+
|
|
|
+ @Column({ name: 'mobile', type: 'varchar', length: 20, nullable: true })
|
|
|
+ mobile?: string;
|
|
|
+
|
|
|
+ @Column({ name: 'zip_code', type: 'varchar', length: 20, nullable: true })
|
|
|
+ zipCode?: string;
|
|
|
+
|
|
|
+ @Column({ name: 'telephone', type: 'varchar', length: 20, nullable: true })
|
|
|
+ telephone?: string;
|
|
|
+
|
|
|
+ @Column({ name: 'fax', type: 'varchar', length: 20, nullable: true })
|
|
|
+ fax?: string;
|
|
|
+
|
|
|
+ @Column({ name: 'homepage', type: 'varchar', length: 255, nullable: true })
|
|
|
+ homepage?: string;
|
|
|
+
|
|
|
+ @Column({ name: 'email', type: 'varchar', length: 100, nullable: true })
|
|
|
+ email?: string;
|
|
|
+
|
|
|
+ @Column({ name: 'industry', type: 'varchar', length: 100, nullable: true })
|
|
|
+ industry?: string;
|
|
|
+
|
|
|
+ @Column({ name: 'sub_industry', type: 'varchar', length: 100, nullable: true })
|
|
|
+ subIndustry?: string;
|
|
|
+
|
|
|
+ @Column({ name: 'customer_type', type: 'varchar', length: 50, nullable: true })
|
|
|
+ customerType?: string;
|
|
|
+
|
|
|
+ @Column({ name: 'start_date', type: 'date', nullable: true })
|
|
|
+ startDate?: Date;
|
|
|
+
|
|
|
+ @Column({ name: 'source', type: 'varchar', length: 100, nullable: true })
|
|
|
+ source?: string;
|
|
|
+
|
|
|
+ @Column({ name: 'description', type: 'text', nullable: true })
|
|
|
+ description?: string;
|
|
|
+
|
|
|
+ @Column({ name: 'responsible_user_id', type: 'int', unsigned: true, nullable: true })
|
|
|
+ responsibleUserId?: number;
|
|
|
+
|
|
|
+ @Column({ name: 'group_id', type: 'int', unsigned: true, nullable: true })
|
|
|
+ groupId?: number;
|
|
|
+
|
|
|
+ @Column({ name: 'remarks', type: 'text', nullable: true })
|
|
|
+ remarks?: string;
|
|
|
+
|
|
|
+ @Column({ name: 'old_user_id', type: 'int', unsigned: true, nullable: true })
|
|
|
+ oldUserId?: number;
|
|
|
+
|
|
|
+ @Column({ name: 'last_updated', type: 'timestamp', nullable: true })
|
|
|
+ lastUpdated?: Date;
|
|
|
+
|
|
|
+ @Column({ name: 'share_status', type: 'tinyint', default: 0 })
|
|
|
+ shareStatus!: number;
|
|
|
+
|
|
|
+ @Column({ name: 'share_range', type: 'int', nullable: true })
|
|
|
+ shareRange?: number;
|
|
|
+
|
|
|
+ @Column({ name: 'service_level', type: 'int', nullable: true })
|
|
|
+ serviceLevel?: number;
|
|
|
+
|
|
|
+ @Column({ name: 'next_contact_time', type: 'datetime', nullable: true })
|
|
|
+ nextContactTime?: Date;
|
|
|
+
|
|
|
+ @Column({ name: 'oe_date', type: 'date', nullable: true })
|
|
|
+ oeDate?: Date;
|
|
|
+
|
|
|
+ @Column({ name: 'he_date', type: 'date', nullable: true })
|
|
|
+ heDate?: Date;
|
|
|
+
|
|
|
+ @Column({ name: 'zone_id', type: 'int', nullable: true })
|
|
|
+ zoneId?: number;
|
|
|
+
|
|
|
+ @Column({ name: 'is_deleted', type: 'tinyint', default: 0 })
|
|
|
+ isDeleted!: number;
|
|
|
+
|
|
|
+ @Column({ name: 'status', type: 'tinyint', default: 1 })
|
|
|
+ status!: number;
|
|
|
+
|
|
|
+ @Column({ name: 'audit_status', type: 'tinyint', default: 0 })
|
|
|
+ auditStatus!: number;
|
|
|
+
|
|
|
+ @Column({ name: 'created_at', type: 'timestamp', default: () => 'CURRENT_TIMESTAMP' })
|
|
|
+ createdAt!: Date;
|
|
|
+
|
|
|
+ @Column({
|
|
|
+ name: 'updated_at',
|
|
|
+ type: 'timestamp',
|
|
|
+ default: () => 'CURRENT_TIMESTAMP',
|
|
|
+ onUpdate: 'CURRENT_TIMESTAMP'
|
|
|
+ })
|
|
|
+ updatedAt!: Date;
|
|
|
+}
|
|
|
+
|
|
|
+export const ClientSchema = z.object({
|
|
|
+ id: z.number().int().positive().openapi({
|
|
|
+ description: '客户ID',
|
|
|
+ example: 1
|
|
|
+ }),
|
|
|
+ companyName: z.string().max(255).openapi({
|
|
|
+ description: '客户公司名称',
|
|
|
+ example: '北京科技有限公司'
|
|
|
+ }),
|
|
|
+ areaId: z.number().int().positive().nullable().openapi({
|
|
|
+ description: '所在区域ID,关联area_data表',
|
|
|
+ example: 1
|
|
|
+ }),
|
|
|
+ square: z.string().max(50).nullable().openapi({
|
|
|
+ description: '场地面积信息',
|
|
|
+ example: '1000㎡'
|
|
|
+ }),
|
|
|
+ address: z.string().max(255).nullable().openapi({
|
|
|
+ description: '客户地址',
|
|
|
+ example: '北京市海淀区中关村大街1号'
|
|
|
+ }),
|
|
|
+ contactPerson: z.string().max(100).nullable().openapi({
|
|
|
+ description: '联系人姓名',
|
|
|
+ example: '张三'
|
|
|
+ }),
|
|
|
+ position: z.string().max(100).nullable().openapi({
|
|
|
+ description: '联系人职位',
|
|
|
+ example: '经理'
|
|
|
+ }),
|
|
|
+ mobile: z.string().max(20).nullable().openapi({
|
|
|
+ description: '联系人手机号码',
|
|
|
+ example: '13800138000'
|
|
|
+ }),
|
|
|
+ zipCode: z.string().max(20).nullable().openapi({
|
|
|
+ description: '邮政编码',
|
|
|
+ example: '100080'
|
|
|
+ }),
|
|
|
+ telephone: z.string().max(20).nullable().openapi({
|
|
|
+ description: '联系电话',
|
|
|
+ example: '010-12345678'
|
|
|
+ }),
|
|
|
+ fax: z.string().max(20).nullable().openapi({
|
|
|
+ description: '传真号码',
|
|
|
+ example: '010-12345679'
|
|
|
+ }),
|
|
|
+ homepage: z.string().max(255).nullable().openapi({
|
|
|
+ description: '公司主页网址',
|
|
|
+ example: 'https://www.example.com'
|
|
|
+ }),
|
|
|
+ email: z.string().max(100).nullable().openapi({
|
|
|
+ description: '电子邮箱',
|
|
|
+ example: 'contact@example.com'
|
|
|
+ }),
|
|
|
+ industry: z.string().max(100).nullable().openapi({
|
|
|
+ description: '所属行业',
|
|
|
+ example: '信息技术'
|
|
|
+ }),
|
|
|
+ subIndustry: z.string().max(100).nullable().openapi({
|
|
|
+ description: '所属子行业',
|
|
|
+ example: '软件开发'
|
|
|
+ }),
|
|
|
+ customerType: z.string().max(50).nullable().openapi({
|
|
|
+ description: '客户类型',
|
|
|
+ example: '重要客户'
|
|
|
+ }),
|
|
|
+ startDate: z.date().nullable().openapi({
|
|
|
+ description: '合作起始日期',
|
|
|
+ example: '2023-01-01'
|
|
|
+ }),
|
|
|
+ source: z.string().max(100).nullable().openapi({
|
|
|
+ description: '客户来源',
|
|
|
+ example: '展会'
|
|
|
+ }),
|
|
|
+ description: z.string().nullable().openapi({
|
|
|
+ description: '客户详细信息',
|
|
|
+ example: '专注于人工智能领域的科技公司'
|
|
|
+ }),
|
|
|
+ responsibleUserId: z.number().int().positive().nullable().openapi({
|
|
|
+ description: '负责人用户ID',
|
|
|
+ example: 1
|
|
|
+ }),
|
|
|
+ groupId: z.number().int().positive().nullable().openapi({
|
|
|
+ description: '客户所属群组ID',
|
|
|
+ example: 1
|
|
|
+ }),
|
|
|
+ remarks: z.string().nullable().openapi({
|
|
|
+ description: '客户备注信息',
|
|
|
+ example: '需要定期跟进'
|
|
|
+ }),
|
|
|
+ oldUserId: z.number().int().positive().nullable().openapi({
|
|
|
+ description: '旧负责人用户ID',
|
|
|
+ example: 2
|
|
|
+ }),
|
|
|
+ lastUpdated: z.date().nullable().openapi({
|
|
|
+ description: '最后更新时间',
|
|
|
+ example: '2023-01-10T00:00:00Z'
|
|
|
+ }),
|
|
|
+ shareStatus: z.number().int().min(0).max(1).openapi({
|
|
|
+ description: '分享状态:0-未分享,1-已分享',
|
|
|
+ example: 0
|
|
|
+ }),
|
|
|
+ shareRange: z.number().int().nullable().openapi({
|
|
|
+ description: '分享范围',
|
|
|
+ example: 1
|
|
|
+ }),
|
|
|
+ serviceLevel: z.number().int().nullable().openapi({
|
|
|
+ description: '服务等级',
|
|
|
+ example: 2
|
|
|
+ }),
|
|
|
+ nextContactTime: z.date().nullable().openapi({
|
|
|
+ description: '下次联系时间',
|
|
|
+ example: '2023-02-01T10:00:00Z'
|
|
|
+ }),
|
|
|
+ oeDate: z.date().nullable().openapi({
|
|
|
+ description: 'OE日期',
|
|
|
+ example: '2023-03-01'
|
|
|
+ }),
|
|
|
+ heDate: z.date().nullable().openapi({
|
|
|
+ description: 'HE日期',
|
|
|
+ example: '2023-04-01'
|
|
|
+ }),
|
|
|
+ zoneId: z.number().int().nullable().openapi({
|
|
|
+ description: '区域标识',
|
|
|
+ example: 1
|
|
|
+ }),
|
|
|
+ isDeleted: z.number().int().min(0).max(1).openapi({
|
|
|
+ description: '删除状态:0-未删除,1-已删除',
|
|
|
+ example: 0
|
|
|
+ }),
|
|
|
+ status: z.number().int().min(0).max(1).openapi({
|
|
|
+ description: '客户状态:0-无效,1-有效',
|
|
|
+ example: 1
|
|
|
+ }),
|
|
|
+ auditStatus: z.number().int().min(0).max(2).openapi({
|
|
|
+ description: '审核状态:0-待审核,1-已审核,2-已拒绝',
|
|
|
+ example: 1
|
|
|
+ }),
|
|
|
+ createdAt: z.date().openapi({
|
|
|
+ description: '创建时间',
|
|
|
+ example: '2023-01-01T00:00:00Z'
|
|
|
+ }),
|
|
|
+ updatedAt: z.date().openapi({
|
|
|
+ description: '更新时间',
|
|
|
+ example: '2023-01-01T00:00:00Z'
|
|
|
+ })
|
|
|
+});
|
|
|
+
|
|
|
+export const CreateClientDto = z.object({
|
|
|
+ companyName: z.string().max(255).openapi({
|
|
|
+ description: '客户公司名称',
|
|
|
+ example: '北京科技有限公司'
|
|
|
+ }),
|
|
|
+ areaId: z.number().int().positive().nullable().openapi({
|
|
|
+ description: '所在区域ID,关联area_data表',
|
|
|
+ example: 1
|
|
|
+ }),
|
|
|
+ square: z.string().max(50).nullable().optional().openapi({
|
|
|
+ description: '场地面积信息',
|
|
|
+ example: '1000㎡'
|
|
|
+ }),
|
|
|
+ address: z.string().max(255).nullable().optional().openapi({
|
|
|
+ description: '客户地址',
|
|
|
+ example: '北京市海淀区中关村大街1号'
|
|
|
+ }),
|
|
|
+ contactPerson: z.string().max(100).nullable().optional().openapi({
|
|
|
+ description: '联系人姓名',
|
|
|
+ example: '张三'
|
|
|
+ }),
|
|
|
+ position: z.string().max(100).nullable().optional().openapi({
|
|
|
+ description: '联系人职位',
|
|
|
+ example: '经理'
|
|
|
+ }),
|
|
|
+ mobile: z.string().max(20).nullable().optional().openapi({
|
|
|
+ description: '联系人手机号码',
|
|
|
+ example: '13800138000'
|
|
|
+ }),
|
|
|
+ zipCode: z.string().max(20).nullable().optional().openapi({
|
|
|
+ description: '邮政编码',
|
|
|
+ example: '100080'
|
|
|
+ }),
|
|
|
+ telephone: z.string().max(20).nullable().optional().openapi({
|
|
|
+ description: '联系电话',
|
|
|
+ example: '010-12345678'
|
|
|
+ }),
|
|
|
+ fax: z.string().max(20).nullable().optional().openapi({
|
|
|
+ description: '传真号码',
|
|
|
+ example: '010-12345679'
|
|
|
+ }),
|
|
|
+ homepage: z.string().max(255).nullable().optional().openapi({
|
|
|
+ description: '公司主页网址',
|
|
|
+ example: 'https://www.example.com'
|
|
|
+ }),
|
|
|
+ email: z.string().max(100).nullable().optional().openapi({
|
|
|
+ description: '电子邮箱',
|
|
|
+ example: 'contact@example.com'
|
|
|
+ }),
|
|
|
+ industry: z.string().max(100).nullable().optional().openapi({
|
|
|
+ description: '所属行业',
|
|
|
+ example: '信息技术'
|
|
|
+ }),
|
|
|
+ subIndustry: z.string().max(100).nullable().optional().openapi({
|
|
|
+ description: '所属子行业',
|
|
|
+ example: '软件开发'
|
|
|
+ }),
|
|
|
+ customerType: z.string().max(50).nullable().optional().openapi({
|
|
|
+ description: '客户类型',
|
|
|
+ example: '重要客户'
|
|
|
+ }),
|
|
|
+ startDate: z.coerce.date().nullable().optional().openapi({
|
|
|
+ description: '合作起始日期',
|
|
|
+ example: '2023-01-01'
|
|
|
+ }),
|
|
|
+ source: z.string().max(100).nullable().optional().openapi({
|
|
|
+ description: '客户来源',
|
|
|
+ example: '展会'
|
|
|
+ }),
|
|
|
+ description: z.string().nullable().optional().openapi({
|
|
|
+ description: '客户详细信息',
|
|
|
+ example: '专注于人工智能领域的科技公司'
|
|
|
+ }),
|
|
|
+ responsibleUserId: z.number().int().positive().nullable().optional().openapi({
|
|
|
+ description: '负责人用户ID',
|
|
|
+ example: 1
|
|
|
+ }),
|
|
|
+ groupId: z.number().int().positive().nullable().optional().openapi({
|
|
|
+ description: '客户所属群组ID',
|
|
|
+ example: 1
|
|
|
+ }),
|
|
|
+ remarks: z.string().nullable().optional().openapi({
|
|
|
+ description: '客户备注信息',
|
|
|
+ example: '需要定期跟进'
|
|
|
+ }),
|
|
|
+ oldUserId: z.number().int().positive().nullable().optional().openapi({
|
|
|
+ description: '旧负责人用户ID',
|
|
|
+ example: 2
|
|
|
+ }),
|
|
|
+ lastUpdated: z.coerce.date().nullable().optional().openapi({
|
|
|
+ description: '最后更新时间',
|
|
|
+ example: '2023-01-10T00:00:00Z'
|
|
|
+ }),
|
|
|
+ shareStatus: z.number().int().min(0).max(1).default(0).openapi({
|
|
|
+ description: '分享状态:0-未分享,1-已分享',
|
|
|
+ example: 0
|
|
|
+ }),
|
|
|
+ shareRange: z.number().int().nullable().optional().openapi({
|
|
|
+ description: '分享范围',
|
|
|
+ example: 1
|
|
|
+ }),
|
|
|
+ serviceLevel: z.number().int().nullable().optional().openapi({
|
|
|
+ description: '服务等级',
|
|
|
+ example: 2
|
|
|
+ }),
|
|
|
+ nextContactTime: z.coerce.date().nullable().optional().openapi({
|
|
|
+ description: '下次联系时间',
|
|
|
+ example: '2023-02-01T10:00:00Z'
|
|
|
+ }),
|
|
|
+ oeDate: z.coerce.date().nullable().optional().openapi({
|
|
|
+ description: 'OE日期',
|
|
|
+ example: '2023-03-01'
|
|
|
+ }),
|
|
|
+ heDate: z.coerce.date().nullable().optional().openapi({
|
|
|
+ description: 'HE日期',
|
|
|
+ example: '2023-04-01'
|
|
|
+ }),
|
|
|
+ zoneId: z.number().int().nullable().optional().openapi({
|
|
|
+ description: '区域标识',
|
|
|
+ example: 1
|
|
|
+ }),
|
|
|
+ isDeleted: z.number().int().min(0).max(1).default(0).openapi({
|
|
|
+ description: '删除状态:0-未删除,1-已删除',
|
|
|
+ example: 0
|
|
|
+ }),
|
|
|
+ status: z.number().int().min(0).max(1).default(1).openapi({
|
|
|
+ description: '客户状态:0-无效,1-有效',
|
|
|
+ example: 1
|
|
|
+ }),
|
|
|
+ auditStatus: z.number().int().min(0).max(2).default(0).openapi({
|
|
|
+ description: '审核状态:0-待审核,1-已审核,2-已拒绝',
|
|
|
+ example: 0
|
|
|
+ })
|
|
|
+});
|
|
|
+
|
|
|
+export const UpdateClientDto = z.object({
|
|
|
+ companyName: z.string().max(255).optional().openapi({
|
|
|
+ description: '客户公司名称',
|
|
|
+ example: '北京科技有限公司'
|
|
|
+ }),
|
|
|
+ areaId: z.number().int().positive().nullable().optional().openapi({
|
|
|
+ description: '所在区域ID,关联area_data表',
|
|
|
+ example: 1
|
|
|
+ }),
|
|
|
+ square: z.string().max(50).nullable().optional().openapi({
|
|
|
+ description: '场地面积信息',
|
|
|
+ example: '1000㎡'
|
|
|
+ }),
|
|
|
+ address: z.string().max(255).nullable().optional().openapi({
|
|
|
+ description: '客户地址',
|
|
|
+ example: '北京市海淀区中关村大街1号'
|
|
|
+ }),
|
|
|
+ contactPerson: z.string().max(100).nullable().optional().openapi({
|
|
|
+ description: '联系人姓名',
|
|
|
+ example: '张三'
|
|
|
+ }),
|
|
|
+ position: z.string().max(100).nullable().optional().openapi({
|
|
|
+ description: '联系人职位',
|
|
|
+ example: '经理'
|
|
|
+ }),
|
|
|
+ mobile: z.string().max(20).nullable().optional().openapi({
|
|
|
+ description: '联系人手机号码',
|
|
|
+ example: '13800138000'
|
|
|
+ }),
|
|
|
+ zipCode: z.string().max(20).nullable().optional().openapi({
|
|
|
+ description: '邮政编码',
|
|
|
+ example: '100080'
|
|
|
+ }),
|
|
|
+ telephone: z.string().max(20).nullable().optional().openapi({
|
|
|
+ description: '联系电话',
|
|
|
+ example: '010-12345678'
|
|
|
+ }),
|
|
|
+ fax: z.string().max(20).nullable().optional().openapi({
|
|
|
+ description: '传真号码',
|
|
|
+ example: '010-12345679'
|
|
|
+ }),
|
|
|
+ homepage: z.string().max(255).nullable().optional().openapi({
|
|
|
+ description: '公司主页网址',
|
|
|
+ example: 'https://www.example.com'
|
|
|
+ }),
|
|
|
+ email: z.string().max(100).nullable().optional().openapi({
|
|
|
+ description: '电子邮箱',
|
|
|
+ example: 'contact@example.com'
|
|
|
+ }),
|
|
|
+ industry: z.string().max(100).nullable().optional().openapi({
|
|
|
+ description: '所属行业',
|
|
|
+ example: '信息技术'
|
|
|
+ }),
|
|
|
+ subIndustry: z.string().max(100).nullable().optional().openapi({
|
|
|
+ description: '所属子行业',
|
|
|
+ example: '软件开发'
|
|
|
+ }),
|
|
|
+ customerType: z.string().max(50).nullable().optional().openapi({
|
|
|
+ description: '客户类型',
|
|
|
+ example: '重要客户'
|
|
|
+ }),
|
|
|
+ startDate: z.coerce.date().nullable().optional().openapi({
|
|
|
+ description: '合作起始日期',
|
|
|
+ example: '2023-01-01'
|
|
|
+ }),
|
|
|
+ source: z.string().max(100).nullable().optional().openapi({
|
|
|
+ description: '客户来源',
|
|
|
+ example: '展会'
|
|
|
+ }),
|
|
|
+ description: z.string().nullable().optional().openapi({
|
|
|
+ description: '客户详细信息',
|
|
|
+ example: '专注于人工智能领域的科技公司'
|
|
|
+ }),
|
|
|
+ responsibleUserId: z.number().int().positive().nullable().optional().openapi({
|
|
|
+ description: '负责人用户ID',
|
|
|
+ example: 1
|
|
|
+ }),
|
|
|
+ groupId: z.number().int().positive().nullable().optional().openapi({
|
|
|
+ description: '客户所属群组ID',
|
|
|
+ example: 1
|
|
|
+ }),
|
|
|
+ remarks: z.string().nullable().optional().openapi({
|
|
|
+ description: '客户备注信息',
|
|
|
+ example: '需要定期跟进'
|
|
|
+ }),
|
|
|
+ oldUserId: z.number().int().positive().nullable().optional().openapi({
|
|
|
+ description: '旧负责人用户ID',
|
|
|
+ example: 2
|
|
|
+ }),
|
|
|
+ lastUpdated: z.coerce.date().nullable().optional().openapi({
|
|
|
+ description: '最后更新时间',
|
|
|
+ example: '2023-01-10T00:00:00Z'
|
|
|
+ }),
|
|
|
+ shareStatus: z.number().int().min(0).max(1).optional().openapi({
|
|
|
+ description: '分享状态:0-未分享,1-已分享',
|
|
|
+ example: 0
|
|
|
+ }),
|
|
|
+ shareRange: z.number().int().nullable().optional().openapi({
|
|
|
+ description: '分享范围',
|
|
|
+ example: 1
|
|
|
+ }),
|
|
|
+ serviceLevel: z.number().int().nullable().optional().openapi({
|
|
|
+ description: '服务等级',
|
|
|
+ example: 2
|
|
|
+ }),
|
|
|
+ nextContactTime: z.coerce.date().nullable().optional().openapi({
|
|
|
+ description: '下次联系时间',
|
|
|
+ example: '2023-02-01T10:00:00Z'
|
|
|
+ }),
|
|
|
+ oeDate: z.coerce.date().nullable().optional().openapi({
|
|
|
+ description: 'OE日期',
|
|
|
+ example: '2023-03-01'
|
|
|
+ }),
|
|
|
+ heDate: z.coerce.date().nullable().optional().openapi({
|
|
|
+ description: 'HE日期',
|
|
|
+ example: '2023-04-01'
|
|
|
+ }),
|
|
|
+ zoneId: z.number().int().nullable().optional().openapi({
|
|
|
+ description: '区域标识',
|
|
|
+ example: 1
|
|
|
+ }),
|
|
|
+ isDeleted: z.number().int().min(0).max(1).optional().openapi({
|
|
|
+ description: '删除状态:0-未删除,1-已删除',
|
|
|
+ example: 0
|
|
|
+ }),
|
|
|
+ status: z.number().int().min(0).max(1).optional().openapi({
|
|
|
+ description: '客户状态:0-无效,1-有效',
|
|
|
+ example: 1
|
|
|
+ }),
|
|
|
+ auditStatus: z.number().int().min(0).max(2).optional().openapi({
|
|
|
+ description: '审核状态:0-待审核,1-已审核,2-已拒绝',
|
|
|
+ example: 0
|
|
|
+ })
|
|
|
+});
|