refactor: 更新任务表单组件以简化参数处理,优化任务上下文以支持新的API端点配置
This commit is contained in:
parent
6aff5dd0c8
commit
b3d0a91f93
@ -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 大模型了
|
||||
|
674
config.json
674
config.json
@ -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"
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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或轮询获取任务状态)
|
||||
|
@ -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) {
|
||||
|
@ -25,8 +25,12 @@ export interface AppConfig {
|
||||
locationsBays: LocationOption[];
|
||||
payloads: PayloadOption[];
|
||||
robotActions: RobotActionOption[];
|
||||
tasks: Task[];
|
||||
serverUrl?: string; // 服务器地址
|
||||
apiEndpoints?: {
|
||||
getTasks: string;
|
||||
getTaskDetail: string;
|
||||
runTask: string;
|
||||
};
|
||||
}
|
||||
|
||||
// 设置存储接口
|
||||
|
@ -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; // 支持扩展参数
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user