diff --git a/modeler/src/views/decision/builder/graph.ts b/modeler/src/views/decision/builder/graph.ts index 56324c3..12e0774 100644 --- a/modeler/src/views/decision/builder/graph.ts +++ b/modeler/src/views/decision/builder/graph.ts @@ -79,7 +79,7 @@ export const createGraphConnectingAttributes = (): Partial => { const targetData = targetCell.getData() as ModelElement; // 根节点不能作为子节点 - if (targetData.type === 'startEvent') { + if (targetData.category === 'root') { return false; } diff --git a/modeler/src/views/decision/builder/node.vue b/modeler/src/views/decision/builder/node.vue index 95910ee..9f56662 100644 --- a/modeler/src/views/decision/builder/node.vue +++ b/modeler/src/views/decision/builder/node.vue @@ -3,18 +3,19 @@ -
+
@@ -30,7 +31,7 @@ {{ substring(element?.description ?? (element?.name ?? '-'), 40) }}

-
+
@@ -190,7 +191,7 @@ export default defineComponent({ border-radius: 0; font-size: 12px; padding: 10px 30px !important; - border-top: 1px solid rgba(108, 99, 255, 0.5); + //border-top: 1px solid rgba(108, 99, 255, 0.5); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; @@ -234,39 +235,42 @@ export default defineComponent({ .triangle-left { width: 0; height: 0; - border-top: 5px solid transparent; - border-right: 10px solid #3c82f6; - border-bottom: 6px solid transparent; + border-top: 4px solid transparent; + border-right: 5px solid #5da1df; + border-bottom: 4px solid transparent; position: absolute; left: -8px; - top: 2px; + top: 0.5px; + magnet: passive; } /* 右三角形 */ .triangle-right { width: 0; height: 0; - border-top: 5px solid transparent; - border-left: 10px solid #3c82f6; - border-bottom: 6px solid transparent; + border-top: 4px solid transparent; + border-left: 5px solid #5da1df; + border-bottom: 4px solid transparent; position: absolute; right: -8px; - top: 2px; + top: 0.5px; + magnet: passive; } } // 左侧入桩样式 .port-in { - background-color: #6C63FF; + //background-color: #3c82f6; margin-right: 8px; //border: 1px solid #093866; magnet: passive; box-shadow: none; - width: 15px; - height: 15px; + width: 13px; + height: 13px; display: block; - background: url('@/assets/icons/point.svg') center / 100% 100%; + //background: url('@/assets/icons/point.svg') center / 100% 100%; + border: 2px solid #5da1df; position: absolute; //top: 7px; @@ -279,10 +283,12 @@ export default defineComponent({ margin-right: 5px; magnet: active; box-shadow: none; - width: 15px; - height: 15px; + width: 13px; + height: 13px; display: block; - background: url('@/assets/icons/point.svg') center / 100% 100%; + //background: url('@/assets/icons/point.svg') center / 100% 100%; + border: 2px solid #5da1df; + background:#5da1df; position: absolute; //right: 8px; @@ -302,9 +308,6 @@ export default defineComponent({ } &.ks-designer-root-node{ - .ant-card-head { - background: url('@/assets/icons/card-head-gray.png') center / 100% 100%; - } .ks-designer-node-icon { background: url('@/assets/icons/icon-root.svg') center / 100% 100%; } @@ -320,32 +323,66 @@ export default defineComponent({ } &.ks-designer-sequence-node{ - .ant-card-head { - background: url('@/assets/icons/card-head-green.png') center / 100% 100%; - } .ks-designer-node-icon { background: url('@/assets/icons/icon-sequence.svg') center / 100% 100%; } } &.ks-designer-parallel-node{ - .ant-card-head { - background: url('@/assets/icons/card-head-blue.png') center / 100% 100%; - } .ks-designer-node-icon { background: url('@/assets/icons/icon-parallel.svg') center / 100% 100%; } } &.ks-designer-precondition-node{ - .ant-card-head { - background: url('@/assets/icons/card-head-dark.png') center / 100% 100%; - } .ks-designer-node-icon { background: url('@/assets/icons/icon-branch.svg') center / 100% 100%; } } + &.ks-designer-group-control, + &.ks-designer-group-condition { + .ant-card-head{ + display:none; + } + .ant-card-body { + height: calc(100%); + border-radius: 8px; + background: url('@/assets/icons/card-head-gray.png') center / 100% 100%; + } + + &.ks-designer-root-node{ + .ant-card-body { + background: url('@/assets/icons/card-head-dark.png') center / 100% 100%; + } + } + &.ks-designer-sequence-node{ + .ant-card-body { + background: url('@/assets/icons/card-head-green.png') center / 100% 100%; + } + } + + &.ks-designer-parallel-node{ + .ant-card-body { + background: url('@/assets/icons/card-head-blue.png') center / 100% 100%; + } + } + + &.ks-designer-precondition-node{ + .ant-card-body { + background: url('@/assets/icons/card-head-dark.png') center / 100% 100%; + } + } + + .port-in, + .port-out { + top: 40%; + } + .ks-designer-node-text{ + line-height: 38px; + } + } + //&.ks-designer-precondition-node{ // border:0; // box-shadown:none; diff --git a/modeler/src/views/decision/builder/utils.ts b/modeler/src/views/decision/builder/utils.ts index 0355d5a..76f9015 100644 --- a/modeler/src/views/decision/builder/utils.ts +++ b/modeler/src/views/decision/builder/utils.ts @@ -18,10 +18,9 @@ export const createGraphTaskElement = (element: GraphTaskElement, width: number if (!realHeight) { realHeight = 120; } - // if(element.category === 'precondition') { - // width = 100; - // realHeight = 100; - // } + if(element.group === 'condition' || element.group === 'control') { + realHeight = 60; + } return { shape: 'task', id: element.key, diff --git a/modeler/src/views/decision/designer.vue b/modeler/src/views/decision/designer.vue index d37b415..315168f 100644 --- a/modeler/src/views/decision/designer.vue +++ b/modeler/src/views/decision/designer.vue @@ -74,7 +74,7 @@ import { Wrapper } from '@/components/wrapper'; import { safePreventDefault, safeStopPropagation } from '@/utils/event'; import Header from './header.vue'; import Properties from './properties.vue'; -import type { BehaviorTree, NodeTemplate } from './types'; +import type { BehaviorTree, NodeDragTemplate, NodeTemplate } from './types'; import type { GraphTaskElement, NodeGraph } from './builder/element'; import { useGraphCanvas } from './builder/hooks'; import { registerNodeElement } from './builder/register'; @@ -106,7 +106,7 @@ export default defineComponent({ const canvas = ref(null); const graph = ref(null); const currentZoom = ref(1); - const draggedNodeData = ref(null); + const draggedNodeData = ref(null); const isDraggingOver = ref(false); const currentTreeEditing = ref(false); const currentBehaviorTree = ref(null); @@ -127,7 +127,7 @@ export default defineComponent({ } = useGraphCanvas(); // 处理拖动开始 - const handleDragStart = (nm: NodeTemplate) => { + const handleDragStart = (nm: NodeDragTemplate) => { draggedNodeData.value = nm; }; @@ -178,7 +178,7 @@ export default defineComponent({ try { // 获取拖动的数据 - const template = draggedNodeData.value as NodeTemplate; + const template = draggedNodeData.value as NodeDragTemplate; if (!hasElements(graph.value as Graph) && template.type !== 'root') { message.error('请先添加根节点.'); diff --git a/modeler/src/views/decision/nodes-card.vue b/modeler/src/views/decision/nodes-card.vue index 2a677c8..f4e2a7e 100644 --- a/modeler/src/views/decision/nodes-card.vue +++ b/modeler/src/views/decision/nodes-card.vue @@ -13,7 +13,7 @@ :data-type="nm.type" class="ks-model-drag-item" @dragend="handleDragEnd" - @dragstart="handleDragStart($event, nm)" + @dragstart="handleDragStart($event, nm, 'control')" > {{ nm.name }} @@ -34,7 +34,7 @@ :data-type="nm.type" class="ks-model-drag-item" @dragend="handleDragEnd" - @dragstart="handleDragStart($event, nm)" + @dragstart="handleDragStart($event, nm, 'condition')" > {{ nm.name }} @@ -55,7 +55,7 @@ :data-type="nm.type" class="ks-model-drag-item" @dragend="handleDragEnd" - @dragstart="handleDragStart($event, nm)" + @dragstart="handleDragStart($event, nm, 'action')" > {{ nm.name }} @@ -71,7 +71,7 @@