preview.vue 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <template>
  2. <div class="bim-preview">
  3. <div class="no-empty" v-if="!state">
  4. <empty :description="type == 'model'?'模型转换中':'模型集成中'"></empty>
  5. </div>
  6. <div :id="'previewBim'+_uid" class="previewBim" v-else></div>
  7. </div>
  8. </template>
  9. <script>
  10. import bimView from '@/uitls/controls'
  11. import {
  12. getBimViewToken,
  13. getIntegrateViewToken
  14. } from '@/httpApi/bim';
  15. export default {
  16. props: ['file', 'type'],
  17. data() {
  18. return {
  19. state: false,
  20. bimViewer: null
  21. }
  22. },
  23. created() {
  24. this.init();
  25. },
  26. beforeDestroy() {
  27. if (this.bimViewer) this.bimViewer.destroy();
  28. },
  29. methods: {
  30. init() {
  31. this.type === 'model' ? getBimViewToken(this.file.id).then(this.successFunc) : getIntegrateViewToken(this
  32. .file.id).then(this.successFunc)
  33. },
  34. successFunc(res) {
  35. if (res.state) {
  36. if (!res.data) return;
  37. this.state = true;
  38. this.$nextTick(() => {
  39. this.bimViewer = new bimView({
  40. dom: document.getElementById('previewBim' + this._uid),
  41. viewToken: res.data,
  42. bimIntegrateId: this.file.id,
  43. type: this.type,
  44. renderSuccess: () => {
  45. this.bimViewer.setToolbars(true)
  46. this.$emit('renderSuccess');
  47. }
  48. })
  49. })
  50. }
  51. },
  52. colorAll() {
  53. this.bimViewer.overrideComponentsColorByObjectData()
  54. },
  55. colorElement(elementIds, option) {
  56. this.bimViewer.colorElementById(elementIds, option)
  57. }
  58. },
  59. }
  60. </script>
  61. <style lang="scss">
  62. .bim-preview {
  63. width: 100%;
  64. height: 100%;
  65. .previewBim {
  66. width: 100%;
  67. height: 100%;
  68. }
  69. }
  70. </style>