DefaultTip.vue 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <template>
  2. <div class="tip-content">
  3. <span v-show="isDefault">默认摄像头</span>
  4. <span>{{ positionText }}</span>
  5. <span>{{ sizeText }}</span>
  6. <div v-if="props.position === TipPositionEnum.TOP" class="tip-narrow bottom"></div>
  7. <div v-else-if="props.position === TipPositionEnum.BOTTOM" class="tip-narrow top"></div>
  8. <div v-else-if="props.position === TipPositionEnum.RIGHT" class="tip-narrow left"></div>
  9. <div v-else class="tip-narrow right"></div>
  10. </div>
  11. </template>
  12. <script setup lang="ts">
  13. import { computed } from 'vue';
  14. import { TipPositionEnum, camerasGroupType } from '../type';
  15. const props = withDefaults(defineProps<{ position: TipPositionEnum; isDefault: boolean, cameraInfo: camerasGroupType | undefined }>(), {
  16. position: TipPositionEnum.TOP,
  17. });
  18. const positionText = computed(() => {
  19. const cameraInfo = props.cameraInfo;
  20. if (!cameraInfo) return ''
  21. const x = cameraInfo.groupConfig.x?.toFixed(2);
  22. const y = cameraInfo.groupConfig.y?.toFixed(2);
  23. return `位置:(x:${x},y:${y})`
  24. })
  25. const sizeText = computed(() => {
  26. const cameraInfo = props.cameraInfo;
  27. if (!cameraInfo) return ''
  28. const scaleX = cameraInfo.groupConfig.scaleX ? cameraInfo.groupConfig.scaleX : 1;
  29. const scaleY = cameraInfo.groupConfig.scaleY ? cameraInfo.groupConfig.scaleY : 1;
  30. const w = Math.round(cameraInfo.config.width! * scaleX)
  31. const h = Math.round(cameraInfo.config.height! * scaleY)
  32. return `大小:(w:${w},h:${h})`
  33. })
  34. </script>
  35. <style scoped lang="scss">
  36. .tip-content {
  37. position: relative;
  38. padding: 5px;
  39. background-color: #3c3c3d;
  40. border-radius: 8px;
  41. display: flex;
  42. flex-direction: column;
  43. justify-content: center;
  44. align-items: center;
  45. font-size: 14px;
  46. font-weight: 400;
  47. color: #ffffff;
  48. margin: 5px;
  49. }
  50. .tip-narrow {
  51. position: absolute;
  52. border: 5px solid transparent;
  53. &.bottom {
  54. top: 100%;
  55. left: 50%;
  56. border-top-color: #3c3c3d;
  57. transform: translateX(-50%);
  58. }
  59. &.top {
  60. top: 0%;
  61. left: 50%;
  62. border-bottom-color: #3c3c3d;
  63. transform: translate(-50%, -100%);
  64. }
  65. &.left {
  66. top: 50%;
  67. left: 0%;
  68. border-right-color: #3c3c3d;
  69. transform: translate(-100%, -50%);
  70. }
  71. &.right {
  72. top: 50%;
  73. right: 0%;
  74. border-left-color: #3c3c3d;
  75. transform: translate(100%, -50%);
  76. }
  77. }
  78. </style>