Initial commit
This commit is contained in:
@@ -986,6 +986,7 @@
|
|||||||
width: 300px;
|
width: 300px;
|
||||||
float: left;
|
float: left;
|
||||||
margin-left: -1px;
|
margin-left: -1px;
|
||||||
|
background: #041b36db;
|
||||||
|
|
||||||
.observation-items{
|
.observation-items{
|
||||||
//height: 160px;
|
//height: 160px;
|
||||||
|
|||||||
@@ -47,6 +47,8 @@
|
|||||||
<Properties
|
<Properties
|
||||||
v-if="graph"
|
v-if="graph"
|
||||||
@update-element="handleUpdateElement"
|
@update-element="handleUpdateElement"
|
||||||
|
:tree="currentBehaviorTree"
|
||||||
|
:tree-editing="currentTreeEditing"
|
||||||
:element="selectedNodeTaskElement"
|
:element="selectedNodeTaskElement"
|
||||||
:graph="graph as any"
|
:graph="graph as any"
|
||||||
:node="selectedModelNode as any" />
|
:node="selectedModelNode as any" />
|
||||||
@@ -100,6 +102,7 @@ export default defineComponent({
|
|||||||
const currentZoom = ref<number>(1);
|
const currentZoom = ref<number>(1);
|
||||||
const draggedNodeData = ref<NodeTemplate | null>(null);
|
const draggedNodeData = ref<NodeTemplate | null>(null);
|
||||||
const isDraggingOver = ref(false);
|
const isDraggingOver = ref(false);
|
||||||
|
const currentTreeEditing = ref<boolean>(false);
|
||||||
const currentBehaviorTree = ref<BehaviorTree | null>(null);
|
const currentBehaviorTree = ref<BehaviorTree | null>(null);
|
||||||
const currentNodeGraph = ref<NodeGraph | null>(null);
|
const currentNodeGraph = ref<NodeGraph | null>(null);
|
||||||
const selectedModelNode = ref<Node<NodeProperties> | null>(null);
|
const selectedModelNode = ref<Node<NodeProperties> | null>(null);
|
||||||
@@ -154,6 +157,7 @@ export default defineComponent({
|
|||||||
safePreventDefault(e);
|
safePreventDefault(e);
|
||||||
safeStopPropagation(e);
|
safeStopPropagation(e);
|
||||||
isDraggingOver.value = false;
|
isDraggingOver.value = false;
|
||||||
|
currentTreeEditing.value = false;
|
||||||
|
|
||||||
if (!currentBehaviorTree.value) {
|
if (!currentBehaviorTree.value) {
|
||||||
message.error('请先选择或者创建行为树.');
|
message.error('请先选择或者创建行为树.');
|
||||||
@@ -224,6 +228,7 @@ export default defineComponent({
|
|||||||
...r.data,
|
...r.data,
|
||||||
graph: nodeGraph,
|
graph: nodeGraph,
|
||||||
};
|
};
|
||||||
|
currentTreeEditing.value = true;
|
||||||
createElements();
|
createElements();
|
||||||
} else {
|
} else {
|
||||||
message.error(r.msg ?? '行为树不存在.');
|
message.error(r.msg ?? '行为树不存在.');
|
||||||
@@ -275,6 +280,12 @@ export default defineComponent({
|
|||||||
currentZoom.value = sx;
|
currentZoom.value = sx;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
handleGraphEvent('blank:click', () => {
|
||||||
|
selectedModelNode.value = null;
|
||||||
|
selectedNodeTaskElement.value = null;
|
||||||
|
currentTreeEditing.value = null !== currentBehaviorTree.value;
|
||||||
|
});
|
||||||
|
|
||||||
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;
|
||||||
@@ -368,6 +379,7 @@ export default defineComponent({
|
|||||||
});
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
currentTreeEditing,
|
||||||
currentBehaviorTree,
|
currentBehaviorTree,
|
||||||
currentNodeGraph,
|
currentNodeGraph,
|
||||||
selectedNodeTaskElement,
|
selectedNodeTaskElement,
|
||||||
|
|||||||
@@ -1,12 +1,31 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="ks-model-builder-right">
|
<div class="ks-model-builder-right">
|
||||||
<template v-if="currentElement">
|
<template v-if="currentElement || tree">
|
||||||
|
|
||||||
<a-tabs v-model:activeKey="activeTopTabsKey" class="ks-model-builder-tabs settings-tab">
|
<a-tabs v-model:activeKey="activeTopTabsKey" class="ks-model-builder-tabs settings-tab">
|
||||||
<template #leftExtra>
|
<template #leftExtra>
|
||||||
<span class="ks-model-builder-title-icon icon-input"></span>
|
<span class="ks-model-builder-title-icon icon-input"></span>
|
||||||
</template>
|
</template>
|
||||||
<a-tab-pane key="1" tab="节点属性">
|
|
||||||
|
<a-tab-pane key="1" tab="行为树属性" v-if="tree">
|
||||||
|
<a-form
|
||||||
|
autocomplete="off"
|
||||||
|
layout="vertical"
|
||||||
|
name="basic"
|
||||||
|
style="padding-bottom:15px;"
|
||||||
|
>
|
||||||
|
<a-form-item label="行为树名称">
|
||||||
|
<a-input size="small" v-model:value="tree.name" placeholder="行为树名称" />
|
||||||
|
</a-form-item>
|
||||||
|
|
||||||
|
<a-form-item label="行为树说明">
|
||||||
|
<a-textarea size="small" v-model:value="tree.description" placeholder="行为树说明" />
|
||||||
|
</a-form-item>
|
||||||
|
|
||||||
|
</a-form>
|
||||||
|
</a-tab-pane>
|
||||||
|
|
||||||
|
<a-tab-pane key="2" tab="节点属性" v-if="currentElement">
|
||||||
<a-form
|
<a-form
|
||||||
autocomplete="off"
|
autocomplete="off"
|
||||||
layout="vertical"
|
layout="vertical"
|
||||||
@@ -42,7 +61,7 @@
|
|||||||
|
|
||||||
</a-tabs>
|
</a-tabs>
|
||||||
|
|
||||||
<a-tabs v-model:activeKey="activeBottomTabsKey" class="ks-model-builder-tabs parameters-tabs">
|
<a-tabs v-if="currentElement" v-model:activeKey="activeBottomTabsKey" class="ks-model-builder-tabs parameters-tabs">
|
||||||
<template #leftExtra>
|
<template #leftExtra>
|
||||||
<span class="ks-model-builder-title-icon icon-input"></span>
|
<span class="ks-model-builder-title-icon icon-input"></span>
|
||||||
</template>
|
</template>
|
||||||
@@ -106,6 +125,7 @@
|
|||||||
import { defineComponent, onMounted, type PropType, ref, watch } from 'vue';
|
import { defineComponent, onMounted, type PropType, ref, watch } from 'vue';
|
||||||
import { CheckOutlined } from '@ant-design/icons-vue';
|
import { CheckOutlined } from '@ant-design/icons-vue';
|
||||||
import type { ElementVariable, GraphTaskElement } from './builder/element';
|
import type { ElementVariable, GraphTaskElement } from './builder/element';
|
||||||
|
import type {BehaviorTree} from './types'
|
||||||
import type { Graph, Node, NodeProperties } from '@antv/x6';
|
import type { Graph, Node, NodeProperties } from '@antv/x6';
|
||||||
import { generateKey } from '@/utils/strings';
|
import { generateKey } from '@/utils/strings';
|
||||||
|
|
||||||
@@ -120,15 +140,19 @@ const actionSpaceColumns = [
|
|||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
components: { CheckOutlined },
|
components: { CheckOutlined },
|
||||||
props: {
|
props: {
|
||||||
|
tree: { type: [Object, null] as PropType<BehaviorTree | null | undefined>, required: false },
|
||||||
|
treeEditing: { type: Boolean as PropType<boolean>, required: true, default: false, },
|
||||||
node: { type: [Object, null] as PropType<Node<NodeProperties> | null | undefined>, required: false },
|
node: { type: [Object, null] as PropType<Node<NodeProperties> | null | undefined>, required: false },
|
||||||
graph: { type: [Object, null] as PropType<Graph | null | undefined>, required: true }
|
graph: { type: [Object, null] as PropType<Graph | null | undefined>, required: true }
|
||||||
},
|
},
|
||||||
emits: ['update-element'],
|
emits: ['update-element', 'update-tree'],
|
||||||
setup(props, { emit }) {
|
setup(props, { emit }) {
|
||||||
const activeTopTabsKey = ref<string>('1');
|
const activeTopTabsKey = ref<string>('1');
|
||||||
const activeBottomTabsKey = ref<string>('1');
|
const activeBottomTabsKey = ref<string>('1');
|
||||||
const activeBottomTabs2Key = ref<string>('1');
|
const activeBottomTabs2Key = ref<string>('1');
|
||||||
|
|
||||||
|
const currentTree = ref<BehaviorTree| null>(props.tree ?? null);
|
||||||
|
const treeEditing = ref<boolean>(props.treeEditing);
|
||||||
const currentNode = ref<Node | null>(props.node ?? null);
|
const currentNode = ref<Node | null>(props.node ?? null);
|
||||||
const currentElement = ref<GraphTaskElement | null>(null);
|
const currentElement = ref<GraphTaskElement | null>(null);
|
||||||
|
|
||||||
@@ -186,6 +210,22 @@ export default defineComponent({
|
|||||||
{ deep: true, immediate: true },
|
{ 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 });
|
watch(() => currentElement.value, () => updateNode(), { deep: true });
|
||||||
|
|
||||||
onMounted(() => load());
|
onMounted(() => load());
|
||||||
@@ -198,6 +238,8 @@ export default defineComponent({
|
|||||||
currentElement,
|
currentElement,
|
||||||
addVariable,
|
addVariable,
|
||||||
removeVariable,
|
removeVariable,
|
||||||
|
currentTree,
|
||||||
|
treeEditing,
|
||||||
// currentElementParameters,
|
// currentElementParameters,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user