center.vue 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. <template>
  2. <div style="width: 100%;height: 100%">
  3. <CusTabs :tabs="areaTabs" :dropDown="true" @room-click="roomClick" :active.sync="areaType"
  4. @tab-click="areaTabClick" />
  5. <div class="center" id="model">
  6. </div>
  7. </div>
  8. </template>
  9. <script>
  10. import CusTabs from './components/CusTabs.vue';
  11. import {mapMutations} from 'vuex';
  12. import renderModel from './three/renderModel'
  13. import ComponentHandle from "@/utils/ComponentHandle";
  14. import pvReal from "@/views/largeScreen/dialog/pv-real.vue";
  15. import storageReal from "@/views/largeScreen/dialog/storage-real.vue";
  16. import usageReal from "@/views/largeScreen/dialog/usage-real.vue";
  17. const areaEnums = {
  18. all: {name: '全部', value: ''},
  19. '1': {name: '北区', value: '321283124S3001'},
  20. '2': {name: '南区', value: '321283124S3002'}
  21. };
  22. export default {
  23. name: 'Center',
  24. data () {
  25. return {
  26. areaType: 'all',
  27. areaTabs: [
  28. {name: '全部', value: 'all'},
  29. {name: '北区', value: '1'},
  30. {
  31. name: '南区',
  32. value: '2'
  33. }
  34. ],
  35. modelApi: null,
  36. roomActive: ''
  37. };
  38. },
  39. components: {
  40. CusTabs
  41. },
  42. mounted () {
  43. this.initThree();
  44. },
  45. methods: {
  46. ...mapMutations('userState', ['setAreaType']),
  47. roomClick (value) {
  48. this.roomActive = value
  49. if (this.roomActive && (this.areaType == '1' || this.areaType == '2')) {
  50. this.modelApi.modelChange(`model${this.roomActive}`,areaEnums[this.areaType])
  51. } else {
  52. this.modelApi.modelChange('model')
  53. }
  54. },
  55. areaTabClick () {
  56. this.roomActive = ''
  57. this.modelApi.controlRotate(false)
  58. this.setAreaType(areaEnums[this.areaType].value)
  59. if (this.roomActive == '') {
  60. this.modelApi.modelChange('model')
  61. }
  62. if (this.areaType === '2') {
  63. const target = {
  64. position: {x: -68.07200022928386, y: -573.3788080485533, z: 358.4490004266269}, // 相机目标位置
  65. targetContent: {x: -68.07200022928386, y: -58.61085804855406, z: -48.804124573372285}, // 控制器目标焦点
  66. time: 1000 // 动画时间
  67. };
  68. this.modelApi.flyTo(target)
  69. } else if (this.areaType === '1') {
  70. const target = {
  71. position: {x: 2.9287885309866817, y: -403.9781890137868, z: 376.33849737114133}, // 相机目标位置
  72. targetContent: {x: -2.929806062765964, y: 15.311141772539063, z: 44.637911374941055}, // 控制器目标焦点
  73. time: 1000 // 动画时间
  74. };
  75. this.modelApi.flyTo(target)
  76. } else {
  77. const target = {
  78. position: {x: -17.701772776272723, y: -728.8405392761424, z: 374.20604159261217}, // 相机目标位置
  79. targetContent: {x: -17.701772776272723, y: -307.6331500346563, z: 148.44436360369687}, // 控制器目标焦点
  80. time: 1000 // 动画时间
  81. };
  82. this.modelApi.flyTo(target,0.8)
  83. }
  84. },
  85. initThree () {
  86. setTimeout(() => {
  87. this.modelApi = new renderModel('#model')
  88. this.modelApi.init()
  89. }, 100);
  90. setTimeout(() => {
  91. this.modelApi.addDialog(ComponentHandle.createComponent({
  92. component: pvReal,
  93. props: {
  94. areaCode: "321283124S3001"
  95. }
  96. }), "北区光伏", {
  97. x: 0,
  98. y: 20,
  99. z: 20
  100. })
  101. this.modelApi.addDialog(ComponentHandle.createComponent({
  102. component: storageReal,
  103. props: {
  104. areaCode: "321283124S3001"
  105. }
  106. }), "北区储能", {
  107. x: 120,
  108. y: 120,
  109. z: 20
  110. })
  111. this.modelApi.addDialog(ComponentHandle.createComponent({
  112. component: usageReal,
  113. props: {
  114. areaCode: "321283124S3001"
  115. }
  116. }), "北区负荷", {
  117. x: 0,
  118. y: 120,
  119. z: 20
  120. })
  121. this.modelApi.addDialog(ComponentHandle.createComponent({
  122. component: pvReal,
  123. props: {
  124. areaCode: "321283124S3002"
  125. }
  126. }), "南区光伏", {
  127. x: -40,
  128. y: -80,
  129. z: 20
  130. })
  131. this.modelApi.addDialog(ComponentHandle.createComponent({
  132. component: storageReal,
  133. props: {
  134. areaCode: "321283124S3002"
  135. }
  136. }), "南区储能", {
  137. x: -120,
  138. y: -120,
  139. z: 20
  140. })
  141. this.modelApi.addDialog(ComponentHandle.createComponent({
  142. component: usageReal,
  143. props: {
  144. areaCode: "321283124S3002"
  145. }
  146. }), "南区负荷", {
  147. x: 0,
  148. y: -140,
  149. z: 20
  150. })
  151. }, 2000);
  152. }
  153. }
  154. }
  155. </script>
  156. <style lang='scss' scoped>
  157. .tabs {
  158. position: absolute;
  159. top: 90px;
  160. left: 425px;
  161. z-index: 50;
  162. }
  163. .center {
  164. // background: url("~@/assets/images/center.jpg") no-repeat;
  165. // background-size:cover ;
  166. // width: calc(100% - 806px);
  167. width: 100%;
  168. // margin: auto auto 0;
  169. height: 100%;
  170. position: relative;
  171. z-index: 1;
  172. ::v-deep .tag3d {
  173. // color: #fff;
  174. font-weight: 500;
  175. font-size: 20px;
  176. }
  177. }
  178. </style>