traffic.vue 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <template>
  2. <div class="l-flex--col">
  3. <grid-table
  4. ref="table"
  5. :schema="schema"
  6. size="large"
  7. >
  8. <grid-table-item v-slot="item">
  9. <camera-player
  10. v-if="isActivated"
  11. :key="item.identifier"
  12. :camera="item"
  13. autoplay
  14. controls
  15. @fullscreen="onFullScreen(item)"
  16. />
  17. </grid-table-item>
  18. </grid-table>
  19. <camera-dialog
  20. ref="cameraDialog"
  21. @open="onOpen"
  22. @closed="onClosed"
  23. />
  24. </div>
  25. </template>
  26. <script>
  27. import { getCameras } from '@/api/external'
  28. import { Camera } from '@/constant'
  29. export default {
  30. name: 'DeviceTrafficCamera',
  31. props: {
  32. device: {
  33. type: Object,
  34. required: true
  35. }
  36. },
  37. data () {
  38. return {
  39. schema: {
  40. pageSize: 999,
  41. list: this.getCameras
  42. },
  43. isActivated: true
  44. }
  45. },
  46. methods: {
  47. getCameras () {
  48. return getCameras({
  49. deviceId: this.device.id,
  50. cameraType: Camera.TRAFFIC
  51. }).then(({ data }) => {
  52. data = data.map(({ id, thirdPartyDevice }) => {
  53. return {
  54. ...thirdPartyDevice,
  55. id
  56. }
  57. })
  58. return { data }
  59. })
  60. },
  61. onFullScreen (camera) {
  62. this.$refs.cameraDialog.show(camera)
  63. },
  64. onOpen () {
  65. this.isActivated = false
  66. },
  67. onClosed () {
  68. this.isActivated = true
  69. }
  70. }
  71. }
  72. </script>