From 2b2a11831d91b5c9a2e2e13f07e1783ef724bb47 Mon Sep 17 00:00:00 2001 From: yitaikarma Date: Tue, 14 Apr 2026 15:09:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=9C=A8=E9=80=9A=E4=BF=A1?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E5=8F=B3=E9=94=AE=E8=8F=9C=E5=8D=95=E4=B8=AD?= =?UTF-8?q?=E6=8C=82=E8=BD=BD=E8=A1=8C=E4=B8=BA=E6=A0=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/decision/communication/api.ts | 11 ++ .../decision/communication/communication.vue | 31 +++- .../src/views/decision/communication/node.vue | 135 +++++++++++++++++- 3 files changed, 173 insertions(+), 4 deletions(-) diff --git a/modeler/src/views/decision/communication/api.ts b/modeler/src/views/decision/communication/api.ts index 65a6f1d..8fb5d4f 100644 --- a/modeler/src/views/decision/communication/api.ts +++ b/modeler/src/views/decision/communication/api.ts @@ -11,6 +11,7 @@ import { HttpRequestClient } from '@/utils/request'; import type { Scenario, ScenarioDetailsResponse, ScenarioPageableResponse, ScenarioRequest } from './types'; import type { PlatformWithComponentsResponse } from '../types'; import type { BasicResponse } from '@/types'; +import type { BehaviorTree } from '../designer/tree'; const req = HttpRequestClient.create({ baseURL: '/api', @@ -34,4 +35,14 @@ export const findPlatformWithComponents = (id: number): Promise => { return req.postJson(`/system/scene/saveSceneConfig`,scenario); +}; + +// 获取场景下的所有行为树列表 +export const getAllBehaviorTreesBySceneId = (sceneId: number): Promise<{ code: number; msg: string; data: BehaviorTree[] }> => { + return req.get<{ code: number; msg: string; data: BehaviorTree[] }>(`/system/scene/getAllTree/${sceneId}`); +}; + +// 更新行为树(挂载到平台) +export const updateBehaviorTree = (behaviorTree: BehaviorTree): Promise => { + return req.putJson(`/system/behaviortree`, behaviorTree); }; \ No newline at end of file diff --git a/modeler/src/views/decision/communication/communication.vue b/modeler/src/views/decision/communication/communication.vue index 36f0909..76e9076 100644 --- a/modeler/src/views/decision/communication/communication.vue +++ b/modeler/src/views/decision/communication/communication.vue @@ -64,7 +64,7 @@ import { createGraphScenarioElement, createGraphTaskElementFromScenario } from ' import PlatformCard from './platform-card.vue'; import NodesCard from './nodes-card.vue'; -import { findOneScenarioById, saveScenario } from './api'; +import { findOneScenarioById, saveScenario, getAllBehaviorTreesBySceneId } from './api'; import { resolveConnectionRelation } from './relation'; const TeleportContainer = defineComponent(getTeleport()); @@ -211,7 +211,7 @@ export default defineComponent({ } }; - const handleSelect = (scenario: Scenario) => { + const handleSelect = async (scenario: Scenario) => { let nodeGraph: GraphContainer | null = null; try { nodeGraph = JSON.parse(scenario.communicationGraph as unknown as string) as unknown as GraphContainer; @@ -230,6 +230,27 @@ export default defineComponent({ relations: [] }; currentScenarioEditing.value = true; + + // 将场景ID存储到graph对象中,供子组件访问 + if (graph.value) { + (graph.value as any).currentScenario = currentScenario.value; + + // 加载该场景下的行为树列表 + try { + const response = await getAllBehaviorTreesBySceneId(scenario.id); + if (response.code === 200 && response.data) { + (graph.value as any).behaviorTrees = response.data; + console.log(`加载场景${scenario.id}的行为树列表:`, response.data.length, '个'); + } else { + (graph.value as any).behaviorTrees = []; + console.warn('获取行为树列表失败:', response.msg); + } + } catch (error) { + console.error('获取行为树列表失败:', error); + (graph.value as any).behaviorTrees = []; + } + } + createElements(); }; @@ -277,6 +298,12 @@ export default defineComponent({ nodes: [], }, }; + + // 清空graph中的场景信息 + if (graph.value) { + (graph.value as any).currentScenario = null; + } + currentGraph.value = { edges: [], nodes: [], diff --git a/modeler/src/views/decision/communication/node.vue b/modeler/src/views/decision/communication/node.vue index cc074e7..32305fe 100644 --- a/modeler/src/views/decision/communication/node.vue +++ b/modeler/src/views/decision/communication/node.vue @@ -1,5 +1,9 @@