index.vue 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <template>
  2. <div
  3. class="go-edit-range go-transition"
  4. :style="rangeStyle"
  5. @mousedown="mousedownHandleUnStop($event, undefined)"
  6. >
  7. <slot></slot>
  8. <!-- 拖拽时的辅助线 -->
  9. <EditAlignLine></EditAlignLine>
  10. </div>
  11. </template>
  12. <script setup lang="ts">
  13. import { toRefs, computed } from 'vue'
  14. import { useSizeStyle } from '../../hooks/useStyle.hook'
  15. import { mousedownHandleUnStop } from '../../hooks/useDrag.hook'
  16. import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
  17. import { EditAlignLine } from '../EditAlignLine/index'
  18. const chartEditStore = useChartEditStore()
  19. const { getEditCanvasConfig, getEditCanvas } = toRefs(chartEditStore)
  20. const size = computed(() => {
  21. return {
  22. w: getEditCanvasConfig.value.width,
  23. h: getEditCanvasConfig.value.height
  24. }
  25. })
  26. const rangeStyle = computed(() => {
  27. // 缩放
  28. const scale = {
  29. transform: `scale(${getEditCanvas.value.scale})`
  30. }
  31. // 设置背景色和图片背景
  32. const background = getEditCanvasConfig.value.background
  33. const backgroundImage = getEditCanvasConfig.value.backgroundImage
  34. const selectColor = getEditCanvasConfig.value.selectColor
  35. const backgroundColor = background ? background : undefined
  36. const computedBackground = selectColor
  37. ? { background: backgroundColor }
  38. : { background: `url(${backgroundImage}) no-repeat center/100% !important` }
  39. // @ts-ignore
  40. return { ...useSizeStyle(size.value), ...computedBackground, ...scale }
  41. })
  42. </script>
  43. <style lang="scss" scoped>
  44. @include go(edit-range) {
  45. position: relative;
  46. border: 1px solid;
  47. border-radius: 15px;
  48. transform-origin: left top;
  49. @include fetch-theme('box-shadow');
  50. @include filter-border-color('hover-border-color');
  51. @include fetch-theme-custom('border-color', 'background-color4');
  52. @include filter-bg-color('background-color2');
  53. }
  54. @include go(edit-range-model) {
  55. z-index: -1;
  56. position: absolute;
  57. left: 0;
  58. top: 0;
  59. border-radius: 15px;
  60. border: 1px solid rgba(0, 0, 0, 0);
  61. background-color: greenyellow;
  62. opacity: 0.2;
  63. }
  64. </style>