export interface TcreateReq { id?: number title: string description: string labels: string[] createAddress?: string createIp?: string projectType: number[] categoryId?: number sourceType?: number categoryName?: string files: { id: number title: string fileId: number drawId: number type: number url: string sort: number }[] coverImages: { id: number title: string fileId: number drawId: number type: number url: string sort: number }[] points: number } export interface TpageReq { pageNum: number pageSize: number title?: string ownedUserId?: string labels?: string[] status?: number recommend?: boolean } export interface TpageRes { list: TpageItem[] total: number } export interface TpageItem { id: number title: string createTime: string labels: string[] status: number recommend: boolean points: number iconUrl: string hotPoint: number description: string previewPoint: number previewUrl: string previewImageUrl: string commentsPoint: number ownedUserId: string } export interface ProjectResourceRespVO { id: number title: string labels: string[] createAddress: string createIp: string projectType: number[] categoryId: number categoryName: string favoriteId?: number downloadId?: string sourceType: number ownedUserName?: string ownedUserAvatar?: string ownedUserIdInfo: { id: number nickName: string avatar: string } files: { id: number title: string fileId: number drawId: number type: number url: string sort: number size: number }[] coverImages: { id: number title: string fileId: number drawId: number type: number url: string sort: number size: number }[] points: number createTime: string updateTime: string status: number recommend: boolean iconUrl: string hotPoint: number description: string previewPoint: number previewUrl: string previewImageUrl: string commentsPoint: number ownedUserId: string }