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 @@