index.d.ts 5.04 KB
import type { AvatarProps } from '@nuxt/ui'
import type {
  DeviceType,
  DeviceTypeCategory,
  DeviceTypePayload
} from './device-type'
import type {
  WorkOrder,
  WorkOrderAuditEntry,
  WorkOrderAuditSummary,
  WorkOrderListQuery,
  WorkOrderMutationResponse,
  WorkOrderPayload,
  WorkOrderProgress,
  WorkOrderStatus,
  WorkOrderTransitionAction,
  WorkOrderTransitionPayload
} from './work-order'
import type {
  SnAction,
  SnActionPayload,
  SnAuditSummary,
  SnExceptionStatus,
  SnFlowEvent,
  SnImportPayload,
  SnImportResponse,
  SnItem,
  SnListQuery,
  SnMutationResponse,
  SnStatus
} from './sn'
import type {
  OperationTask,
  OperationTaskAction,
  OperationTaskActionPayload,
  OperationEvidenceUploadResponse,
  OperationTaskAuditEvent,
  OperationTaskListQuery,
  OperationTaskMutationResponse,
  OperationTaskResult,
  OperationTaskStatus
} from './operation'

export type UserStatus = 'subscribed' | 'unsubscribed' | 'bounced'
export type SaleStatus = 'paid' | 'failed' | 'refunded'

export interface User {
  id: number
  name: string
  email: string
  avatar?: AvatarProps
  status: UserStatus
  location: string
}

export interface Mail {
  id: number
  unread?: boolean
  from: User
  subject: string
  body: string
  date: string
}

export interface Member {
  name: string
  username: string
  role: 'member' | 'admin' | 'customer'
  avatar: AvatarProps
  email?: string
  bio?: string
}

export interface Stat {
  title: string
  icon: string
  value: number | string
  variation: number
  formatter?: (value: number) => string
}

export interface Sale {
  id: string
  date: string
  status: SaleStatus
  email: string
  amount: number
}

export interface Notification {
  id: number
  unread?: boolean
  sender: User
  body: string
  date: string
}

export type Period = 'daily' | 'weekly' | 'monthly'

export type DashboardWorkOrderStatus = 'pending_dispatch' | 'running' | 'pending_qc' | 'in_exception' | 'completed'

export type DashboardSnStatus = 'completed' | 'in_process' | 'frozen'

export interface DashboardOverviewQuery {
  start?: string
  end?: string
  line?: string
  workOrderStatus?: DashboardWorkOrderStatus
}

export interface DashboardWorkOrderMetrics {
  total: number
  running: number
  pendingQc: number
  inException: number
}

export interface DashboardSnMetrics {
  completed: number
  inProcess: number
  frozen: number
}

export interface DashboardQualityMetrics {
  firstPassRate: number
  retestPassRate: number
  exceptionRate: number
}

export interface DashboardOverviewWorkOrderItem {
  orderNo: string
  line: string
  status: DashboardWorkOrderStatus
  plannedDate: string
  completedSn: number
  totalSn: number
}

export interface DashboardOverviewResponse {
  query: DashboardOverviewQuery
  filters: {
    lines: string[]
    workOrderStatuses: DashboardWorkOrderStatus[]
  }
  workOrders: DashboardWorkOrderMetrics
  sn: DashboardSnMetrics
  quality: DashboardQualityMetrics
  latestWorkOrders: DashboardOverviewWorkOrderItem[]
}

export interface DashboardOverviewExportResponse {
  success: boolean
  errorCode: string | null
  message: string
  fileName?: string
  contentType?: string
  content?: string
}

export interface Range {
  start: Date
  end: Date
}

export interface AuthUser {
  id: number
  username: string
  name: string
  email: string
  roles: string[]
  station: string
  avatar?: AvatarProps
}

export interface LoginResponse {
  success: boolean
  state: 'authenticated' | 'failed'
  nextAction: 'enter_dashboard' | 'retry'
  errorCode: 'VALIDATION_ERROR' | 'INVALID_CREDENTIALS' | null
  message: string
  token?: string
  expiresAt?: string
  user?: AuthUser
}

export interface MeResponse {
  success: boolean
  state: 'authenticated' | 'failed'
  nextAction: 'continue' | 'relogin'
  errorCode: 'TOKEN_MISSING' | 'TOKEN_INVALID' | 'TOKEN_EXPIRED' | null
  message: string
  user?: AuthUser
}

export interface SettingsProfile {
  name: string
  email: string
  username: string
  avatar?: string
  bio?: string
}

export interface SettingsNotifications {
  email: boolean
  desktop: boolean
  product_updates: boolean
  weekly_digest: boolean
  important_updates: boolean
}

export interface SettingsMutationResponse {
  success: boolean
  errorCode: string | null
  message: string
}

export interface MemberProfileForm {
  name: string
  email: string
  username: string
  role: Member['role']
  avatar?: string
  bio?: string
}

export type {
  DeviceTypeCategory,
  DeviceType,
  DeviceTypePayload,
  SnStatus,
  SnExceptionStatus,
  SnAction,
  SnFlowEvent,
  SnAuditSummary,
  SnItem,
  SnListQuery,
  SnImportPayload,
  SnActionPayload,
  SnMutationResponse,
  SnImportResponse,
  OperationTask,
  OperationTaskStatus,
  OperationTaskResult,
  OperationTaskAction,
  OperationTaskAuditEvent,
  OperationTaskListQuery,
  OperationTaskActionPayload,
  OperationEvidenceUploadResponse,
  OperationTaskMutationResponse,
  WorkOrder,
  WorkOrderStatus,
  WorkOrderProgress,
  WorkOrderAuditSummary,
  WorkOrderAuditEntry,
  WorkOrderTransitionAction,
  WorkOrderListQuery,
  WorkOrderPayload,
  WorkOrderTransitionPayload,
  WorkOrderMutationResponse
}