diff --git a/modeler/src/style.less b/modeler/src/style.less
index 17688b0..d51485e 100644
--- a/modeler/src/style.less
+++ b/modeler/src/style.less
@@ -986,6 +986,7 @@
width: 300px;
float: left;
margin-left: -1px;
+ background: #041b36db;
.observation-items{
//height: 160px;
diff --git a/modeler/src/views/decision/designer.vue b/modeler/src/views/decision/designer.vue
index aa3f5ef..da38a08 100644
--- a/modeler/src/views/decision/designer.vue
+++ b/modeler/src/views/decision/designer.vue
@@ -47,6 +47,8 @@
@@ -100,6 +102,7 @@ export default defineComponent({
const currentZoom = ref(1);
const draggedNodeData = ref(null);
const isDraggingOver = ref(false);
+ const currentTreeEditing = ref(false);
const currentBehaviorTree = ref(null);
const currentNodeGraph = ref(null);
const selectedModelNode = ref | null>(null);
@@ -154,6 +157,7 @@ export default defineComponent({
safePreventDefault(e);
safeStopPropagation(e);
isDraggingOver.value = false;
+ currentTreeEditing.value = false;
if (!currentBehaviorTree.value) {
message.error('请先选择或者创建行为树.');
@@ -224,6 +228,7 @@ export default defineComponent({
...r.data,
graph: nodeGraph,
};
+ currentTreeEditing.value = true;
createElements();
} else {
message.error(r.msg ?? '行为树不存在.');
@@ -275,6 +280,12 @@ export default defineComponent({
currentZoom.value = sx;
});
+ handleGraphEvent('blank:click', () => {
+ selectedModelNode.value = null;
+ selectedNodeTaskElement.value = null;
+ currentTreeEditing.value = null !== currentBehaviorTree.value;
+ });
+
handleGraphEvent('node:click', (args: any) => {
const node = args.node as Node;
const newElement = node.getData() as GraphTaskElement;
@@ -368,6 +379,7 @@ export default defineComponent({
});
return {
+ currentTreeEditing,
currentBehaviorTree,
currentNodeGraph,
selectedNodeTaskElement,
diff --git a/modeler/src/views/decision/properties.vue b/modeler/src/views/decision/properties.vue
index b10e204..538d31c 100644
--- a/modeler/src/views/decision/properties.vue
+++ b/modeler/src/views/decision/properties.vue
@@ -1,12 +1,31 @@
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
@@ -106,6 +125,7 @@
import { defineComponent, onMounted, type PropType, ref, watch } from 'vue';
import { CheckOutlined } from '@ant-design/icons-vue';
import type { ElementVariable, GraphTaskElement } from './builder/element';
+import type {BehaviorTree} from './types'
import type { Graph, Node, NodeProperties } from '@antv/x6';
import { generateKey } from '@/utils/strings';
@@ -120,15 +140,19 @@ const actionSpaceColumns = [
export default defineComponent({
components: { CheckOutlined },
props: {
+ tree: { type: [Object, null] as PropType, required: false },
+ treeEditing: { type: Boolean as PropType, required: true, default: false, },
node: { type: [Object, null] as PropType | null | undefined>, required: false },
graph: { type: [Object, null] as PropType, required: true }
},
- emits: ['update-element'],
+ emits: ['update-element', 'update-tree'],
setup(props, { emit }) {
const activeTopTabsKey = ref('1');
const activeBottomTabsKey = ref('1');
const activeBottomTabs2Key = ref('1');
+ const currentTree = ref(props.tree ?? null);
+ const treeEditing = ref(props.treeEditing);
const currentNode = ref(props.node ?? null);
const currentElement = ref(null);
@@ -186,6 +210,22 @@ export default defineComponent({
{ deep: true, immediate: true },
);
+ watch(
+ () => props.tree,
+ (n?: BehaviorTree | null | undefined) => {
+ currentTree.value = n ?? null;
+ },
+ { deep: true, immediate: true },
+ );
+
+ watch(
+ () => props.treeEditing,
+ (n?: boolean | null | undefined) => {
+ treeEditing.value = n === true;
+ },
+ { deep: true, immediate: true },
+ );
+
watch(() => currentElement.value, () => updateNode(), { deep: true });
onMounted(() => load());
@@ -198,6 +238,8 @@ export default defineComponent({
currentElement,
addVariable,
removeVariable,
+ currentTree,
+ treeEditing,
// currentElementParameters,
};
},