From 9ee0cc394db1f255ac87a5514a30478571ee3070 Mon Sep 17 00:00:00 2001 From: xudan Date: Tue, 23 Sep 2025 16:56:00 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=89=8B=E5=8A=A8?= =?UTF-8?q?=E5=8F=91=E5=B8=83=E5=85=85=E7=94=B5=E4=BB=BB=E5=8A=A1=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=EF=BC=8C=E6=9B=B4=E6=96=B0API=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=B9=B6=E4=BC=98=E5=8C=96=E6=9C=BA=E5=99=A8=E4=BA=BA=E5=89=8D?= =?UTF-8?q?=E5=BE=80=E5=85=85=E7=94=B5=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.development | 2 +- src/apis/amr/api.ts | 19 +++++++++++++++++- src/components/context-menu/context-menu.vue | 3 --- .../context-menu/robot-menu.service.ts | 20 ++++++++++++++----- src/services/editor.service.ts | 4 ++++ 5 files changed, 38 insertions(+), 10 deletions(-) diff --git a/.env.development b/.env.development index 3986f08..c9b651f 100644 --- a/.env.development +++ b/.env.development @@ -4,5 +4,5 @@ ENV_WEBSOCKET_BASE=/ws ENV_STORAGE_WEBSOCKET_BASE=/vwedWs # 开发环境token配置 - 可以手动设置或从另一个项目获取后填入 -ENV_DEV_TOKEN=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3NTc1Mjc0NTksInVzZXJuYW1lIjoiYWRtaW4ifQ.MionV2RtdoIm085NYLRQxCNHxmgB9HGCvYXlsAERkG4 +ENV_DEV_TOKEN=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3NTgyMTA0NTIsInVzZXJuYW1lIjoiYWRtaW4ifQ.UTbugug5gJAxFvC92T_5wqt4JeI_SnF4PeayjAx5K4g ENV_DEV_TENANT_ID=1000 diff --git a/src/apis/amr/api.ts b/src/apis/amr/api.ts index d64d922..6de9941 100644 --- a/src/apis/amr/api.ts +++ b/src/apis/amr/api.ts @@ -4,11 +4,28 @@ const enum API { // 控制接口 - 只包含右键菜单需要的 控制AMR = '/amr/control', 抢占控制权 = '/amr/controlAmr', - 设置接单状态 = '/amr/acceptTask', + // 设置接单状态 = '/amr/acceptTask', + 手动发布充电任务 = '/amr/manuallSetCharging', } // 只保留右键菜单需要的API函数 +/** + * 手动发布充电任务 + * @param sceneId 场景ID + * @param amrId AMR ID + * @returns 是否成功 + */ +export async function manuallSetCharging(sceneId: string, amrId: string): Promise { + try { + await http.get(`${API.手动发布充电任务}/${sceneId}/${amrId}`); + return true; + } catch (error) { + console.error('手动发布充电任务失败:', error); + return false; + } +} + /** * 控制AMR - 用于暂停、继续、启动、停止、前往充电、前往停靠、路径导航、重置、诊断、更新 */ diff --git a/src/components/context-menu/context-menu.vue b/src/components/context-menu/context-menu.vue index 6722b25..7da6708 100644 --- a/src/components/context-menu/context-menu.vue +++ b/src/components/context-menu/context-menu.vue @@ -128,9 +128,6 @@ const handleActionComplete = (data: any) => { if (data.success) { const actionName = getActionDisplayName(data.action); message.success(`${actionName}操作成功`); - } else { - const actionName = getActionDisplayName(data.action); - message.error(`${actionName}操作失败`); } emit('actionComplete', data); diff --git a/src/services/context-menu/robot-menu.service.ts b/src/services/context-menu/robot-menu.service.ts index 9dd08c9..dd83ef6 100644 --- a/src/services/context-menu/robot-menu.service.ts +++ b/src/services/context-menu/robot-menu.service.ts @@ -6,6 +6,7 @@ import * as AmrApi from '../../apis/amr'; import type { RobotInfo } from '../../apis/robot'; import { RobotState } from '../../apis/robot'; +import { editorStore } from '../../stores/editor.store'; export interface RobotMenuConfig { menuType: 'robot' | 'default'; @@ -61,7 +62,7 @@ export async function executeRobotAction( console.error(`机器人${action}操作失败:`, error); return { success: false, - message: `机器人${action}操作失败: ${error}`, + message: '', }; } } @@ -122,10 +123,19 @@ async function executeAmrAction( result = await AmrApi.controlAmr(robotInfo.id, 'stop'); break; - case 'go_charge': + case 'go_charge': { // 前往充电 - 有对应API - result = await AmrApi.controlAmr(robotInfo.id, 'go_charge'); + const sceneId = editorStore.getEditorValue()?.getSceneId(); + if (!sceneId) { + console.error('前往充电失败: 场景ID未提供'); + return { + success: false, + message: '', + }; + } + result = await AmrApi.manuallSetCharging(sceneId, robotInfo.id); break; + } case 'go_dock': // 前往停靠 - 有对应API @@ -187,14 +197,14 @@ async function executeAmrAction( return { success: result, - message: result ? `${action}操作成功` : `${action}操作失败`, + message: result ? `${action}操作成功` : '', }; } catch (error) { console.error(`AMR操作失败 (${action}):`, error); return { success: false, - message: `操作失败: ${error}`, + message: '', }; } } diff --git a/src/services/editor.service.ts b/src/services/editor.service.ts index 6129b0d..35297d6 100644 --- a/src/services/editor.service.ts +++ b/src/services/editor.service.ts @@ -662,6 +662,10 @@ export class EditorService extends Meta2d { /** 保存从后台传来的所有额外字段(除了已处理的robotGroups、robots、points、routes、areas之外的字段) */ #originalSceneData?: Partial; + public getSceneId(): string | undefined { + return (this.#originalSceneData as any)?.id; + } + /** 坐标转换方法 - 将左上角原点的坐标转换为中心点原点的坐标 */ #transformCoordinate(x: number, y: number): { x: number; y: number } { const { ratio = 1, width = 0, height = 0 } = this.#originalSceneData ?? {};