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`.
|
The root component of the application is `App.tsx`, which sets up the `ThemeProvider`, `TasksProvider`, and `NavigationContainer`.
|
||||||
|
|
||||||
# 请你检查 读取文件后,是否发送请求给 AI 大模型了
|
# 请你检查 读取文件,准备编辑文件后,是否发送请求给 AI 大模型了
|
||||||
|
676
config.json
676
config.json
@ -36,674 +36,10 @@
|
|||||||
{ "label": "充电", "value": "CHARGE" },
|
{ "label": "充电", "value": "CHARGE" },
|
||||||
{ "label": "清洁", "value": "CLEAN" }
|
{ "label": "清洁", "value": "CLEAN" }
|
||||||
],
|
],
|
||||||
"tasks": [
|
"serverUrl": "http://192.168.189.206:8000",
|
||||||
{
|
"apiEndpoints": {
|
||||||
"id": "task-001",
|
"getTasks": "/api/vwed-task/list",
|
||||||
"name": "炉前缓存区到热处理上料交接区运输",
|
"getTaskDetail": "/api/vwed-task/{taskId}",
|
||||||
"status": "IDLE",
|
"runTask": "/api/vwed-task/execute/{taskId}"
|
||||||
"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" }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"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 React, { useState, useEffect } from 'react';
|
||||||
import {
|
import { StyleSheet, ScrollView, Text, View } from 'react-native';
|
||||||
StyleSheet,
|
import { Input } from '@rneui/themed';
|
||||||
ScrollView,
|
|
||||||
TouchableOpacity,
|
|
||||||
View,
|
|
||||||
Text,
|
|
||||||
} from 'react-native';
|
|
||||||
import { Input, BottomSheet, ListItem, Button } from '@rneui/themed';
|
|
||||||
import { Task, RobotAction, InputParam } from '../types/task';
|
import { Task, RobotAction, InputParam } from '../types/task';
|
||||||
import { useTasks } from '../context/TasksContext';
|
|
||||||
|
|
||||||
interface TaskFormProps {
|
interface TaskFormProps {
|
||||||
task: Task;
|
task: Task;
|
||||||
@ -16,13 +9,6 @@ interface TaskFormProps {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const TaskForm: React.FC<TaskFormProps> = ({ task, onTaskChange }) => {
|
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(() => {
|
useEffect(() => {
|
||||||
console.log('TaskForm task prop updated:', task);
|
console.log('TaskForm task prop updated:', task);
|
||||||
}, [task]);
|
}, [task]);
|
||||||
@ -42,38 +28,12 @@ const TaskForm: React.FC<TaskFormProps> = ({ task, onTaskChange }) => {
|
|||||||
onTaskChange(updatedTask);
|
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 renderFormInput = (param: InputParam) => {
|
||||||
const parameter = task.parameters?.[param.name];
|
const parameter = task.parameters?.[param.name];
|
||||||
const value = parameter?.value || param.defaultValue;
|
const value = parameter?.value || param.defaultValue;
|
||||||
|
|
||||||
switch (param.type) {
|
switch (param.type.toLowerCase()) {
|
||||||
case 'String':
|
case 'string':
|
||||||
case 'STRING': //
|
|
||||||
return (
|
return (
|
||||||
<Input
|
<Input
|
||||||
key={param.name}
|
key={param.name}
|
||||||
@ -107,29 +67,10 @@ const TaskForm: React.FC<TaskFormProps> = ({ task, onTaskChange }) => {
|
|||||||
{task.detail && task.detail.inputParams ? (
|
{task.detail && task.detail.inputParams ? (
|
||||||
task.detail.inputParams.map(param => renderFormInput(param))
|
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>
|
</ScrollView>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
@ -138,6 +79,12 @@ const styles = StyleSheet.create({
|
|||||||
container: {
|
container: {
|
||||||
padding: 16,
|
padding: 16,
|
||||||
},
|
},
|
||||||
|
loadingContainer: {
|
||||||
|
flex: 1,
|
||||||
|
justifyContent: 'center',
|
||||||
|
alignItems: 'center',
|
||||||
|
padding: 20,
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
export default TaskForm;
|
export default TaskForm;
|
||||||
|
@ -46,10 +46,10 @@ export const TasksProvider: React.FC<{ children: ReactNode }> = ({
|
|||||||
const [isConfigLoaded, setIsConfigLoaded] = useState(false);
|
const [isConfigLoaded, setIsConfigLoaded] = useState(false);
|
||||||
const [serverUrl, setServerUrl] = useState<string | null>(null);
|
const [serverUrl, setServerUrl] = useState<string | null>(null);
|
||||||
|
|
||||||
const fetchTasks = async (url: string) => {
|
const fetchTasks = async (baseUrl: string, endpoint: string) => {
|
||||||
try {
|
try {
|
||||||
if (url) {
|
if (baseUrl && endpoint) {
|
||||||
const fetchUrl = `${url}/api/vwed-task/list?pageNum=1&pageSize=100`;
|
const fetchUrl = `${baseUrl}${endpoint}?pageNum=1&pageSize=100`;
|
||||||
console.log('Fetching tasks from:', fetchUrl);
|
console.log('Fetching tasks from:', fetchUrl);
|
||||||
const response = await fetch(fetchUrl);
|
const response = await fetch(fetchUrl);
|
||||||
|
|
||||||
@ -99,10 +99,10 @@ export const TasksProvider: React.FC<{ children: ReactNode }> = ({
|
|||||||
await clearCachedConfig();
|
await clearCachedConfig();
|
||||||
const config = await getConfig();
|
const config = await getConfig();
|
||||||
if (config) {
|
if (config) {
|
||||||
applyConfig(config, false); // Don't load tasks from config
|
applyConfig(config); // Don't load tasks from config
|
||||||
setIsConfigLoaded(true);
|
setIsConfigLoaded(true);
|
||||||
if (config.serverUrl) {
|
if (config.serverUrl && config.apiEndpoints) {
|
||||||
await fetchTasks(config.serverUrl);
|
await fetchTasks(config.serverUrl, config.apiEndpoints.getTasks);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
console.log('没有找到配置文件,使用空数据');
|
console.log('没有找到配置文件,使用空数据');
|
||||||
@ -117,17 +117,23 @@ export const TasksProvider: React.FC<{ children: ReactNode }> = ({
|
|||||||
loadApp();
|
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 || []);
|
setLocations(config.locations || []);
|
||||||
setLocationsBays(config.locationsBays || []);
|
setLocationsBays(config.locationsBays || []);
|
||||||
setPayloads(config.payloads || []);
|
setPayloads(config.payloads || []);
|
||||||
setRobotActions(config.robotActions || []);
|
setRobotActions(config.robotActions || []);
|
||||||
if (loadTasks && config.tasks) {
|
|
||||||
setTasks(config.tasks);
|
|
||||||
}
|
|
||||||
if (config.serverUrl) {
|
if (config.serverUrl) {
|
||||||
setServerUrl(config.serverUrl);
|
setServerUrl(config.serverUrl);
|
||||||
}
|
}
|
||||||
|
if (config.apiEndpoints) {
|
||||||
|
setApiEndpoints(config.apiEndpoints);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const refreshConfig = async () => {
|
const refreshConfig = async () => {
|
||||||
@ -137,8 +143,8 @@ export const TasksProvider: React.FC<{ children: ReactNode }> = ({
|
|||||||
if (config) {
|
if (config) {
|
||||||
applyConfig(config, false); // Don't load tasks from config
|
applyConfig(config, false); // Don't load tasks from config
|
||||||
setIsConfigLoaded(true);
|
setIsConfigLoaded(true);
|
||||||
if (config.serverUrl) {
|
if (config.serverUrl && config.apiEndpoints) {
|
||||||
await fetchTasks(config.serverUrl);
|
await fetchTasks(config.serverUrl, config.apiEndpoints.getTasks);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
console.log('刷新配置时没有找到配置文件');
|
console.log('刷新配置时没有找到配置文件');
|
||||||
@ -160,8 +166,9 @@ export const TasksProvider: React.FC<{ children: ReactNode }> = ({
|
|||||||
|
|
||||||
const fetchTaskDetail = async (taskId: string) => {
|
const fetchTaskDetail = async (taskId: string) => {
|
||||||
try {
|
try {
|
||||||
if (serverUrl) {
|
if (serverUrl && apiEndpoints) {
|
||||||
const url = `${serverUrl}/api/vwed-task/${taskId}`;
|
const endpoint = apiEndpoints.getTaskDetail.replace('{taskId}', taskId);
|
||||||
|
const url = `${serverUrl}${endpoint}`;
|
||||||
console.log('Fetching task detail from:', url);
|
console.log('Fetching task detail from:', url);
|
||||||
const response = await fetch(url);
|
const response = await fetch(url);
|
||||||
|
|
||||||
@ -206,7 +213,7 @@ export const TasksProvider: React.FC<{ children: ReactNode }> = ({
|
|||||||
|
|
||||||
const runTask = async (id: string) => {
|
const runTask = async (id: string) => {
|
||||||
const task = getTaskById(id);
|
const task = getTaskById(id);
|
||||||
if (!task || !serverUrl) return;
|
if (!task || !serverUrl || !apiEndpoints) return;
|
||||||
|
|
||||||
// 更新任务状态为运行中
|
// 更新任务状态为运行中
|
||||||
setTasks(prevTasks =>
|
setTasks(prevTasks =>
|
||||||
@ -214,10 +221,22 @@ export const TasksProvider: React.FC<{ children: ReactNode }> = ({
|
|||||||
);
|
);
|
||||||
|
|
||||||
try {
|
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,
|
name: task.name,
|
||||||
parameters: task.parameters,
|
parameters: parameters,
|
||||||
});
|
});
|
||||||
|
|
||||||
// 模拟任务完成(实际项目中应该通过WebSocket或轮询获取任务状态)
|
// 模拟任务完成(实际项目中应该通过WebSocket或轮询获取任务状态)
|
||||||
|
@ -144,11 +144,11 @@ export const clearCachedConfig = async (): Promise<void> => {
|
|||||||
// 向服务器发送任务执行请求
|
// 向服务器发送任务执行请求
|
||||||
export const executeTask = async (
|
export const executeTask = async (
|
||||||
serverUrl: string,
|
serverUrl: string,
|
||||||
taskId: string,
|
endpoint: string,
|
||||||
taskData: any,
|
taskData: any,
|
||||||
): Promise<any> => {
|
): Promise<any> => {
|
||||||
try {
|
try {
|
||||||
const url = `${serverUrl.replace(/\/$/, '')}/execute-task`;
|
const url = `${serverUrl.replace(/\/$/, '')}${endpoint}`;
|
||||||
console.log('执行任务请求:', url, taskData);
|
console.log('执行任务请求:', url, taskData);
|
||||||
|
|
||||||
const response = await fetch(url, {
|
const response = await fetch(url, {
|
||||||
@ -156,10 +156,7 @@ export const executeTask = async (
|
|||||||
headers: {
|
headers: {
|
||||||
'Content-Type': 'application/json',
|
'Content-Type': 'application/json',
|
||||||
},
|
},
|
||||||
body: JSON.stringify({
|
body: JSON.stringify(taskData),
|
||||||
taskId,
|
|
||||||
...taskData,
|
|
||||||
}),
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
|
@ -25,8 +25,12 @@ export interface AppConfig {
|
|||||||
locationsBays: LocationOption[];
|
locationsBays: LocationOption[];
|
||||||
payloads: PayloadOption[];
|
payloads: PayloadOption[];
|
||||||
robotActions: RobotActionOption[];
|
robotActions: RobotActionOption[];
|
||||||
tasks: Task[];
|
|
||||||
serverUrl?: string; // 服务器地址
|
serverUrl?: string; // 服务器地址
|
||||||
|
apiEndpoints?: {
|
||||||
|
getTasks: string;
|
||||||
|
getTaskDetail: string;
|
||||||
|
runTask: string;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// 设置存储接口
|
// 设置存储接口
|
||||||
|
@ -16,10 +16,10 @@ export interface ParameterOption {
|
|||||||
|
|
||||||
// 动态参数配置接口
|
// 动态参数配置接口
|
||||||
export interface DynamicParameter {
|
export interface DynamicParameter {
|
||||||
label: string;
|
label?: string;
|
||||||
type: 'Simple' | 'Select' | 'MultiSelect' | 'Text' | 'Number';
|
type?: 'Simple' | 'Select' | 'MultiSelect' | 'Text' | 'Number';
|
||||||
value: string | string[] | number;
|
value: string | string[] | number;
|
||||||
required: boolean;
|
required?: boolean;
|
||||||
options?: ParameterOption[];
|
options?: ParameterOption[];
|
||||||
placeholder?: string;
|
placeholder?: string;
|
||||||
min?: number;
|
min?: number;
|
||||||
@ -28,12 +28,6 @@ export interface DynamicParameter {
|
|||||||
|
|
||||||
// 任务参数 - 支持动态配置
|
// 任务参数 - 支持动态配置
|
||||||
export interface TaskParameters {
|
export interface TaskParameters {
|
||||||
startLocation: DynamicParameter; // 起点
|
|
||||||
endLocation: DynamicParameter; // 终点
|
|
||||||
waypoint?: DynamicParameter; // 途经点 (可选)
|
|
||||||
robotAction: DynamicParameter; // 机器人动作
|
|
||||||
payload: DynamicParameter; // 载荷,比如 '空料架' 或具体的物料ID
|
|
||||||
locationBay?: DynamicParameter; // 库位 (可选)
|
|
||||||
[key: string]: DynamicParameter | undefined; // 支持扩展参数
|
[key: string]: DynamicParameter | undefined; // 支持扩展参数
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user