化行为树加载

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
2026-04-17 21:43:53 +08:00
parent 1de4f9db8d
commit c3a6661d2a
2 changed files with 39 additions and 47 deletions

View File

@@ -13,7 +13,7 @@
<TressCard <TressCard
ref="treesCardRef" ref="treesCardRef"
:scenarioId="currentScenarioId" :scenarioId="currentScenarioId"
:platformId="currentPlatformId" :treeId="currentTreeId"
@create-tree="handleCreateTree" @create-tree="handleCreateTree"
@select-tree="handleSelectTree" @select-tree="handleSelectTree"
/> />
@@ -128,6 +128,7 @@ export default defineComponent({
const nodeCommands = ref<NodeCommand[]>([]) const nodeCommands = ref<NodeCommand[]>([])
const currentScenarioId = ref<number | undefined>(); const currentScenarioId = ref<number | undefined>();
const currentPlatformId = ref<number | null>(null); const currentPlatformId = ref<number | null>(null);
const currentTreeId = ref<number | null>(null);
const fromScenarioPage = ref<boolean>(false); const fromScenarioPage = ref<boolean>(false);
const { const {
@@ -326,12 +327,35 @@ export default defineComponent({
selectedModelNode.value = null; selectedModelNode.value = null;
selectedNodeTaskElement.value = null; selectedNodeTaskElement.value = null;
loadSubPlatforms(currentPlatformId.value); loadSubPlatforms(currentPlatformId.value);
console.log('currentBehaviorTree.value: ', tree);
nextTick(() => { nextTick(() => {
initGraph(); initGraph();
console.log('initGraphTree: ', tree); });
};
const loadTargetTree = (tree: BehaviorTree) => {
currentTreeId.value = tree.id;
resolveBehaviorTreeGraph(tree.id, tree.xmlContent).then(nodeGraph => {
applyBehaviorTree({
...tree,
graph: nodeGraph,
});
}).catch(error => {
console.error('resolve tree graph error:', error);
message.error('加载行为树图失败');
});
};
const handleCreateTree = () => {
destroyGraph();
selectedModelNode.value = null;
selectedNodeTaskElement.value = null;
subPlatforms.value = []; // 重置下属平台
initGraphConfig();
nextTick(() => {
initGraph();
}); });
}; };
@@ -339,15 +363,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) {
resolveBehaviorTreeGraph(r.data.id, r.data.xmlContent).then(nodeGraph => { loadTargetTree(r.data);
applyBehaviorTree({
...r.data,
graph: nodeGraph,
});
}).catch(error => {
console.error('resolve tree graph error:', error);
message.error('加载行为树图失败');
});
} else { } else {
message.error(r.msg ?? '行为树不存在.'); message.error(r.msg ?? '行为树不存在.');
} }
@@ -381,18 +397,7 @@ export default defineComponent({
currentScenarioId.value = scenario.id; currentScenarioId.value = scenario.id;
}; };
const handleCreateTree = () => {
destroyGraph();
initGraphConfig();
selectedModelNode.value = null;
selectedNodeTaskElement.value = null;
subPlatforms.value = []; // 重置下属平台
nextTick(() => {
initGraph();
});
};
// 初始化X6画布 // 初始化X6画布
const initGraph = () => { const initGraph = () => {
@@ -404,9 +409,7 @@ export default defineComponent({
try { try {
graph.value = createCanvas(canvas.value); graph.value = createCanvas(canvas.value);
console.log('画布初始化成功'); console.log('画布初始化成功');
if (!currentBehaviorTree.value) {
initGraphConfig();
}
createElements(); createElements();
graph.value?.on('edge:click', (args: any) => { graph.value?.on('edge:click', (args: any) => {
@@ -457,22 +460,23 @@ export default defineComponent({
console.info('init'); console.info('init');
nextTick(() => { nextTick(() => {
initGraphConfig();
initGraph(); initGraph();
window.addEventListener('resize', handleResize);
console.log('节点挂载完成'); console.log('节点挂载完成');
window.addEventListener('resize', handleResize);
resolveQuery(); resolveQuery();
if (currentPlatformId.value) { if (currentPlatformId.value) {
findOneTreeByPlatformId(currentPlatformId.value).then(r => { findOneTreeByPlatformId(currentPlatformId.value).then(r => {
if (r.data) { if (r.data) {
handleSelectTree(r.data); loadTargetTree(r.data);
} else { } else {
handleCreateTree(); handleCreateTree();
} }
}); });
} else { } else {
currentPlatformId.value = null;
handleCreateTree(); handleCreateTree();
} }
}); });
@@ -544,6 +548,7 @@ export default defineComponent({
nodeCommands, nodeCommands,
currentScenarioId, currentScenarioId,
currentPlatformId, currentPlatformId,
currentTreeId,
platforms, platforms,
subPlatforms, subPlatforms,
scenariosCardRef, scenariosCardRef,

View File

@@ -18,7 +18,7 @@
</div> </div>
<a-list :data-source="behaviorTrees || []" size="small" style="min-height: 25vh"> <a-list :data-source="behaviorTrees || []" size="small" style="min-height: 25vh">
<template #renderItem="{ item }"> <template #renderItem="{ item }">
<a-list-item :class="{ 'ks-item-selected': platformId === item.id || selectedId === item.id }" @click="()=> handleSelect(item)"> <a-list-item :class="{ 'ks-item-selected': treeId === item.id }" @click="()=> handleSelect(item)">
<a-flex> <a-flex>
<a-tooltip placement="bottom"> <a-tooltip placement="bottom">
<template #title> <template #title>
@@ -67,7 +67,7 @@ import { substring } from '@/utils/strings';
export default defineComponent({ export default defineComponent({
props: { props: {
scenarioId: Number as PropType<number | undefined>, scenarioId: Number as PropType<number | undefined>,
platformId: Number as PropType<number | null>, treeId: Number as PropType<number | null>,
}, },
emits: ['select-tree', 'create-tree'], emits: ['select-tree', 'create-tree'],
components: { components: {
@@ -87,7 +87,6 @@ export default defineComponent({
}); });
const activeKey = ref<number>(1); const activeKey = ref<number>(1);
const totalTress = ref<number>(0); const totalTress = ref<number>(0);
const selectedId = ref<number | null>(null);
watch( watch(
() => props.scenarioId, () => props.scenarioId,
@@ -99,17 +98,7 @@ export default defineComponent({
} }
behaviorTreeQuery.value.pageNum = 1; behaviorTreeQuery.value.pageNum = 1;
behaviorTreeQuery.value.scenarioId = props.scenarioId; behaviorTreeQuery.value.scenarioId = props.scenarioId;
loadTress(() => { loadTress();
if (props.platformId) {
return;
}
// 默认选中第一个行为树
const selectedTree = behaviorTrees.value[0];
if (selectedTree) {
selectedId.value = selectedTree.id;
emit('select-tree', selectedTree);
}
});
}, },
{ immediate: true } { immediate: true }
); );
@@ -152,7 +141,6 @@ export default defineComponent({
]; ];
const handleSelect = (record: BehaviorTree) => { const handleSelect = (record: BehaviorTree) => {
selectedId.value = record.id;
emit('select-tree', record); emit('select-tree', record);
}; };
@@ -171,7 +159,6 @@ export default defineComponent({
totalTress, totalTress,
substring, substring,
activeKey, activeKey,
selectedId,
behaviorTrees, behaviorTrees,
behaviorTreeQuery, behaviorTreeQuery,
loadTress, loadTress,