|
@@ -1,10 +1,10 @@
|
|
|
<template>
|
|
|
<div
|
|
|
class="insert-position-tip"
|
|
|
- @dragenter="onDragEnterMarginPlaceholder"
|
|
|
- @dragover="onDragOverMarginPlaceholder"
|
|
|
- @dragleave="onDragLeaveMarginPlaceHolder"
|
|
|
- @drop="onDropInMarginPlaceHolder"
|
|
|
+ @dragenter="onDragEnter"
|
|
|
+ @dragover="onDragOver"
|
|
|
+ @dragleave="onDragLeave"
|
|
|
+ @drop="onDrop"
|
|
|
:style="{
|
|
|
marginLeft: marginLeft,
|
|
|
}"
|
|
@@ -15,9 +15,14 @@
|
|
|
|
|
|
<script>
|
|
|
import { mapGetters } from "vuex";
|
|
|
+import { deepClone } from "@/utils/other.js";
|
|
|
|
|
|
export default {
|
|
|
props: {
|
|
|
+ index: {
|
|
|
+ type: Number,
|
|
|
+ required: true,
|
|
|
+ },
|
|
|
positionDebug: {
|
|
|
type: String,
|
|
|
default: '',
|
|
@@ -37,6 +42,7 @@ export default {
|
|
|
},
|
|
|
computed: {
|
|
|
...mapGetters({
|
|
|
+ navInfo: 'info',
|
|
|
dragInfo: 'editorNavDragInfo',
|
|
|
}),
|
|
|
marginLeft() {
|
|
@@ -118,7 +124,7 @@ export default {
|
|
|
return false
|
|
|
}
|
|
|
},
|
|
|
- onDragEnterMarginPlaceholder(e) {
|
|
|
+ onDragEnter(e) {
|
|
|
if (!this.canDrop()) {
|
|
|
return
|
|
|
} else {
|
|
@@ -127,7 +133,7 @@ export default {
|
|
|
e.dataTransfer.dropEffect = 'move'
|
|
|
}
|
|
|
},
|
|
|
- onDragOverMarginPlaceholder(e) {
|
|
|
+ onDragOver(e) {
|
|
|
if (!this.canDrop()) {
|
|
|
return
|
|
|
} else {
|
|
@@ -135,13 +141,77 @@ export default {
|
|
|
e.dataTransfer.dropEffect = 'move'
|
|
|
}
|
|
|
},
|
|
|
- onDragLeaveMarginPlaceHolder(e) {
|
|
|
+ onDragLeave(e) {
|
|
|
// e.preventDefault()
|
|
|
e.target.style.backgroundColor = ''
|
|
|
},
|
|
|
- onDropInMarginPlaceHolder(e) {
|
|
|
+ onDrop(e) {
|
|
|
// e.preventDefault()
|
|
|
e.target.style.backgroundColor = ''
|
|
|
+
|
|
|
+ switch (this.dragInfo.type) {
|
|
|
+ case 'scene': // 被拖拽的是场景
|
|
|
+ console.log('情况3:被拖拽的是场景,插入到二级分组中');
|
|
|
+ console.log('被拖拽场景的id: ', this.dragInfo.node.id);
|
|
|
+ console.log('要插入的二级分组id: ', this.parentNode.id);
|
|
|
+ console.log('要插入的位置: ', this.index);
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 确定要插入的分组中各场景应有的weight(从1开始递增,小的先显示)
|
|
|
+ */
|
|
|
+ // eslint-disable-next-line no-case-declarations
|
|
|
+ const belongGroupCopy = deepClone(this.parentNode.children)
|
|
|
+ // eslint-disable-next-line no-case-declarations
|
|
|
+ const draggedNodeCopy = deepClone(this.dragInfo.node)
|
|
|
+ draggedNodeCopy.isCopy = true
|
|
|
+ belongGroupCopy.splice(this.index, 0, draggedNodeCopy)
|
|
|
+ // eslint-disable-next-line no-case-declarations
|
|
|
+ const toDeleteIndex = belongGroupCopy.findIndex((item) => {
|
|
|
+ return (item.id === this.dragInfo.node.id && !item.isCopy)
|
|
|
+ })
|
|
|
+ if (toDeleteIndex >= 0) {
|
|
|
+ belongGroupCopy.splice(toDeleteIndex, 1)
|
|
|
+ }
|
|
|
+ for (let [index, elem] of belongGroupCopy.entries()) {
|
|
|
+ elem.weight = index + 1
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 真正修改场景原始数据的weight和所属分组
|
|
|
+ */
|
|
|
+ for (const eachSceneCopy of belongGroupCopy) {
|
|
|
+ for (const eachScene of this.navInfo.scenes) {
|
|
|
+ if (eachSceneCopy.id === eachScene.id) {
|
|
|
+ this.$set( eachScene, 'weight', eachSceneCopy.weight )
|
|
|
+ }
|
|
|
+ if (this.dragInfo.node.id === eachScene.id) {
|
|
|
+ eachScene.category = this.parentNode.id // 注意category拼写!
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ break;
|
|
|
+ case 'topologyGroupLevel2': // 被拖拽的是拓扑结构中二级分组
|
|
|
+ if (this.topologyLevel === 1) {
|
|
|
+ console.log('情况5:被拖拽的是拓扑结构中二级分组,拖拽到一级分组列表');
|
|
|
+ return true
|
|
|
+ } else if (this.topologyLevel === 2) {
|
|
|
+ console.log('情况6:被拖拽的是拓扑结构中二级分组,拖拽到二级分组列表');
|
|
|
+ return true
|
|
|
+ } else if (this.topologyLevel === 3) {
|
|
|
+ console.log('情况7:被拖拽的是拓扑结构中二级分组,拖拽到隐藏的默认二级分组中场景列表');
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 'topologyGroupLevel1': // 被拖拽的是拓扑结构中一级分组
|
|
|
+ if (this.topologyLevel === 1) {
|
|
|
+ console.log('情况10:被拖拽的是拓扑结构中一级分组,拖拽到一级分组列表');
|
|
|
+ } else if (this.topologyLevel === 2) { // 拖拽到二级分组列表
|
|
|
+ console.log('情况11:被拖拽的一级分组只有一个隐藏的默认二级分组,拖拽到二级分组列表');
|
|
|
+ } else if (this.topologyLevel === 3) { // 拖拽到场景列表
|
|
|
+ console.log('情况14:被拖拽的一级分组只有一个隐藏的默认二级分组,拖拽到另一个一级分组中隐藏的默认二级分组中的场景列表');
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|