|
|
@@ -1,7 +1,10 @@
|
|
|
<template>
|
|
|
<div class="scene-group">
|
|
|
- <div class="top-bar" @click="onClick"
|
|
|
- :style="{
|
|
|
+ <div
|
|
|
+ class="top-bar"
|
|
|
+ :class="isConfirmingDeletion ? '' : 'show-icons-on-hover'"
|
|
|
+ @click="onClickTopBar"
|
|
|
+ :style="{
|
|
|
paddingLeft: topBarPaddingLeft,
|
|
|
}"
|
|
|
>
|
|
|
@@ -9,26 +12,47 @@
|
|
|
<i v-show="isExpanded" class="iconfont icon-editor_folder_on folder_expalded"></i>
|
|
|
<i v-show="!isExpanded" class="iconfont icon-editor_folder_off folder_collapsed"></i>
|
|
|
<span class="group-name" v-title="groupNode.name">{{groupNode.name}}</span>
|
|
|
- <i v-show="level === 1" class="iconfont icon-editor_list_add icon-add" v-tool-tip-wrapper>
|
|
|
+ <i v-show="level === 1"
|
|
|
+ class="iconfont icon-editor_list_add icon-add"
|
|
|
+ v-tool-tip-wrapper
|
|
|
+ >
|
|
|
<TooltipInEditor
|
|
|
:text="'新增二级分组'"
|
|
|
></TooltipInEditor>
|
|
|
</i>
|
|
|
- <i class="iconfont icon-editor_list_image icon-image" v-tool-tip-wrapper>
|
|
|
+ <i
|
|
|
+ class="iconfont icon-editor_list_image icon-image"
|
|
|
+ v-tool-tip-wrapper
|
|
|
+ >
|
|
|
<TooltipInEditor
|
|
|
:text="'新增全景图或三维场景'"
|
|
|
></TooltipInEditor>
|
|
|
</i>
|
|
|
- <i class="iconfont icon-editor_list_edit icon-edit" v-tool-tip-wrapper>
|
|
|
+ <i
|
|
|
+ class="iconfont icon-editor_list_edit icon-edit"
|
|
|
+ v-tool-tip-wrapper
|
|
|
+ >
|
|
|
<TooltipInEditor
|
|
|
:text="'重命名'"
|
|
|
></TooltipInEditor>
|
|
|
</i>
|
|
|
- <i class="iconfont icon-editor_list_delete icon-delete" v-tool-tip-wrapper>
|
|
|
+ <i
|
|
|
+ class="iconfont icon-editor_list_delete icon-delete"
|
|
|
+ v-tool-tip-wrapper
|
|
|
+ @click.stop="onRequestForDelete"
|
|
|
+ >
|
|
|
<TooltipInEditor
|
|
|
:text="'删除'"
|
|
|
></TooltipInEditor>
|
|
|
</i>
|
|
|
+ <div class="deletion-confirm-wrap">
|
|
|
+ <div class="deletion-confirm" :class="isConfirmingDeletion ? 'show' : 'hide'"
|
|
|
+ v-clickoutside="onRequestForCancelDelete"
|
|
|
+ @click.stop="onConfirmDelete"
|
|
|
+ >
|
|
|
+ 删除
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
|
|
|
<div class="group-content" v-if="isExpanded">
|
|
|
@@ -96,6 +120,7 @@ export default {
|
|
|
data() {
|
|
|
return {
|
|
|
isExpanded: false,
|
|
|
+ isConfirmingDeletion: false,
|
|
|
}
|
|
|
},
|
|
|
computed: {
|
|
|
@@ -107,7 +132,10 @@ export default {
|
|
|
},
|
|
|
},
|
|
|
methods: {
|
|
|
- onClick() {
|
|
|
+ onClickTopBar() {
|
|
|
+ if (this.isConfirmingDeletion) {
|
|
|
+ return
|
|
|
+ }
|
|
|
this.isExpanded = !this.isExpanded
|
|
|
if (this.isExpanded) {
|
|
|
this.$bus.emit('scene-group-expanded', this.groupNode.id, this.level)
|
|
|
@@ -123,7 +151,23 @@ export default {
|
|
|
},
|
|
|
onDeleteScene(...params) {
|
|
|
this.$emit('deleteScene', ...params)
|
|
|
- }
|
|
|
+ },
|
|
|
+ onRequestForDelete() {
|
|
|
+ this.isConfirmingDeletion = true
|
|
|
+ },
|
|
|
+ onRequestForCancelDelete() {
|
|
|
+ if (!this.isConfirmingDeletion) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 先保持isConfirmingDeletion不变,因为onClickTopBar可能要用到
|
|
|
+ setTimeout(() => {
|
|
|
+ this.isConfirmingDeletion = false
|
|
|
+ }, 0);
|
|
|
+ },
|
|
|
+ onConfirmDelete() {
|
|
|
+ // this.$emit('delete', this.sceneInfo.id)
|
|
|
+ this.isConfirmingDeletion = false
|
|
|
+ },
|
|
|
},
|
|
|
mounted() {
|
|
|
this.$bus.on('scene-group-expanded', this.onOtherSceneGroupExpanded)
|
|
|
@@ -138,6 +182,7 @@ export default {
|
|
|
.scene-group {
|
|
|
margin-top: 6px;
|
|
|
.top-bar {
|
|
|
+ position: relative;
|
|
|
color: rgba(255, 255, 255, 0.6);
|
|
|
height: 40px;
|
|
|
border-radius: 4px;
|
|
|
@@ -151,6 +196,8 @@ export default {
|
|
|
> .group-name {
|
|
|
width: 120px;
|
|
|
}
|
|
|
+ }
|
|
|
+ &.show-icons-on-hover:hover {
|
|
|
> .icon-add, .icon-image, .icon-edit, .icon-delete {
|
|
|
display: block;
|
|
|
}
|
|
|
@@ -212,6 +259,42 @@ export default {
|
|
|
color: #fa5555;
|
|
|
}
|
|
|
}
|
|
|
+ .deletion-confirm-wrap {
|
|
|
+ position: absolute;
|
|
|
+ top: 0;
|
|
|
+ bottom: 0;
|
|
|
+ right: 0;
|
|
|
+ width: 44px;
|
|
|
+ overflow: hidden;
|
|
|
+ pointer-events: none;
|
|
|
+ border-top-right-radius: 4px;
|
|
|
+ border-bottom-right-radius: 4px;
|
|
|
+ > .deletion-confirm {
|
|
|
+ position: absolute;
|
|
|
+ top: 0;
|
|
|
+ bottom: 0;
|
|
|
+ width: 100%;
|
|
|
+ background: #FA5555;
|
|
|
+ transition: right 0.3s;
|
|
|
+ cursor: pointer;
|
|
|
+ text-align: center;
|
|
|
+ font-size: 12px;
|
|
|
+ color: #fff;
|
|
|
+ pointer-events: auto;
|
|
|
+ &::after {
|
|
|
+ content: '';
|
|
|
+ height: 100%;
|
|
|
+ vertical-align: middle;
|
|
|
+ display: inline-block;
|
|
|
+ }
|
|
|
+ &.show {
|
|
|
+ right: 0;
|
|
|
+ }
|
|
|
+ &.hide {
|
|
|
+ right: -44px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
</style>
|