gongxiangp2/types/work-review.ts

148 lines
3.0 KiB
TypeScript

export type WorkReviewStatus = 'pending_review' | 'revision_required' | 'approved'
export type WorkReviewRole = 'manager' | 'final_reviewer'
export type WorkReviewDecision = 'approved' | 'revision_required'
export type WorkReviewImageSlice = {
url: string
width: number
height: number
}
export type WorkReviewImageGroup = {
version?: number
imageId?: string
sourceName: string
sourceWidth?: number
sourceHeight?: number
previewUrl: string
previewWidth: number
previewHeight: number
width: number
height: number
slices: WorkReviewImageSlice[]
}
export type WorkReviewImageComment = {
imageId?: string
imageIndex: number
sourceName?: string
decision: WorkReviewDecision
comment: string
}
export type WorkReviewReview = {
id: string
reviewerRole: WorkReviewRole
reviewerName: string
decision: WorkReviewDecision
imageComments: WorkReviewImageComment[]
generalComment: string | null
reviewedAt: string
}
export type WorkReviewVersion = {
id: string
version: number
submissionNote: string | null
status: WorkReviewStatus
submittedAt: string
completedAt: string | null
imageUrls: string[]
imageGroups: WorkReviewImageGroup[]
reviews: WorkReviewReview[]
}
export type WorkReviewPerson = {
id: string
name: string
}
export type WorkReviewProject = {
id: string
title: string
description: string | null
workDate: string
status: WorkReviewStatus
latestVersion: number
submitter: WorkReviewPerson & {
snapshot?: Record<string, unknown> | null
}
manager: WorkReviewPerson
finalReviewer: WorkReviewPerson
createdAt: string
updatedAt: string
versions: WorkReviewVersion[]
permissions: {
canResubmit: boolean
pendingReviewRoles: WorkReviewRole[]
}
}
export type WorkReviewMe = {
user: {
id: string
name: string
avatar: string | null
role: string
}
employee: {
id: string
displayName: string
flowerName?: string | null
realName?: string | null
departmentName?: string | null
positionTitle?: string | null
positionLevel?: string | null
levelType?: string | null
} | null
permissions: {
canSubmit: boolean
isSystemAdmin: boolean
isManager: boolean
isFinalReviewer: boolean
}
}
export type WorkReviewBoardData = {
me: WorkReviewMe
items: WorkReviewProject[]
pagination: {
page: number
pageSize: number
total: number
totalPages: number
}
}
export type WorkReviewProcessedImage = {
uploadId: string
mimeType: 'image/webp'
width: number
height: number
kind: 'slice' | 'preview'
sourceName: string
sourceIndex: number
sliceIndex: number
sliceCount: number
}
export type WorkReviewSubmissionInput = {
title?: string
description?: string
workDate?: string
submissionNote?: string
processedImages: WorkReviewProcessedImage[]
}
export type WorkReviewReviewInput = {
reviewerRole: WorkReviewRole
imageComments: Array<{
imageIndex: number
decision: WorkReviewDecision
comment: string
}>
generalComment: string
}