diff --git a/src/api/maintenance-plan.ts b/src/api/maintenance-plan.ts index 09d2cef5..1a5e22a4 100644 --- a/src/api/maintenance-plan.ts +++ b/src/api/maintenance-plan.ts @@ -3,7 +3,7 @@ import type { ApiResponse } from '@/types' // ==================== 维保计划类型 ==================== export type PlanType = 'PREVENTIVE' | 'CORRECTIVE' -export type PlanStatus = 'ACTIVE' | 'INACTIVE' +export type PlanStatus = 'ACTIVE' | 'INACTIVE' | 'SUSPENDED' export interface MaintenancePlan { id?: string @@ -71,5 +71,6 @@ export const PLAN_TYPE_OPTIONS = [ export const PLAN_STATUS_OPTIONS = [ { value: 'ACTIVE', label: '启用' }, - { value: 'INACTIVE', label: '停用' } + { value: 'INACTIVE', label: '停用' }, + { value: 'SUSPENDED', label: '暂停' } ] \ No newline at end of file diff --git a/src/api/maintenance.ts b/src/api/maintenance.ts index 084bb062..f8bae75d 100644 --- a/src/api/maintenance.ts +++ b/src/api/maintenance.ts @@ -8,7 +8,7 @@ export interface MaintenancePlan { name: string projectId: string projectName?: string - triggerType: 'MANUAL' | 'SCHEDULED' | 'AUTOMATIC' + triggerType: 'PLAN' | 'INSPECTION' | 'FAULT' | 'MANUAL' equipmentId?: string equipmentName?: string spaceNodeId?: string @@ -25,7 +25,7 @@ export interface MaintenancePlanForm { id?: string name: string projectId: string - triggerType: 'MANUAL' | 'SCHEDULED' | 'AUTOMATIC' + triggerType: 'PLAN' | 'INSPECTION' | 'FAULT' | 'MANUAL' equipmentId?: string spaceNodeId?: string description?: string @@ -35,7 +35,7 @@ export interface MaintenancePlanForm { // ==================== 维保任务相关类型 ==================== -export type TaskStatus = 'PENDING' | 'ACCEPTED' | 'IN_PROGRESS' | 'COMPLETED' | 'CANCELLED' +export type TaskStatus = 'PENDING' | 'ASSIGNED' | 'IN_PROGRESS' | 'COMPLETED' | 'VERIFIED' | 'CANCELLED' export interface MaintenanceTask { id: string diff --git a/src/api/work-order.ts b/src/api/work-order.ts index 0b212531..6faf2cb3 100644 --- a/src/api/work-order.ts +++ b/src/api/work-order.ts @@ -5,7 +5,7 @@ import type { ApiResponse } from '@/types' export type WorkOrderSource = 'OWNER' | 'MAINTENANCE' | 'INSPECTION' | 'FAULT' | 'REGULATORY' | 'MANUAL' export type WorkOrderType = 'REPAIR' | 'INSPECTION' | 'SECURITY' | 'CLEANING' | 'PROPERTY' | 'CONSULTATION' export type WorkOrderPriority = 'LOW' | 'MEDIUM' | 'HIGH' | 'URGENT' -export type WorkOrderStatus = 'PENDING' | 'ASSIGNED' | 'IN_PROGRESS' | 'COMPLETED' | 'VERIFIED' | 'CANCELLED' +export type WorkOrderStatus = 'PENDING' | 'ASSIGNED' | 'IN_PROGRESS' | 'SUSPENDED' | 'RETURNED' | 'COMPLETED' | 'VERIFIED' | 'CANCELLED' export type TriggerType = 'PLAN' | 'INSPECTION' | 'FAULT' | 'MANUAL' export interface WorkOrderItem { @@ -70,6 +70,8 @@ export interface WorkOrderStats { completed: number verified: number cancelled: number + suspended: number + returned: number completedToday: number createdToday: number overdue: number @@ -80,6 +82,16 @@ export interface WorkOrderStats { byPriority: Record } +export interface PageResponse { + content: T[] + page: number + size: number + totalElements: number + totalPages: number + first: boolean + last: boolean +} + // ==================== API 函数 ==================== export function getWorkOrders(params?: { projectId?: string @@ -87,9 +99,13 @@ export function getWorkOrders(params?: { source?: WorkOrderSource type?: WorkOrderType status?: WorkOrderStatus + priority?: WorkOrderPriority assignedTo?: string + keyword?: string + page?: number + size?: number }) { - return request.get>('/api/wo/work-orders', { params }) + return request.get>>('/api/wo/work-orders', { params }) } export function getWorkOrder(id: string) { @@ -128,6 +144,18 @@ export function cancelWorkOrder(id: string) { return request.post(`/api/wo/work-orders/${id}/cancel`) } +export function suspendWorkOrder(id: string) { + return request.post(`/api/wo/work-orders/${id}/suspend`) +} + +export function resumeWorkOrder(id: string) { + return request.post(`/api/wo/work-orders/${id}/resume`) +} + +export function returnWorkOrder(id: string) { + return request.post(`/api/wo/work-orders/${id}/return`) +} + export function getWorkOrderStats() { return request.get>('/api/wo/work-orders/stats') } @@ -170,6 +198,8 @@ export const STATUS_OPTIONS = [ { value: 'PENDING', label: '待分配' }, { value: 'ASSIGNED', label: '已派单' }, { value: 'IN_PROGRESS', label: '执行中' }, + { value: 'SUSPENDED', label: '已挂起' }, + { value: 'RETURNED', label: '已退回' }, { value: 'COMPLETED', label: '已完成' }, { value: 'VERIFIED', label: '已验收' }, { value: 'CANCELLED', label: '已取消' } @@ -179,6 +209,8 @@ export const STATUS_COLOR_MAP: Record = { 'PENDING': 'default', 'ASSIGNED': 'blue', 'IN_PROGRESS': 'orange', + 'SUSPENDED': 'purple', + 'RETURNED': 'volcano', 'COMPLETED': 'green', 'VERIFIED': 'cyan', 'CANCELLED': 'red' diff --git a/src/types/index.ts b/src/types/index.ts index 31262eb2..f0868f20 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -81,10 +81,14 @@ export interface Permission { code: string name: string type: string + path?: string + component?: string + icon?: string resource?: string method?: string description?: string sortOrder?: number + visible?: boolean } export interface Project { diff --git a/src/types/space.ts b/src/types/space.ts index 3d3c10e7..231895f2 100644 --- a/src/types/space.ts +++ b/src/types/space.ts @@ -87,6 +87,7 @@ export interface SpaceNodeTree extends SpaceNode { export interface SpaceNodeCreateForm { projectId: string + code?: string name: string fullName?: string shortName?: string diff --git a/src/views/Dashboard.vue b/src/views/Dashboard.vue index 004bd287..d6faf929 100644 --- a/src/views/Dashboard.vue +++ b/src/views/Dashboard.vue @@ -116,9 +116,12 @@ const fetchDashboardData = async () => { // 获取待处理工单 const workOrderRes = await getWorkOrders({ - status: 'PENDING' - }).catch(() => ({ data: { data: [] } })) - pendingWorkOrders.value = (workOrderRes.data?.data || []).slice(0, 5) + status: 'PENDING', + page: 0, + size: 5 + }).catch(() => ({ data: { data: { content: [], totalElements: 0 } } })) + const workOrderPageData = workOrderRes.data?.data + pendingWorkOrders.value = (workOrderPageData?.content || workOrderPageData || []).slice(0, 5) // 获取本周工单统计数据(模拟7天数据) const today = new Date() diff --git a/src/views/equipment/MaintenancePlan.vue b/src/views/equipment/MaintenancePlan.vue index b3791ea3..610d22db 100644 --- a/src/views/equipment/MaintenancePlan.vue +++ b/src/views/equipment/MaintenancePlan.vue @@ -54,7 +54,9 @@ const getPlanStatusLabel = (status: PlanStatus | undefined) => { // 获取计划状态颜色 const getPlanStatusColor = (status: PlanStatus | undefined) => { if (!status) return 'default' - return status === 'ACTIVE' ? 'green' : 'red' + if (status === 'ACTIVE') return 'green' + if (status === 'SUSPENDED') return 'orange' + return 'red' } // 表格列定义 diff --git a/src/views/maintenance/PlanList.vue b/src/views/maintenance/PlanList.vue index 86e5aca6..39701415 100644 --- a/src/views/maintenance/PlanList.vue +++ b/src/views/maintenance/PlanList.vue @@ -21,9 +21,10 @@ import { getProjectSelectorList } from '@/api/project' // 触发类型映射 const triggerTypeMap: Record = { - MANUAL: { text: '手动', color: 'default' }, - SCHEDULED: { text: '定时', color: 'blue' }, - AUTOMATIC: { text: '自动', color: 'green' } + PLAN: { text: '计划触发', color: 'blue' }, + INSPECTION: { text: '巡检触发', color: 'cyan' }, + FAULT: { text: '故障触发', color: 'red' }, + MANUAL: { text: '手动创建', color: 'default' } } // 表格列定义 @@ -43,9 +44,10 @@ const projectOptions = ref<{ value: string; label: string }[]>([]) // 触发类型选项 const triggerTypeOptions = [ - { value: 'MANUAL', label: '手动' }, - { value: 'SCHEDULED', label: '定时' }, - { value: 'AUTOMATIC', label: '自动' } + { value: 'PLAN', label: '计划触发' }, + { value: 'INSPECTION', label: '巡检触发' }, + { value: 'FAULT', label: '故障触发' }, + { value: 'MANUAL', label: '手动创建' } ] // 查询参数 @@ -73,7 +75,7 @@ const editingPlan = ref(null) const formState = reactive>({ name: '', projectId: '', - triggerType: 'MANUAL', + triggerType: 'PLAN', equipmentId: undefined, spaceNodeId: undefined, description: '', @@ -140,7 +142,7 @@ const handleAdd = () => { modalTitle.value = '新建维保计划' formState.name = '' formState.projectId = queryParams.projectId - formState.triggerType = 'MANUAL' + formState.triggerType = 'PLAN' formState.equipmentId = undefined formState.spaceNodeId = undefined formState.description = '' diff --git a/src/views/maintenance/TaskList.vue b/src/views/maintenance/TaskList.vue index df950438..932a19ea 100644 --- a/src/views/maintenance/TaskList.vue +++ b/src/views/maintenance/TaskList.vue @@ -24,10 +24,11 @@ import { getProjectSelectorList } from '@/api/project' // 任务状态映射 const statusMap: Record = { - PENDING: { text: '待接受', color: 'default', status: 'default' }, - ACCEPTED: { text: '已接受', color: 'blue', status: 'processing' }, + PENDING: { text: '待分配', color: 'default', status: 'default' }, + ASSIGNED: { text: '已派单', color: 'blue', status: 'processing' }, IN_PROGRESS: { text: '进行中', color: 'processing', status: 'processing' }, COMPLETED: { text: '已完成', color: 'success', status: 'success' }, + VERIFIED: { text: '已验收', color: 'success', status: 'success' }, CANCELLED: { text: '已取消', color: 'error', status: 'error' } } @@ -49,11 +50,12 @@ const projectOptions = ref<{ value: string; label: string }[]>([]) // 状态选项 const statusOptions = [ - { value: 'PENDING', label: '待接受' }, - { value: 'ACCEPTED', label: '已接受' }, + { value: 'PENDING', label: '待分配' }, + { value: 'ASSIGNED', label: '已派单' }, { value: 'IN_PROGRESS', label: '进行中' }, { value: 'COMPLETED', label: '已完成' }, - { value: 'CANCELLED', label: '取消' } + { value: 'VERIFIED', label: '已验收' }, + { value: 'CANCELLED', label: '已取消' } ] // 查询参数 @@ -304,11 +306,10 @@ onMounted(() => { size="small" @click="handleAccept(record.id)" > - 接受 + 派单 - - + + + -