index.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. <template>
  2. <div class="go-edit-group-box">
  3. <edit-shape-box
  4. :key="groupData.id"
  5. :data-id="groupData.id"
  6. :index="groupIndex"
  7. :item="groupData"
  8. :hiddenPoint="true"
  9. :class="animationsClass(groupData.styles.animations)"
  10. :style="{
  11. ...useComponentStyle(groupData.attr, groupIndex),
  12. ...useSizeStyle(groupData.attr),
  13. ...getFilterStyle(groupData.styles),
  14. ...getTransformStyle(groupData.styles)
  15. }"
  16. @click="mouseClickHandle($event, groupData)"
  17. @mousedown="mousedownHandle($event, groupData)"
  18. @mouseenter="mouseenterHandle($event, groupData)"
  19. @mouseleave="mouseleaveHandle($event, groupData)"
  20. @contextmenu="handleContextMenu($event, groupData, optionsHandle)"
  21. >
  22. <!-- 组合组件 -->
  23. <edit-shape-box
  24. v-for="item in groupData.groupList"
  25. :key="item.id"
  26. :data-id="item.id"
  27. :index="groupIndex"
  28. :item="item"
  29. :hiddenPoint="true"
  30. :style="{
  31. ...useComponentStyle(item.attr, groupIndex)
  32. }"
  33. >
  34. <component
  35. class="edit-content-chart"
  36. :class="animationsClass(item.styles.animations)"
  37. :is="item.chartConfig.chartKey"
  38. :chartConfig="item"
  39. :themeSetting="themeSetting"
  40. :themeColor="themeColor"
  41. :style="{
  42. ...useSizeStyle(item.attr),
  43. ...getFilterStyle(item.styles),
  44. ...getTransformStyle(item.styles)
  45. }"
  46. ></component>
  47. </edit-shape-box>
  48. </edit-shape-box>
  49. </div>
  50. </template>
  51. <script setup lang="ts">
  52. import { computed, PropType } from 'vue'
  53. import { MenuEnum } from '@/enums/editPageEnum'
  54. import { chartColors } from '@/settings/chartThemes/index'
  55. import { CreateComponentType, CreateComponentGroupType } from '@/packages/index.d'
  56. import { MenuOptionsItemType } from '@/views/chart/hooks/useContextMenu.hook.d'
  57. import { animationsClass, getFilterStyle, getTransformStyle } from '@/utils'
  58. import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
  59. import { useContextMenu, divider } from '@/views/chart/hooks/useContextMenu.hook'
  60. import { useMouseHandle } from '../../hooks/useDrag.hook'
  61. import { useComponentStyle, useSizeStyle } from '../../hooks/useStyle.hook'
  62. import { EditShapeBox } from '../../components/EditShapeBox'
  63. const props = defineProps({
  64. groupData: {
  65. type: Object as PropType<CreateComponentGroupType>,
  66. required: true
  67. },
  68. groupIndex: {
  69. type: Number,
  70. required: true
  71. }
  72. })
  73. const chartEditStore = useChartEditStore()
  74. const { handleContextMenu } = useContextMenu()
  75. // 点击事件
  76. const { mouseenterHandle, mouseleaveHandle, mousedownHandle, mouseClickHandle } = useMouseHandle()
  77. // 右键
  78. const optionsHandle = (
  79. targetList: MenuOptionsItemType[],
  80. allList: MenuOptionsItemType[],
  81. targetInstance: CreateComponentType
  82. ) => {
  83. const filter = (menulist: MenuEnum[]) => {
  84. return allList.filter(i => menulist.includes(i.key as MenuEnum))
  85. }
  86. // 多选处理
  87. if (chartEditStore.getTargetChart.selectId.length > 1) {
  88. return filter([MenuEnum.GROUP, MenuEnum.DELETE])
  89. } else {
  90. const statusMenuEnums: MenuEnum[] = []
  91. if (targetInstance.status.lock) {
  92. statusMenuEnums.push(MenuEnum.LOCK)
  93. } else {
  94. statusMenuEnums.push(MenuEnum.UNLOCK)
  95. }
  96. if (targetInstance.status.hide) {
  97. statusMenuEnums.push(MenuEnum.HIDE)
  98. } else {
  99. statusMenuEnums.push(MenuEnum.SHOW)
  100. }
  101. // 单选
  102. const singleMenuEnums = [MenuEnum.UN_GROUP]
  103. return [
  104. ...filter(singleMenuEnums),
  105. divider(),
  106. ...targetList.filter(i => !statusMenuEnums.includes(i.key as MenuEnum))
  107. ]
  108. }
  109. }
  110. // 配置项
  111. const themeColor = computed(() => {
  112. const chartThemeColor = chartEditStore.getEditCanvasConfig.chartThemeColor
  113. return chartColors[chartThemeColor]
  114. })
  115. // 主题色
  116. const themeSetting = computed(() => {
  117. const chartThemeSetting = chartEditStore.getEditCanvasConfig.chartThemeSetting
  118. return chartThemeSetting
  119. })
  120. </script>