ether-admin/src/api/maintenance-task.ts

221 lines
5.9 KiB
TypeScript

import request from '@/utils/request'
// ==================== 维保工单类型 ====================
export type TaskType = 'PREVENTIVE' | 'CORRECTIVE' | 'EMERGENCY'
export type TaskPriority = 'LOW' | 'MEDIUM' | 'HIGH' | 'URGENT'
export type TaskStatus = 'PENDING' | 'ASSIGNED' | 'IN_PROGRESS' | 'COMPLETED' | 'VERIFIED' | 'CANCELLED'
export type TriggerType = 'PLAN' | 'INSPECTION' | 'FAULT' | 'MANUAL'
export interface PartsUsed {
partsId?: string
partsName: string
quantity: number
unitPrice: number
totalPrice: number
}
export interface MaintenanceTask {
id?: string
taskNo?: string
planId?: string
equipmentId: string
equipmentName?: string
projectId?: string
taskType: TaskType
triggerType?: TriggerType
priority: TaskPriority
status: TaskStatus
title: string
description?: string
assignedTo?: string
assignedVendor?: string
assignedDate?: string
actualStart?: string
actualEnd?: string
actualHours?: number
faultCause?: string
solution?: string
result?: string
partsUsed?: PartsUsed[]
laborCost?: number
partsCost?: number
totalCost?: number
completedBy?: string
completedDate?: string
verifiedBy?: string
verifiedDate?: string
rating?: number
remark?: string
photos?: string[]
signature?: string
createdBy?: string
createdAt?: string
updatedAt?: string
}
export interface MaintenanceTaskForm {
id?: string
planId?: string
equipmentId: string
taskType: TaskType
triggerType?: TriggerType
priority: TaskPriority
title: string
description?: string
assignedTo?: string
assignedVendor?: string
remark?: string
}
export interface CompleteTaskData {
actualHours?: number
faultCause?: string
solution?: string
result?: string
partsUsed?: PartsUsed[]
laborCost?: number
partsCost?: number
photos?: string[]
signature?: string
completedBy?: string
}
export interface VerifyTaskData {
verifiedBy: string
remark?: string
rating?: number
}
// ==================== 维保工单 API ====================
// 获取维保工单列表
export function getMaintenanceTasks(projectId?: string) {
return request.get<MaintenanceTask[]>(`/api/ops/maintenance-tasks`, {
params: { projectId }
})
}
// 根据状态获取维保工单列表
export function getMaintenanceTasksByStatus(status: TaskStatus) {
return request.get<MaintenanceTask[]>(`/api/ops/maintenance-tasks`, {
params: { status }
})
}
// 获取维保工单详情
export function getMaintenanceTask(id: string) {
return request.get<MaintenanceTask>(`/api/ops/maintenance-tasks/${id}`)
}
// 创建维保工单
export function createMaintenanceTask(data: MaintenanceTaskForm) {
return request.post<MaintenanceTask>('/api/ops/maintenance-tasks', data)
}
// 更新维保工单
export function updateMaintenanceTask(id: string, data: Partial<MaintenanceTaskForm>) {
return request.put<MaintenanceTask>(`/api/ops/maintenance-tasks/${id}`, data)
}
// 删除维保工单
export function deleteMaintenanceTask(id: string) {
return request.delete<void>(`/api/ops/maintenance-tasks/${id}`)
}
// 状态流转 API
export function assignTask(id: string, assignedTo: string, assignedDate?: string) {
return request.post(`/api/ops/maintenance-tasks/${id}/assign`, { assignedTo, assignedDate })
}
export function startTask(id: string) {
return request.post(`/api/ops/maintenance-tasks/${id}/start`)
}
export function completeTask(id: string, data: { result?: string; actualHours?: number; cost?: number; completedBy?: string }) {
return request.post(`/api/ops/maintenance-tasks/${id}/complete`, data)
}
export function completeTaskWithDetails(id: string, data: CompleteTaskData) {
return request.post(`/api/ops/maintenance-tasks/${id}/complete-details`, data)
}
export function verifyTask(id: string, data: VerifyTaskData) {
return request.post(`/api/ops/maintenance-tasks/${id}/verify`, data)
}
export function cancelTask(id: string) {
return request.post(`/api/ops/maintenance-tasks/${id}/cancel`)
}
export function rateTask(id: string, rating: number) {
return request.post(`/api/ops/maintenance-tasks/${id}/rate`, null, { params: { rating } })
}
// 获取工单统计
export function getMaintenanceTaskStats() {
return request.get<{
total: number
pending: number
assigned: number
inProgress: number
completed: number
verified: number
cancelled: number
completedToday: number
createdToday: number
overdue: number
avgCompleteHours: number
avgRating: number
byPriority: Record<string, number>
byTriggerType: Record<string, number>
}>('/api/ops/maintenance-tasks/stats')
}
// ==================== 常量选项 ====================
export const TASK_TYPE_OPTIONS = [
{ value: 'PREVENTIVE', label: '预防性维护' },
{ value: 'CORRECTIVE', label: '纠正性维护' },
{ value: 'EMERGENCY', label: '紧急维修' }
]
export const TRIGGER_TYPE_OPTIONS = [
{ value: 'PLAN', label: '计划触发' },
{ value: 'INSPECTION', label: '巡检触发' },
{ value: 'FAULT', label: '故障触发' },
{ value: 'MANUAL', label: '手动创建' }
]
export const TASK_PRIORITY_OPTIONS = [
{ value: 'LOW', label: '低' },
{ value: 'MEDIUM', label: '中' },
{ value: 'HIGH', label: '高' },
{ value: 'URGENT', label: '紧急' }
]
export const TASK_STATUS_OPTIONS = [
{ value: 'PENDING', label: '待分配' },
{ value: 'ASSIGNED', label: '已派单' },
{ value: 'IN_PROGRESS', label: '执行中' },
{ value: 'COMPLETED', label: '已完成' },
{ value: 'VERIFIED', label: '已验收' },
{ value: 'CANCELLED', label: '已取消' }
]
// 状态颜色映射
export const STATUS_COLOR_MAP: Record<TaskStatus, string> = {
'PENDING': 'default',
'ASSIGNED': 'blue',
'IN_PROGRESS': 'orange',
'COMPLETED': 'green',
'VERIFIED': 'cyan',
'CANCELLED': 'red'
}
// 优先级颜色映射
export const PRIORITY_COLOR_MAP: Record<TaskPriority, string> = {
'LOW': 'green',
'MEDIUM': 'blue',
'HIGH': 'orange',
'URGENT': 'red'
}