221 lines
5.9 KiB
TypeScript
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'
|
|
}
|