refactor: 更新任务表单组件以简化参数处理,优化任务上下文以支持新的API端点配置

This commit is contained in:
xudan 2025-07-23 11:46:00 +08:00
parent 6aff5dd0c8
commit b3d0a91f93
7 changed files with 68 additions and 771 deletions

View File

@ -26,4 +26,4 @@ This is a React Native application for task management.
The root component of the application is `App.tsx`, which sets up the `ThemeProvider`, `TasksProvider`, and `NavigationContainer`.
# 请你检查 读取文件后,是否发送请求给 AI 大模型了
# 请你检查 读取文件,准备编辑文件后,是否发送请求给 AI 大模型了

View File

@ -36,674 +36,10 @@
{ "label": "充电", "value": "CHARGE" },
{ "label": "清洁", "value": "CLEAN" }
],
"tasks": [
{
"id": "task-001",
"name": "炉前缓存区到热处理上料交接区运输",
"status": "IDLE",
"createdAt": "2024-01-15T08:30:00.000Z",
"parameters": {
"startLocation": {
"label": "起点",
"type": "Select",
"value": "FURNACE_BUFFER",
"required": true,
"options": [
{ "label": "AP-1", "value": "AP-1" },
{ "label": "AP-2", "value": "AP-2" },
{ "label": "AP-3", "value": "AP-3" },
{ "label": "AP-4", "value": "AP-4" },
{ "label": "AP-5", "value": "AP-5" },
{ "label": "炉前缓存区", "value": "FURNACE_BUFFER" },
{ "label": "热处理上料交接区", "value": "HEAT_TREATMENT_LOADING" },
{ "label": "成品存储区", "value": "FINISHED_STORAGE" },
{ "label": "原料仓库", "value": "RAW_MATERIAL_WAREHOUSE" },
{ "label": "质检区", "value": "QUALITY_INSPECTION" }
]
},
"endLocation": {
"label": "终点",
"type": "Select",
"value": "HEAT_TREATMENT_LOADING",
"required": true,
"options": [
{ "label": "AP-1", "value": "AP-1" },
{ "label": "AP-2", "value": "AP-2" },
{ "label": "AP-3", "value": "AP-3" },
{ "label": "AP-4", "value": "AP-4" },
{ "label": "AP-5", "value": "AP-5" },
{ "label": "炉前缓存区", "value": "FURNACE_BUFFER" },
{ "label": "热处理上料交接区", "value": "HEAT_TREATMENT_LOADING" },
{ "label": "成品存储区", "value": "FINISHED_STORAGE" },
{ "label": "原料仓库", "value": "RAW_MATERIAL_WAREHOUSE" },
{ "label": "质检区", "value": "QUALITY_INSPECTION" }
]
},
"robotAction": {
"label": "机器人动作",
"type": "Select",
"value": "TRANSPORT",
"required": true,
"options": [
{ "label": "运输", "value": "TRANSPORT" },
{ "label": "取货", "value": "PICKUP" },
{ "label": "卸货", "value": "DROPOFF" },
{ "label": "等待", "value": "WAIT" },
{ "label": "充电", "value": "CHARGE" },
{ "label": "清洁", "value": "CLEAN" }
]
},
"payload": {
"label": "载荷",
"type": "Select",
"value": "满料架-A1",
"required": false,
"options": [
{ "label": "满料架-A1", "value": "满料架-A1" },
{ "label": "满料架-A2", "value": "满料架-A2" },
{ "label": "空料架-B1", "value": "空料架-B1" },
{ "label": "空料架-B2", "value": "空料架-B2" },
{ "label": "空车", "value": "空车" },
{ "label": "钢材-Q235", "value": "钢材-Q235" },
{ "label": "铝合金-6061", "value": "铝合金-6061" }
]
},
"locationBay": {
"label": "库位",
"type": "Select",
"value": "AS2_2_001",
"required": false,
"options": [
{ "label": "AS2_2_001", "value": "AS2_2_001" },
{ "label": "AS2_2_002", "value": "AS2_2_002" },
{ "label": "AS2_2_003", "value": "AS2_2_003" },
{ "label": "AS2_2_004", "value": "AS2_2_004" },
{ "label": "AS2_2_005", "value": "AS2_2_005" }
]
"serverUrl": "http://192.168.189.206:8000",
"apiEndpoints": {
"getTasks": "/api/vwed-task/list",
"getTaskDetail": "/api/vwed-task/{taskId}",
"runTask": "/api/vwed-task/execute/{taskId}"
}
}
},
{
"id": "task-002",
"name": "原料仓库到质检区取货",
"status": "IDLE",
"createdAt": "2024-01-15T09:15:00.000Z",
"parameters": {
"startLocation": {
"label": "起点",
"type": "Select",
"value": "RAW_MATERIAL_WAREHOUSE",
"required": true,
"options": [
{ "label": "AP-1", "value": "AP-1" },
{ "label": "AP-2", "value": "AP-2" },
{ "label": "AP-3", "value": "AP-3" },
{ "label": "AP-4", "value": "AP-4" },
{ "label": "AP-5", "value": "AP-5" },
{ "label": "炉前缓存区", "value": "FURNACE_BUFFER" },
{ "label": "热处理上料交接区", "value": "HEAT_TREATMENT_LOADING" },
{ "label": "成品存储区", "value": "FINISHED_STORAGE" },
{ "label": "原料仓库", "value": "RAW_MATERIAL_WAREHOUSE" },
{ "label": "质检区", "value": "QUALITY_INSPECTION" }
]
},
"endLocation": {
"label": "终点",
"type": "Select",
"value": "QUALITY_INSPECTION",
"required": true,
"options": [
{ "label": "AP-1", "value": "AP-1" },
{ "label": "AP-2", "value": "AP-2" },
{ "label": "AP-3", "value": "AP-3" },
{ "label": "AP-4", "value": "AP-4" },
{ "label": "AP-5", "value": "AP-5" },
{ "label": "炉前缓存区", "value": "FURNACE_BUFFER" },
{ "label": "热处理上料交接区", "value": "HEAT_TREATMENT_LOADING" },
{ "label": "成品存储区", "value": "FINISHED_STORAGE" },
{ "label": "原料仓库", "value": "RAW_MATERIAL_WAREHOUSE" },
{ "label": "质检区", "value": "QUALITY_INSPECTION" }
]
},
"robotAction": {
"label": "机器人动作",
"type": "Select",
"value": "PICKUP",
"required": true,
"options": [
{ "label": "运输", "value": "TRANSPORT" },
{ "label": "取货", "value": "PICKUP" },
{ "label": "卸货", "value": "DROPOFF" },
{ "label": "等待", "value": "WAIT" },
{ "label": "充电", "value": "CHARGE" },
{ "label": "清洁", "value": "CLEAN" }
]
},
"payload": {
"label": "载荷",
"type": "Select",
"value": "钢材-Q235",
"required": false,
"options": [
{ "label": "满料架-A1", "value": "满料架-A1" },
{ "label": "满料架-A2", "value": "满料架-A2" },
{ "label": "空料架-B1", "value": "空料架-B1" },
{ "label": "空料架-B2", "value": "空料架-B2" },
{ "label": "空车", "value": "空车" },
{ "label": "钢材-Q235", "value": "钢材-Q235" },
{ "label": "铝合金-6061", "value": "铝合金-6061" }
]
},
"locationBay": {
"label": "库位",
"type": "Select",
"value": "AS2_2_002",
"required": false,
"options": [
{ "label": "AS2_2_001", "value": "AS2_2_001" },
{ "label": "AS2_2_002", "value": "AS2_2_002" },
{ "label": "AS2_2_003", "value": "AS2_2_003" },
{ "label": "AS2_2_004", "value": "AS2_2_004" },
{ "label": "AS2_2_005", "value": "AS2_2_005" }
]
}
}
},
{
"id": "task-003",
"name": "质检区到成品存储区卸货",
"status": "COMPLETED",
"createdAt": "2024-01-15T10:00:00.000Z",
"parameters": {
"startLocation": {
"label": "起点",
"type": "Select",
"value": "QUALITY_INSPECTION",
"required": true,
"options": [
{ "label": "AP-1", "value": "AP-1" },
{ "label": "AP-2", "value": "AP-2" },
{ "label": "AP-3", "value": "AP-3" },
{ "label": "AP-4", "value": "AP-4" },
{ "label": "AP-5", "value": "AP-5" },
{ "label": "炉前缓存区", "value": "FURNACE_BUFFER" },
{ "label": "热处理上料交接区", "value": "HEAT_TREATMENT_LOADING" },
{ "label": "成品存储区", "value": "FINISHED_STORAGE" },
{ "label": "原料仓库", "value": "RAW_MATERIAL_WAREHOUSE" },
{ "label": "质检区", "value": "QUALITY_INSPECTION" }
]
},
"endLocation": {
"label": "终点",
"type": "Select",
"value": "FINISHED_STORAGE",
"required": true,
"options": [
{ "label": "AP-1", "value": "AP-1" },
{ "label": "AP-2", "value": "AP-2" },
{ "label": "AP-3", "value": "AP-3" },
{ "label": "AP-4", "value": "AP-4" },
{ "label": "AP-5", "value": "AP-5" },
{ "label": "炉前缓存区", "value": "FURNACE_BUFFER" },
{ "label": "热处理上料交接区", "value": "HEAT_TREATMENT_LOADING" },
{ "label": "成品存储区", "value": "FINISHED_STORAGE" },
{ "label": "原料仓库", "value": "RAW_MATERIAL_WAREHOUSE" },
{ "label": "质检区", "value": "QUALITY_INSPECTION" }
]
},
"robotAction": {
"label": "机器人动作",
"type": "Select",
"value": "DROPOFF",
"required": true,
"options": [
{ "label": "运输", "value": "TRANSPORT" },
{ "label": "取货", "value": "PICKUP" },
{ "label": "卸货", "value": "DROPOFF" },
{ "label": "等待", "value": "WAIT" },
{ "label": "充电", "value": "CHARGE" },
{ "label": "清洁", "value": "CLEAN" }
]
},
"payload": {
"label": "载荷",
"type": "Select",
"value": "铝合金-6061",
"required": false,
"options": [
{ "label": "满料架-A1", "value": "满料架-A1" },
{ "label": "满料架-A2", "value": "满料架-A2" },
{ "label": "空料架-B1", "value": "空料架-B1" },
{ "label": "空料架-B2", "value": "空料架-B2" },
{ "label": "空车", "value": "空车" },
{ "label": "钢材-Q235", "value": "钢材-Q235" },
{ "label": "铝合金-6061", "value": "铝合金-6061" }
]
},
"locationBay": {
"label": "库位",
"type": "Select",
"value": "AS2_2_003",
"required": false,
"options": [
{ "label": "AS2_2_001", "value": "AS2_2_001" },
{ "label": "AS2_2_002", "value": "AS2_2_002" },
{ "label": "AS2_2_003", "value": "AS2_2_003" },
{ "label": "AS2_2_004", "value": "AS2_2_004" },
{ "label": "AS2_2_005", "value": "AS2_2_005" }
]
}
}
},
{
"id": "task-004",
"name": "AP-1到AP-2空车运输",
"status": "IDLE",
"createdAt": "2024-01-15T11:30:00.000Z",
"parameters": {
"startLocation": {
"label": "起点",
"type": "Select",
"value": "AP-1",
"required": true,
"options": [
{ "label": "AP-1", "value": "AP-1" },
{ "label": "AP-2", "value": "AP-2" },
{ "label": "AP-3", "value": "AP-3" },
{ "label": "AP-4", "value": "AP-4" },
{ "label": "AP-5", "value": "AP-5" },
{ "label": "炉前缓存区", "value": "FURNACE_BUFFER" },
{ "label": "热处理上料交接区", "value": "HEAT_TREATMENT_LOADING" },
{ "label": "成品存储区", "value": "FINISHED_STORAGE" },
{ "label": "原料仓库", "value": "RAW_MATERIAL_WAREHOUSE" },
{ "label": "质检区", "value": "QUALITY_INSPECTION" }
]
},
"endLocation": {
"label": "终点",
"type": "Select",
"value": "AP-2",
"required": true,
"options": [
{ "label": "AP-1", "value": "AP-1" },
{ "label": "AP-2", "value": "AP-2" },
{ "label": "AP-3", "value": "AP-3" },
{ "label": "AP-4", "value": "AP-4" },
{ "label": "AP-5", "value": "AP-5" },
{ "label": "炉前缓存区", "value": "FURNACE_BUFFER" },
{ "label": "热处理上料交接区", "value": "HEAT_TREATMENT_LOADING" },
{ "label": "成品存储区", "value": "FINISHED_STORAGE" },
{ "label": "原料仓库", "value": "RAW_MATERIAL_WAREHOUSE" },
{ "label": "质检区", "value": "QUALITY_INSPECTION" }
]
},
"robotAction": {
"label": "机器人动作",
"type": "Select",
"value": "TRANSPORT",
"required": true,
"options": [
{ "label": "运输", "value": "TRANSPORT" },
{ "label": "取货", "value": "PICKUP" },
{ "label": "卸货", "value": "DROPOFF" },
{ "label": "等待", "value": "WAIT" },
{ "label": "充电", "value": "CHARGE" },
{ "label": "清洁", "value": "CLEAN" }
]
},
"payload": {
"label": "载荷",
"type": "Select",
"value": "空车",
"required": false,
"options": [
{ "label": "满料架-A1", "value": "满料架-A1" },
{ "label": "满料架-A2", "value": "满料架-A2" },
{ "label": "空料架-B1", "value": "空料架-B1" },
{ "label": "空料架-B2", "value": "空料架-B2" },
{ "label": "空车", "value": "空车" },
{ "label": "钢材-Q235", "value": "钢材-Q235" },
{ "label": "铝合金-6061", "value": "铝合金-6061" }
]
},
"locationBay": {
"label": "库位",
"type": "Select",
"value": "AS2_2_004",
"required": false,
"options": [
{ "label": "AS2_2_001", "value": "AS2_2_001" },
{ "label": "AS2_2_002", "value": "AS2_2_002" },
{ "label": "AS2_2_003", "value": "AS2_2_003" },
{ "label": "AS2_2_004", "value": "AS2_2_004" },
{ "label": "AS2_2_005", "value": "AS2_2_005" }
]
}
}
},
{
"id": "task-005",
"name": "机器人充电任务",
"status": "IDLE",
"createdAt": "2024-01-15T12:00:00.000Z",
"parameters": {
"startLocation": {
"label": "起点",
"type": "Select",
"value": "AP-3",
"required": true,
"options": [
{ "label": "AP-1", "value": "AP-1" },
{ "label": "AP-2", "value": "AP-2" },
{ "label": "AP-3", "value": "AP-3" },
{ "label": "AP-4", "value": "AP-4" },
{ "label": "AP-5", "value": "AP-5" },
{ "label": "炉前缓存区", "value": "FURNACE_BUFFER" },
{ "label": "热处理上料交接区", "value": "HEAT_TREATMENT_LOADING" },
{ "label": "成品存储区", "value": "FINISHED_STORAGE" },
{ "label": "原料仓库", "value": "RAW_MATERIAL_WAREHOUSE" },
{ "label": "质检区", "value": "QUALITY_INSPECTION" }
]
},
"endLocation": {
"label": "终点",
"type": "Select",
"value": "AP-3",
"required": true,
"options": [
{ "label": "AP-1", "value": "AP-1" },
{ "label": "AP-2", "value": "AP-2" },
{ "label": "AP-3", "value": "AP-3" },
{ "label": "AP-4", "value": "AP-4" },
{ "label": "AP-5", "value": "AP-5" },
{ "label": "炉前缓存区", "value": "FURNACE_BUFFER" },
{ "label": "热处理上料交接区", "value": "HEAT_TREATMENT_LOADING" },
{ "label": "成品存储区", "value": "FINISHED_STORAGE" },
{ "label": "原料仓库", "value": "RAW_MATERIAL_WAREHOUSE" },
{ "label": "质检区", "value": "QUALITY_INSPECTION" }
]
},
"robotAction": {
"label": "机器人动作",
"type": "Select",
"value": "CHARGE",
"required": true,
"options": [
{ "label": "运输", "value": "TRANSPORT" },
{ "label": "取货", "value": "PICKUP" },
{ "label": "卸货", "value": "DROPOFF" },
{ "label": "等待", "value": "WAIT" },
{ "label": "充电", "value": "CHARGE" },
{ "label": "清洁", "value": "CLEAN" }
]
},
"payload": {
"label": "载荷",
"type": "Select",
"value": "空车",
"required": false,
"options": [
{ "label": "满料架-A1", "value": "满料架-A1" },
{ "label": "满料架-A2", "value": "满料架-A2" },
{ "label": "空料架-B1", "value": "空料架-B1" },
{ "label": "空料架-B2", "value": "空料架-B2" },
{ "label": "空车", "value": "空车" },
{ "label": "钢材-Q235", "value": "钢材-Q235" },
{ "label": "铝合金-6061", "value": "铝合金-6061" }
]
}
}
},
{
"id": "task-006",
"name": "成品存储区清洁任务",
"status": "RUNNING",
"createdAt": "2024-01-15T13:15:00.000Z",
"parameters": {
"startLocation": {
"label": "起点",
"type": "Select",
"value": "FINISHED_STORAGE",
"required": true,
"options": [
{ "label": "AP-1", "value": "AP-1" },
{ "label": "AP-2", "value": "AP-2" },
{ "label": "AP-3", "value": "AP-3" },
{ "label": "AP-4", "value": "AP-4" },
{ "label": "AP-5", "value": "AP-5" },
{ "label": "炉前缓存区", "value": "FURNACE_BUFFER" },
{ "label": "热处理上料交接区", "value": "HEAT_TREATMENT_LOADING" },
{ "label": "成品存储区", "value": "FINISHED_STORAGE" },
{ "label": "原料仓库", "value": "RAW_MATERIAL_WAREHOUSE" },
{ "label": "质检区", "value": "QUALITY_INSPECTION" }
]
},
"endLocation": {
"label": "终点",
"type": "Select",
"value": "FINISHED_STORAGE",
"required": true,
"options": [
{ "label": "AP-1", "value": "AP-1" },
{ "label": "AP-2", "value": "AP-2" },
{ "label": "AP-3", "value": "AP-3" },
{ "label": "AP-4", "value": "AP-4" },
{ "label": "AP-5", "value": "AP-5" },
{ "label": "炉前缓存区", "value": "FURNACE_BUFFER" },
{ "label": "热处理上料交接区", "value": "HEAT_TREATMENT_LOADING" },
{ "label": "成品存储区", "value": "FINISHED_STORAGE" },
{ "label": "原料仓库", "value": "RAW_MATERIAL_WAREHOUSE" },
{ "label": "质检区", "value": "QUALITY_INSPECTION" }
]
},
"robotAction": {
"label": "机器人动作",
"type": "Select",
"value": "CLEAN",
"required": true,
"options": [
{ "label": "运输", "value": "TRANSPORT" },
{ "label": "取货", "value": "PICKUP" },
{ "label": "卸货", "value": "DROPOFF" },
{ "label": "等待", "value": "WAIT" },
{ "label": "充电", "value": "CHARGE" },
{ "label": "清洁", "value": "CLEAN" }
]
},
"payload": {
"label": "载荷",
"type": "Select",
"value": "空车",
"required": false,
"options": [
{ "label": "满料架-A1", "value": "满料架-A1" },
{ "label": "满料架-A2", "value": "满料架-A2" },
{ "label": "空料架-B1", "value": "空料架-B1" },
{ "label": "空料架-B2", "value": "空料架-B2" },
{ "label": "空车", "value": "空车" },
{ "label": "钢材-Q235", "value": "钢材-Q235" },
{ "label": "铝合金-6061", "value": "铝合金-6061" }
]
}
}
},
{
"id": "task-007",
"name": "满料架A2从原料仓库到AP-4运输",
"status": "IDLE",
"createdAt": "2024-01-15T14:20:00.000Z",
"parameters": {
"startLocation": {
"label": "起点",
"type": "Select",
"value": "RAW_MATERIAL_WAREHOUSE",
"required": true,
"options": [
{ "label": "AP-1", "value": "AP-1" },
{ "label": "AP-2", "value": "AP-2" },
{ "label": "AP-3", "value": "AP-3" },
{ "label": "AP-4", "value": "AP-4" },
{ "label": "AP-5", "value": "AP-5" },
{ "label": "炉前缓存区", "value": "FURNACE_BUFFER" },
{ "label": "热处理上料交接区", "value": "HEAT_TREATMENT_LOADING" },
{ "label": "成品存储区", "value": "FINISHED_STORAGE" },
{ "label": "原料仓库", "value": "RAW_MATERIAL_WAREHOUSE" },
{ "label": "质检区", "value": "QUALITY_INSPECTION" }
]
},
"endLocation": {
"label": "终点",
"type": "Select",
"value": "AP-4",
"required": true,
"options": [
{ "label": "AP-1", "value": "AP-1" },
{ "label": "AP-2", "value": "AP-2" },
{ "label": "AP-3", "value": "AP-3" },
{ "label": "AP-4", "value": "AP-4" },
{ "label": "AP-5", "value": "AP-5" },
{ "label": "炉前缓存区", "value": "FURNACE_BUFFER" },
{ "label": "热处理上料交接区", "value": "HEAT_TREATMENT_LOADING" },
{ "label": "成品存储区", "value": "FINISHED_STORAGE" },
{ "label": "原料仓库", "value": "RAW_MATERIAL_WAREHOUSE" },
{ "label": "质检区", "value": "QUALITY_INSPECTION" }
]
},
"waypoint": {
"label": "途经点",
"type": "Select",
"value": "QUALITY_INSPECTION",
"required": false,
"options": [
{ "label": "AP-1", "value": "AP-1" },
{ "label": "AP-2", "value": "AP-2" },
{ "label": "AP-3", "value": "AP-3" },
{ "label": "AP-4", "value": "AP-4" },
{ "label": "AP-5", "value": "AP-5" },
{ "label": "炉前缓存区", "value": "FURNACE_BUFFER" },
{ "label": "热处理上料交接区", "value": "HEAT_TREATMENT_LOADING" },
{ "label": "成品存储区", "value": "FINISHED_STORAGE" },
{ "label": "原料仓库", "value": "RAW_MATERIAL_WAREHOUSE" },
{ "label": "质检区", "value": "QUALITY_INSPECTION" }
]
},
"robotAction": {
"label": "机器人动作",
"type": "Select",
"value": "TRANSPORT",
"required": true,
"options": [
{ "label": "运输", "value": "TRANSPORT" },
{ "label": "取货", "value": "PICKUP" },
{ "label": "卸货", "value": "DROPOFF" },
{ "label": "等待", "value": "WAIT" },
{ "label": "充电", "value": "CHARGE" },
{ "label": "清洁", "value": "CLEAN" }
]
},
"payload": {
"label": "载荷",
"type": "Select",
"value": "满料架-A2",
"required": false,
"options": [
{ "label": "满料架-A1", "value": "满料架-A1" },
{ "label": "满料架-A2", "value": "满料架-A2" },
{ "label": "空料架-B1", "value": "空料架-B1" },
{ "label": "空料架-B2", "value": "空料架-B2" },
{ "label": "空车", "value": "空车" },
{ "label": "钢材-Q235", "value": "钢材-Q235" },
{ "label": "铝合金-6061", "value": "铝合金-6061" }
]
},
"locationBay": {
"label": "库位",
"type": "Select",
"value": "AS2_2_005",
"required": false,
"options": [
{ "label": "AS2_2_001", "value": "AS2_2_001" },
{ "label": "AS2_2_002", "value": "AS2_2_002" },
{ "label": "AS2_2_003", "value": "AS2_2_003" },
{ "label": "AS2_2_004", "value": "AS2_2_004" },
{ "label": "AS2_2_005", "value": "AS2_2_005" }
]
}
}
},
{
"id": "task-008",
"name": "AP-5等待任务",
"status": "ERROR",
"createdAt": "2024-01-15T15:45:00.000Z",
"parameters": {
"startLocation": {
"label": "起点",
"type": "Select",
"value": "AP-5",
"required": true,
"options": [
{ "label": "AP-1", "value": "AP-1" },
{ "label": "AP-2", "value": "AP-2" },
{ "label": "AP-3", "value": "AP-3" },
{ "label": "AP-4", "value": "AP-4" },
{ "label": "AP-5", "value": "AP-5" },
{ "label": "炉前缓存区", "value": "FURNACE_BUFFER" },
{ "label": "热处理上料交接区", "value": "HEAT_TREATMENT_LOADING" },
{ "label": "成品存储区", "value": "FINISHED_STORAGE" },
{ "label": "原料仓库", "value": "RAW_MATERIAL_WAREHOUSE" },
{ "label": "质检区", "value": "QUALITY_INSPECTION" }
]
},
"endLocation": {
"label": "终点",
"type": "Select",
"value": "AP-5",
"required": true,
"options": [
{ "label": "AP-1", "value": "AP-1" },
{ "label": "AP-2", "value": "AP-2" },
{ "label": "AP-3", "value": "AP-3" },
{ "label": "AP-4", "value": "AP-4" },
{ "label": "AP-5", "value": "AP-5" },
{ "label": "炉前缓存区", "value": "FURNACE_BUFFER" },
{ "label": "热处理上料交接区", "value": "HEAT_TREATMENT_LOADING" },
{ "label": "成品存储区", "value": "FINISHED_STORAGE" },
{ "label": "原料仓库", "value": "RAW_MATERIAL_WAREHOUSE" },
{ "label": "质检区", "value": "QUALITY_INSPECTION" }
]
},
"robotAction": {
"label": "机器人动作",
"type": "Select",
"value": "WAIT",
"required": true,
"options": [
{ "label": "运输", "value": "TRANSPORT" },
{ "label": "取货", "value": "PICKUP" },
{ "label": "卸货", "value": "DROPOFF" },
{ "label": "等待", "value": "WAIT" },
{ "label": "充电", "value": "CHARGE" },
{ "label": "清洁", "value": "CLEAN" }
]
},
"payload": {
"label": "载荷",
"type": "Select",
"value": "空料架-B1",
"required": false,
"options": [
{ "label": "满料架-A1", "value": "满料架-A1" },
{ "label": "满料架-A2", "value": "满料架-A2" },
{ "label": "空料架-B1", "value": "空料架-B1" },
{ "label": "空料架-B2", "value": "空料架-B2" },
{ "label": "空车", "value": "空车" },
{ "label": "钢材-Q235", "value": "钢材-Q235" },
{ "label": "铝合金-6061", "value": "铝合金-6061" }
]
}
}
}
],
"serverUrl": "http://192.168.189.206:8000"
}

View File

@ -1,14 +1,7 @@
import React, { useState, useRef, useEffect } from 'react';
import {
StyleSheet,
ScrollView,
TouchableOpacity,
View,
Text,
} from 'react-native';
import { Input, BottomSheet, ListItem, Button } from '@rneui/themed';
import React, { useState, useEffect } from 'react';
import { StyleSheet, ScrollView, Text, View } from 'react-native';
import { Input } from '@rneui/themed';
import { Task, RobotAction, InputParam } from '../types/task';
import { useTasks } from '../context/TasksContext';
interface TaskFormProps {
task: Task;
@ -16,13 +9,6 @@ interface TaskFormProps {
}
const TaskForm: React.FC<TaskFormProps> = ({ task, onTaskChange }) => {
const { locations, payloads, robotActions } = useTasks();
const [isVisible, setIsVisible] = useState(false);
const [currentField, setCurrentField] = useState('');
const [currentItems, setCurrentItems] = useState<
{ label: string; value: string }[]
>([]);
useEffect(() => {
console.log('TaskForm task prop updated:', task);
}, [task]);
@ -42,38 +28,12 @@ const TaskForm: React.FC<TaskFormProps> = ({ task, onTaskChange }) => {
onTaskChange(updatedTask);
};
const openBottomSheet = (
field: string,
items: { label: string; value: string }[],
) => {
setCurrentField(field);
setCurrentItems(items);
setIsVisible(true);
};
const renderDropdown = (
name: string,
label: string,
value: string,
items: { label: string; value: string }[],
) => (
<TouchableOpacity onPress={() => openBottomSheet(name, items)}>
<Input
label={label}
value={value}
editable={false}
rightIcon={{ name: 'arrow-drop-down' }}
/>
</TouchableOpacity>
);
const renderFormInput = (param: InputParam) => {
const parameter = task.parameters?.[param.name];
const value = parameter?.value || param.defaultValue;
switch (param.type) {
case 'String':
case 'STRING': //
switch (param.type.toLowerCase()) {
case 'string':
return (
<Input
key={param.name}
@ -107,29 +67,10 @@ const TaskForm: React.FC<TaskFormProps> = ({ task, onTaskChange }) => {
{task.detail && task.detail.inputParams ? (
task.detail.inputParams.map(param => renderFormInput(param))
) : (
<Text>... {task.detail}</Text>
<View style={styles.loadingContainer}>
<Text>...</Text>
</View>
)}
<BottomSheet
isVisible={isVisible}
onBackdropPress={() => setIsVisible(false)}
>
<ScrollView>
{currentItems.map((item, index) => (
<ListItem
key={index}
onPress={() => {
handleParamChange(currentField, item.value);
setIsVisible(false);
}}
>
<ListItem.Content>
<ListItem.Title>{item.label}</ListItem.Title>
</ListItem.Content>
</ListItem>
))}
</ScrollView>
</BottomSheet>
</ScrollView>
);
};
@ -138,6 +79,12 @@ const styles = StyleSheet.create({
container: {
padding: 16,
},
loadingContainer: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
padding: 20,
},
});
export default TaskForm;

View File

@ -46,10 +46,10 @@ export const TasksProvider: React.FC<{ children: ReactNode }> = ({
const [isConfigLoaded, setIsConfigLoaded] = useState(false);
const [serverUrl, setServerUrl] = useState<string | null>(null);
const fetchTasks = async (url: string) => {
const fetchTasks = async (baseUrl: string, endpoint: string) => {
try {
if (url) {
const fetchUrl = `${url}/api/vwed-task/list?pageNum=1&pageSize=100`;
if (baseUrl && endpoint) {
const fetchUrl = `${baseUrl}${endpoint}?pageNum=1&pageSize=100`;
console.log('Fetching tasks from:', fetchUrl);
const response = await fetch(fetchUrl);
@ -99,10 +99,10 @@ export const TasksProvider: React.FC<{ children: ReactNode }> = ({
await clearCachedConfig();
const config = await getConfig();
if (config) {
applyConfig(config, false); // Don't load tasks from config
applyConfig(config); // Don't load tasks from config
setIsConfigLoaded(true);
if (config.serverUrl) {
await fetchTasks(config.serverUrl);
if (config.serverUrl && config.apiEndpoints) {
await fetchTasks(config.serverUrl, config.apiEndpoints.getTasks);
}
} else {
console.log('没有找到配置文件,使用空数据');
@ -117,17 +117,23 @@ export const TasksProvider: React.FC<{ children: ReactNode }> = ({
loadApp();
}, []);
const applyConfig = (config: AppConfig, loadTasks: boolean = true) => {
const [apiEndpoints, setApiEndpoints] = useState<{
getTasks: string;
getTaskDetail: string;
runTask: string;
} | null>(null);
const applyConfig = (config: AppConfig) => {
setLocations(config.locations || []);
setLocationsBays(config.locationsBays || []);
setPayloads(config.payloads || []);
setRobotActions(config.robotActions || []);
if (loadTasks && config.tasks) {
setTasks(config.tasks);
}
if (config.serverUrl) {
setServerUrl(config.serverUrl);
}
if (config.apiEndpoints) {
setApiEndpoints(config.apiEndpoints);
}
};
const refreshConfig = async () => {
@ -137,8 +143,8 @@ export const TasksProvider: React.FC<{ children: ReactNode }> = ({
if (config) {
applyConfig(config, false); // Don't load tasks from config
setIsConfigLoaded(true);
if (config.serverUrl) {
await fetchTasks(config.serverUrl);
if (config.serverUrl && config.apiEndpoints) {
await fetchTasks(config.serverUrl, config.apiEndpoints.getTasks);
}
} else {
console.log('刷新配置时没有找到配置文件');
@ -160,8 +166,9 @@ export const TasksProvider: React.FC<{ children: ReactNode }> = ({
const fetchTaskDetail = async (taskId: string) => {
try {
if (serverUrl) {
const url = `${serverUrl}/api/vwed-task/${taskId}`;
if (serverUrl && apiEndpoints) {
const endpoint = apiEndpoints.getTaskDetail.replace('{taskId}', taskId);
const url = `${serverUrl}${endpoint}`;
console.log('Fetching task detail from:', url);
const response = await fetch(url);
@ -206,7 +213,7 @@ export const TasksProvider: React.FC<{ children: ReactNode }> = ({
const runTask = async (id: string) => {
const task = getTaskById(id);
if (!task || !serverUrl) return;
if (!task || !serverUrl || !apiEndpoints) return;
// 更新任务状态为运行中
setTasks(prevTasks =>
@ -214,10 +221,22 @@ export const TasksProvider: React.FC<{ children: ReactNode }> = ({
);
try {
// 提取参数值
const parameters = Object.entries(task.parameters).reduce(
(acc, [key, param]) => {
if (param) {
acc[key] = param.value;
}
return acc;
},
{} as { [key: string]: any },
);
// 获取服务器设置并发送任务执行请求
await executeTask(serverUrl, task.id, {
const endpoint = apiEndpoints.runTask.replace('{taskId}', task.id);
await executeTask(serverUrl, endpoint, {
name: task.name,
parameters: task.parameters,
parameters: parameters,
});
// 模拟任务完成实际项目中应该通过WebSocket或轮询获取任务状态

View File

@ -144,11 +144,11 @@ export const clearCachedConfig = async (): Promise<void> => {
// 向服务器发送任务执行请求
export const executeTask = async (
serverUrl: string,
taskId: string,
endpoint: string,
taskData: any,
): Promise<any> => {
try {
const url = `${serverUrl.replace(/\/$/, '')}/execute-task`;
const url = `${serverUrl.replace(/\/$/, '')}${endpoint}`;
console.log('执行任务请求:', url, taskData);
const response = await fetch(url, {
@ -156,10 +156,7 @@ export const executeTask = async (
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
taskId,
...taskData,
}),
body: JSON.stringify(taskData),
});
if (!response.ok) {

View File

@ -25,8 +25,12 @@ export interface AppConfig {
locationsBays: LocationOption[];
payloads: PayloadOption[];
robotActions: RobotActionOption[];
tasks: Task[];
serverUrl?: string; // 服务器地址
apiEndpoints?: {
getTasks: string;
getTaskDetail: string;
runTask: string;
};
}
// 设置存储接口

View File

@ -16,10 +16,10 @@ export interface ParameterOption {
// 动态参数配置接口
export interface DynamicParameter {
label: string;
type: 'Simple' | 'Select' | 'MultiSelect' | 'Text' | 'Number';
label?: string;
type?: 'Simple' | 'Select' | 'MultiSelect' | 'Text' | 'Number';
value: string | string[] | number;
required: boolean;
required?: boolean;
options?: ParameterOption[];
placeholder?: string;
min?: number;
@ -28,12 +28,6 @@ export interface DynamicParameter {
// 任务参数 - 支持动态配置
export interface TaskParameters {
startLocation: DynamicParameter; // 起点
endLocation: DynamicParameter; // 终点
waypoint?: DynamicParameter; // 途经点 (可选)
robotAction: DynamicParameter; // 机器人动作
payload: DynamicParameter; // 载荷,比如 '空料架' 或具体的物料ID
locationBay?: DynamicParameter; // 库位 (可选)
[key: string]: DynamicParameter | undefined; // 支持扩展参数
}