Preview.vue 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <template>
  2. <div class="preview" :style="{ background: bgColor }">
  3. <div class="meta2d-canvas" ref="meta2dDom"></div>
  4. </div>
  5. </template>
  6. <script setup lang="ts">
  7. import { ref, onMounted, watch, onUnmounted } from 'vue';
  8. import localforage from 'localforage';
  9. import { localStorageName } from '@/services/utils';
  10. import { defaultFormat } from '@/services/defaults';
  11. import { useRouter, useRoute } from 'vue-router';
  12. import { Meta2d, Options, Pen } from '@meta2d/core';
  13. import { registerBasicDiagram } from '@/services/register';
  14. import { cdn, getLe5leV } from '@/services/api';
  15. const route = useRoute();
  16. const meta2dDom = ref('');
  17. const meta2dOptions: Options = {
  18. cdn,
  19. background: '#1e2430',
  20. x: 10,
  21. y: 10,
  22. width: 1920,
  23. color: '#bdc7db',
  24. height: 1080,
  25. defaultFormat: { ...defaultFormat },
  26. };
  27. const bgColor = ref('#1e2430');
  28. onMounted(() => {
  29. meta2d = new Meta2d(meta2dDom.value, meta2dOptions);
  30. registerBasicDiagram();
  31. open();
  32. meta2d.on('opened', opened);
  33. window.addEventListener('message', function (e) {
  34. if (typeof e.data !== 'string') {
  35. return;
  36. }
  37. try {
  38. let data = JSON.parse(e.data);
  39. if (typeof data === 'object') {
  40. meta2d.emit(data.name);
  41. } else {
  42. meta2d.emit(data);
  43. }
  44. } catch (e) {
  45. console.info(e);
  46. }
  47. });
  48. });
  49. const watcher = watch(
  50. () => route.query.id,
  51. async () => {
  52. open();
  53. }
  54. );
  55. const open = async () => {
  56. if (route.query.id) {
  57. const ret: any = await getLe5leV(route.query.id + '');
  58. ret && meta2d.open(ret);
  59. } else {
  60. let data: any = await localforage.getItem(localStorageName);
  61. if (data) {
  62. data = JSON.parse(data);
  63. data.locked = 1;
  64. data.rule = false;
  65. meta2d.open(data);
  66. bgColor.value = data.background;
  67. }
  68. }
  69. };
  70. const opened = () => {
  71. let fit: any =
  72. (meta2d.store.data as any).scaleMode === '3'
  73. ? 'height'
  74. : (meta2d.store.data as any).scaleMode === '2'
  75. ? 'width'
  76. : true;
  77. meta2d.fitSizeView(fit, 10);
  78. meta2d.setOptions({
  79. scroll: (meta2d.store.data as any).scroll,
  80. disableScale: (meta2d.store.data as any).isDisableScale,
  81. disableTranslate: (meta2d.store.data as any).isDisableTranslate,
  82. });
  83. };
  84. onUnmounted(() => {
  85. watcher();
  86. if (meta2d) {
  87. meta2d.off('opened', opened);
  88. meta2d.destroy();
  89. }
  90. });
  91. </script>
  92. <style lang="postcss" scoped>
  93. .preview {
  94. width: 100vw;
  95. height: 100vh;
  96. /* background-color: var(--color-background-editor); */
  97. .meta2d-canvas {
  98. width: 100%;
  99. height: 100%;
  100. }
  101. }
  102. </style>