调整行为树挂载到平台的逻辑,修复发送平台变量未正确渲染
Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
@@ -51,7 +51,11 @@ export const getAllBehaviorTreesBySceneId = (sceneId: number): Promise<{ code: n
|
|||||||
return req.get<{ code: number; msg: string; data: BehaviorTree[] }>(`/system/scene/getAllTree/${sceneId}`);
|
return req.get<{ code: number; msg: string; data: BehaviorTree[] }>(`/system/scene/getAllTree/${sceneId}`);
|
||||||
};
|
};
|
||||||
|
|
||||||
// 更新行为树(挂载到平台)
|
// 更新平台的行为树id
|
||||||
|
export const updateBehaviorTreeIdOfPlatform = (query: { id: number, behaviortreeId: number}): Promise<BasicResponse> => {
|
||||||
|
return req.putJson<BasicResponse>(`/system/behaviortree/behaviortreeId`, query);
|
||||||
|
};
|
||||||
|
// 更新行为树的平台id
|
||||||
export const updateBehaviorTree = (behaviorTree: BehaviorTree): Promise<BasicResponse> => {
|
export const updateBehaviorTree = (behaviorTree: BehaviorTree): Promise<BasicResponse> => {
|
||||||
return req.putJson<BasicResponse>(`/system/behaviortree`, behaviorTree);
|
return req.putJson<BasicResponse>(`/system/behaviortree`, behaviorTree);
|
||||||
};
|
};
|
||||||
@@ -76,6 +76,8 @@ import { findOneScenarioById, saveScenario, findRelations, getAllBehaviorTreesBy
|
|||||||
import { resolveConnectionRelation } from './relation';
|
import { resolveConnectionRelation } from './relation';
|
||||||
import { generateRandomCommunicationData } from '../graph/random-data-generator';
|
import { generateRandomCommunicationData } from '../graph/random-data-generator';
|
||||||
import { convertRecordsToGraphContainer, type CommunicationRecord } from '../graph/data-converter';
|
import { convertRecordsToGraphContainer, type CommunicationRecord } from '../graph/data-converter';
|
||||||
|
import { log } from 'echarts/types/src/util/log.js';
|
||||||
|
import { router } from '@/router';
|
||||||
|
|
||||||
const TeleportContainer = defineComponent(getTeleport());
|
const TeleportContainer = defineComponent(getTeleport());
|
||||||
|
|
||||||
@@ -434,13 +436,19 @@ export default defineComponent({
|
|||||||
handleGraphEvent('node:dblclick', (args: any) => {
|
handleGraphEvent('node:dblclick', (args: any) => {
|
||||||
const node = args.node as Node<NodeProperties>;
|
const node = args.node as Node<NodeProperties>;
|
||||||
const element = node.getData() as GraphTaskElement;
|
const element = node.getData() as GraphTaskElement;
|
||||||
console.error('element',element)
|
|
||||||
window.location.href = `/app/decision/designer?scenario=${currentScenario.value?.id}&platform=${element?.platformId?? ''}`
|
window.location.href = `/app/decision/designer?scenarioId=${currentScenario.value?.id}&behaviortreeId=${element?.behaviortreeId ?? ''}`
|
||||||
|
|
||||||
// destroy()
|
// destroy()
|
||||||
// window.location.href = '/app/decision/designer'
|
// window.location.href = '/app/decision/designer'
|
||||||
|
|
||||||
|
// 通过router跳转在初始化节点上存在渲染时机的问题,导致节点未渲染
|
||||||
// router.push({
|
// router.push({
|
||||||
// path: '/app/decision/designer'
|
// path: '/app/decision/designer',
|
||||||
|
// query: {
|
||||||
|
// scenarioId: currentScenario.value?.id?.toString() ?? '',
|
||||||
|
// behaviortreeId: element?.behaviortreeId?.toString() ?? '',
|
||||||
|
// },
|
||||||
// })
|
// })
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ import { DeleteOutlined, LinkOutlined, CheckOutlined, SettingOutlined } from '@a
|
|||||||
import type { Graph } from '@antv/x6';
|
import type { Graph } from '@antv/x6';
|
||||||
import { message } from 'ant-design-vue';
|
import { message } from 'ant-design-vue';
|
||||||
import { substring } from '@/utils/strings';
|
import { substring } from '@/utils/strings';
|
||||||
import { updateBehaviorTree } from './api';
|
import { updateBehaviorTree, updateBehaviorTreeIdOfPlatform } from './api';
|
||||||
import type { BehaviorTree } from '../designer/tree';
|
import type { BehaviorTree } from '../designer/tree';
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
@@ -156,7 +156,7 @@ export default defineComponent({
|
|||||||
// 判断行为树是否已挂载到当前节点
|
// 判断行为树是否已挂载到当前节点
|
||||||
const isTreeMounted = (treeId: number): boolean => {
|
const isTreeMounted = (treeId: number): boolean => {
|
||||||
if (!element.value) return false;
|
if (!element.value) return false;
|
||||||
const currentTreeId = (element.value as any).behaviorTreeId as number | undefined;
|
const currentTreeId = (element.value as any).behaviortreeId as number | undefined;
|
||||||
return currentTreeId === treeId;
|
return currentTreeId === treeId;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -188,25 +188,23 @@ export default defineComponent({
|
|||||||
if (!element.value) return;
|
if (!element.value) return;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// 更新节点的behaviorTreeId属性
|
// 更新节点的behaviortreeId属性
|
||||||
const updatedElement = { ...(element.value as any), behaviorTreeId: tree.id };
|
const updatedElement = { ...(element.value as any), behaviortreeId: tree.id };
|
||||||
|
|
||||||
// 调用后端API更新行为树(将platformId关联到该平台)
|
// 调用后端API:同时更新平台表的 behaviortreeId 和行为树表的 platformId
|
||||||
const platformIdValue = (element.value as any).platformId as number | undefined;
|
const platformIdValue = (element.value as any).platformId as number;
|
||||||
const treeToUpdate = {
|
const [platformRes, treeRes] = await Promise.all([
|
||||||
...tree,
|
updateBehaviorTreeIdOfPlatform({ id: platformIdValue, behaviortreeId: tree.id }),
|
||||||
platformId: platformIdValue ?? null
|
updateBehaviorTree({ ...tree, platformId: platformIdValue }),
|
||||||
};
|
]);
|
||||||
|
if (platformRes.code === 200 && treeRes.code === 200) {
|
||||||
const updateResponse = await updateBehaviorTree(treeToUpdate);
|
|
||||||
if (updateResponse.code === 200) {
|
|
||||||
// 更新本地节点数据
|
// 更新本地节点数据
|
||||||
if (_props.node) {
|
if (_props.node) {
|
||||||
_props.node.setData(updatedElement);
|
_props.node.setData(updatedElement);
|
||||||
}
|
}
|
||||||
message.success(`已成功挂载行为树: ${tree.name}`);
|
message.success(`已成功挂载行为树: ${tree.name}`);
|
||||||
} else {
|
} else {
|
||||||
message.error(updateResponse.msg || '挂载失败');
|
message.error(platformRes.msg || treeRes.msg || '挂载失败');
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('挂载行为树失败:', error);
|
console.error('挂载行为树失败:', error);
|
||||||
|
|||||||
@@ -295,27 +295,29 @@ export default defineComponent({
|
|||||||
const createElements = () => {
|
const createElements = () => {
|
||||||
clearGraph();
|
clearGraph();
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
if (currentBehaviorTree.value?.graph && graph.value) {
|
setTimeout(() => {
|
||||||
if (currentBehaviorTree.value?.graph.nodes) {
|
if (currentBehaviorTree.value?.graph && graph.value) {
|
||||||
currentBehaviorTree.value?.graph.nodes.forEach(ele => {
|
if (currentBehaviorTree.value?.graph.nodes) {
|
||||||
const node = createGraphTaskElement(ele as GraphTaskElement);
|
currentBehaviorTree.value?.graph.nodes.forEach(ele => {
|
||||||
// 将节点添加到画布
|
const node = createGraphTaskElement(ele as GraphTaskElement);
|
||||||
graph.value?.addNode(node as Node);
|
// 将节点添加到画布
|
||||||
});
|
graph.value?.addNode(node as Node);
|
||||||
}
|
});
|
||||||
setTimeout(() => {
|
}
|
||||||
// 然后添加所有边,确保包含桩点信息
|
setTimeout(() => {
|
||||||
currentBehaviorTree.value?.graph.edges.forEach(edgeData => {
|
// 然后添加所有边,确保包含桩点信息
|
||||||
graph.value?.addEdge({
|
currentBehaviorTree.value?.graph.edges.forEach(edgeData => {
|
||||||
...edgeData,
|
graph.value?.addEdge({
|
||||||
...createLineOptions(),
|
...edgeData,
|
||||||
|
...createLineOptions(),
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
fitToScreen();
|
||||||
fitToScreen();
|
|
||||||
|
console.info('create elements: ', currentBehaviorTree.value?.graph);
|
||||||
console.info('create elements: ', currentBehaviorTree.value?.graph);
|
}
|
||||||
}
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -334,7 +336,6 @@ export default defineComponent({
|
|||||||
};
|
};
|
||||||
|
|
||||||
const loadTargetTree = (tree: BehaviorTree) => {
|
const loadTargetTree = (tree: BehaviorTree) => {
|
||||||
currentTreeId.value = tree.id;
|
|
||||||
resolveBehaviorTreeGraph(tree.id, tree.xmlContent).then(nodeGraph => {
|
resolveBehaviorTreeGraph(tree.id, tree.xmlContent).then(nodeGraph => {
|
||||||
applyBehaviorTree({
|
applyBehaviorTree({
|
||||||
...tree,
|
...tree,
|
||||||
@@ -363,6 +364,7 @@ export default defineComponent({
|
|||||||
console.info('handleSelectTree', tree);
|
console.info('handleSelectTree', tree);
|
||||||
findOneTreeById(tree.id).then(r => {
|
findOneTreeById(tree.id).then(r => {
|
||||||
if (r.data) {
|
if (r.data) {
|
||||||
|
currentTreeId.value = tree.id;
|
||||||
loadTargetTree(r.data);
|
loadTargetTree(r.data);
|
||||||
} else {
|
} else {
|
||||||
message.error(r.msg ?? '行为树不存在.');
|
message.error(r.msg ?? '行为树不存在.');
|
||||||
@@ -372,11 +374,11 @@ export default defineComponent({
|
|||||||
|
|
||||||
const resolveQuery = ()=> {
|
const resolveQuery = ()=> {
|
||||||
console.log(currentRoute);
|
console.log(currentRoute);
|
||||||
if (!currentRoute.query.scenario) {
|
if (!currentRoute.query.scenarioId) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
let scenarioId = Number(currentRoute.query.scenario);
|
let scenarioId = Number(currentRoute.query.scenarioId);
|
||||||
if (!isNaN(scenarioId)) {
|
if (!isNaN(scenarioId)) {
|
||||||
currentScenarioId.value = scenarioId;
|
currentScenarioId.value = scenarioId;
|
||||||
fromScenarioPage.value = true;
|
fromScenarioPage.value = true;
|
||||||
@@ -384,11 +386,11 @@ export default defineComponent({
|
|||||||
fromScenarioPage.value = false;
|
fromScenarioPage.value = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
let platformId = Number(currentRoute.query.platform);
|
let behaviortreeId = Number(currentRoute.query.behaviortreeId);
|
||||||
if (!isNaN(platformId)) {
|
if (!isNaN(behaviortreeId)) {
|
||||||
currentPlatformId.value = platformId;
|
currentTreeId.value = behaviortreeId;
|
||||||
} else {
|
} else {
|
||||||
currentPlatformId.value = null;
|
currentTreeId.value = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -432,7 +434,6 @@ export default defineComponent({
|
|||||||
handleGraphEvent('node:click', (args: any) => {
|
handleGraphEvent('node:click', (args: any) => {
|
||||||
const node = args.node as Node<NodeProperties>;
|
const node = args.node as Node<NodeProperties>;
|
||||||
const newElement = node.getData() as GraphTaskElement;
|
const newElement = node.getData() as GraphTaskElement;
|
||||||
console.error('ddd', args);
|
|
||||||
|
|
||||||
selectedModelNode.value = node;
|
selectedModelNode.value = node;
|
||||||
selectedNodeTaskElement.value = JSON.parse(JSON.stringify(newElement || {})) as GraphTaskElement;
|
selectedNodeTaskElement.value = JSON.parse(JSON.stringify(newElement || {})) as GraphTaskElement;
|
||||||
@@ -458,6 +459,8 @@ export default defineComponent({
|
|||||||
|
|
||||||
const init = () => {
|
const init = () => {
|
||||||
console.info('init');
|
console.info('init');
|
||||||
|
|
||||||
|
resolveQuery();
|
||||||
|
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
initGraphConfig();
|
initGraphConfig();
|
||||||
@@ -466,11 +469,12 @@ export default defineComponent({
|
|||||||
|
|
||||||
window.addEventListener('resize', handleResize);
|
window.addEventListener('resize', handleResize);
|
||||||
|
|
||||||
resolveQuery();
|
|
||||||
|
|
||||||
if (currentPlatformId.value) {
|
if (currentTreeId.value) {
|
||||||
findOneTreeByPlatformId(currentPlatformId.value).then(r => {
|
findOneTreeById(currentTreeId.value).then(r => {
|
||||||
if (r.data) {
|
if (r.data) {
|
||||||
|
currentPlatformId.value = r.data.platformId ?? null;
|
||||||
loadTargetTree(r.data);
|
loadTargetTree(r.data);
|
||||||
} else {
|
} else {
|
||||||
handleCreateTree();
|
handleCreateTree();
|
||||||
|
|||||||
@@ -735,6 +735,7 @@ const createNodeObjects = (
|
|||||||
type: 'scenario',
|
type: 'scenario',
|
||||||
name: platform,
|
name: platform,
|
||||||
platformId: platformId,
|
platformId: platformId,
|
||||||
|
behaviortreeId: platformData?.behaviortreeId ?? null,
|
||||||
scenarioId: nodeScenarioId, // 修复:优先使用platformData.scenarioId
|
scenarioId: nodeScenarioId, // 修复:优先使用platformData.scenarioId
|
||||||
components: components,
|
components: components,
|
||||||
template: 0,
|
template: 0,
|
||||||
@@ -829,6 +830,7 @@ const createRootNode = (
|
|||||||
type: 'scenario',
|
type: 'scenario',
|
||||||
name: rootPlatformName,
|
name: rootPlatformName,
|
||||||
platformId: platformId,
|
platformId: platformId,
|
||||||
|
behaviortreeId: platformData?.behaviortreeId ?? null,
|
||||||
scenarioId: rootNodeScenarioId, // 修复:优先使用platformData.scenarioId
|
scenarioId: rootNodeScenarioId, // 修复:优先使用platformData.scenarioId
|
||||||
components: components,
|
components: components,
|
||||||
template: 0,
|
template: 0,
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ export interface PlatformComponent {
|
|||||||
|
|
||||||
export interface PlatformWithComponents extends Platform {
|
export interface PlatformWithComponents extends Platform {
|
||||||
components: PlatformComponent[],
|
components: PlatformComponent[],
|
||||||
|
behaviortreeId?: number | null,
|
||||||
[key: string]: unknown;
|
[key: string]: unknown;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user