wangrong
2026-08-30 4c949c0dc9bcae785c281c9d8125295f09810b15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<template>
  <div
    v-if="isComposeSelected"
    class="compose-shadow"
    :class="{ 'shadow-border': props.showBorder }"
    @mousedown="handleMouseDown"
  ></div>
</template>
 
<script setup lang="ts">
import { composeStoreWithOut } from '@/store/modules/data-visualization/compose'
import { storeToRefs } from 'pinia'
import { computed } from 'vue'
const composeStore = composeStoreWithOut()
const { areaData } = storeToRefs(composeStore)
 
const props = defineProps({
  element: {
    required: true,
    type: Object
  },
  elementIndex: {
    required: false
  },
  showBorder: {
    required: false,
    type: Boolean,
    default: true
  }
})
 
const isComposeSelected = computed(() => areaData.value.components.includes(props.element))
 
const handleMouseDown = e => {
  // 右键返回
  if (e.buttons === 2) {
    return
  }
  const index = areaData.value.components.findIndex(component => component === props.element)
  if (index != -1 && props.element.component !== 'GroupArea') {
    areaData.value.components.splice(index, 1)
    e.stopPropagation()
  }
}
</script>
 
<style lang="less" scoped>
.compose-shadow {
  position: absolute;
  width: 100%;
  height: 100%;
  top: 0;
  left: 0;
  z-index: 10;
}
 
.shadow-border {
  border: 1px solid var(--ed-color-primary);
}
</style>