SignalList.vue 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <!--信号源列表组件-->
  2. <template>
  3. <!--信号源容器-->
  4. <draggable
  5. :style="{
  6. left:signalBorder[0] ? signalBorder[0].Left*bigScale+'px' : '',
  7. top:signalBorder[0] ? signalBorder[0].Top*bigScale+'px' : '',
  8. width:signalBorder[0] ? signalBorder[0].Width*bigScale + 'px' : '',
  9. height:signalBorder[0] ? signalBorder[0].Height*bigScale + 'px' : '',
  10. zIndex:signalBorder[0] ? signalBorder[0].ZIndex : '',
  11. fontSize:signalBorder[0] ? signalBorder[0].FontSize*bigScale + 'px' : '',
  12. color:`#${signalBorder[0] ? signalBorder[0].ForegroundStr.slice(3) : ''}`,
  13. flexDirection: signalBorder[0] ? (signalBorder[0].Orientation === 0 ? 'column' : 'row') : '',
  14. }"
  15. class="signal_body"
  16. element="div"
  17. v-model="signalListJson"
  18. :options="dragOptions1"
  19. :move="onMove"
  20. @end="end"
  21. id="signalContainer"
  22. >
  23. <!--信号源列表项-->
  24. <div
  25. v-if="signalBorder.length"
  26. class="signal_item"
  27. v-for="item in signalListJson"
  28. :key="item.ID"
  29. :style="{
  30. width: signalBorder[0] ? (signalBorder[0].Orientation === 0 ? (signalBorder[0].Width*bigScale*0.9 + 'px') : '200px') : '',
  31. height: signalBorder[0] ? (signalBorder[0].Orientation === 0 ? '132px' : signalBorder[0].Height*bigScale*0.8 + 'px') : '',
  32. }"
  33. >
  34. <div class="signal_item_bg">
  35. <div class="signal_item_bg_body">
  36. <div class="signal_item_bg_body_space">
  37. <div v-show="item.preview" :ref="item.ID">
  38. <VideoPlayer
  39. :options="videoPlayObj2[item.sourceId]"
  40. :playsinline="true"
  41. />
  42. </div>
  43. </div>
  44. <div class="signal_item_bg_body_font">{{item.deviceName}}</div>
  45. </div>
  46. </div>
  47. </div>
  48. </draggable>
  49. </template>
  50. <script>
  51. import {mapState} from 'vuex'
  52. import draggable from 'vuedraggable'
  53. import {getStaticFile} from "../../utils/tools"
  54. import VideoPlayer from "./player"
  55. export default {
  56. data() {
  57. return {
  58. signalBorder: [], // 信号源容器
  59. videoPlayObj2: {}, // 视频播放配置对象
  60. }
  61. },
  62. components: {
  63. draggable,
  64. VideoPlayer
  65. },
  66. async beforeCreate() {
  67. this.signalBorder = await getStaticFile('EnitySignalPreviewList.Data')
  68. },
  69. beforeUpdate() {
  70. const signalList = this.$store.state.signalListJson
  71. const videoPlayObj2 = {}
  72. for (const item of signalList) {
  73. videoPlayObj2[item.sourceId] = {
  74. sources: [
  75. {
  76. "src": item.previewUrl,
  77. "type": "rtmp/flv"
  78. }
  79. ]
  80. }
  81. }
  82. this.videoPlayObj2 = videoPlayObj2
  83. },
  84. updated() {
  85. const flag = this.signalBorder[0] ? (this.signalBorder[0].Orientation === 0 ? 'column' : 'row') : ''
  86. if (flag === 'column') {
  87. document.getElementById('signalContainer').style.alignItems = 'center'
  88. }
  89. },
  90. methods: {
  91. // 移动信号源
  92. onMove({relatedContext, draggedContext}) {
  93. // 更新当前操作大屏ID
  94. this.$store.dispatch('updateCurBigscreenId', relatedContext.component.$el.id)
  95. const relatedElement = relatedContext.element
  96. const draggedElement = draggedContext.element
  97. return (
  98. (!relatedElement || !relatedElement.fixed) && !draggedElement.fixed
  99. )
  100. },
  101. end: function (evt) {
  102. const bigscreenObj = this.$store.state.bigScreenObj
  103. let len = bigscreenObj[evt.to.id] ? bigscreenObj[evt.to.id].signalArr.length : 0
  104. const count = evt.newIndex + 1 - len > 0 ? evt.newIndex + 1 - len : 1
  105. // 更新当前拖拽的位置
  106. this.$store.dispatch('updatePositionNum', count)
  107. },
  108. },
  109. computed: {
  110. ...mapState(['signalListJson', 'bigScale', 'signalPreList']),
  111. dragOptions1() {
  112. return {
  113. animation: 0,
  114. group: {
  115. name: "description",
  116. pull: 'clone',
  117. put: false
  118. },
  119. sort: false,
  120. ghostClass: "ghost",
  121. }
  122. },
  123. dragOptions2() {
  124. return {
  125. animation: 0,
  126. group: "description",
  127. }
  128. },
  129. }
  130. }
  131. </script>