Preview.vue 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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. height: 1080,
  24. defaultFormat: { ...defaultFormat },
  25. };
  26. const bgColor = ref('#1e2430');
  27. onMounted(() => {
  28. meta2d = new Meta2d(meta2dDom.value, meta2dOptions);
  29. registerBasicDiagram();
  30. open();
  31. meta2d.on('opened', opened);
  32. });
  33. const watcher = watch(
  34. () => route.query.id,
  35. async () => {
  36. open();
  37. }
  38. );
  39. const open = async () => {
  40. if (route.query.id) {
  41. const ret: any = getLe5leV(route.query.id + '');
  42. ret && meta2d.open(ret);
  43. } else {
  44. let data: any = await localforage.getItem(localStorageName);
  45. if (data) {
  46. data = JSON.parse(data);
  47. data.locked = 1;
  48. data.rule = false;
  49. meta2d.open(data);
  50. bgColor.value = data.background;
  51. }
  52. }
  53. };
  54. const opened = () => {
  55. let fit: any =
  56. (meta2d.store.data as any).scaleMode === '3'
  57. ? 'height'
  58. : (meta2d.store.data as any).scaleMode === '2'
  59. ? 'width'
  60. : true;
  61. meta2d.fitSizeView(fit, 10);
  62. if ((meta2d.store.data as any).scroll) {
  63. meta2d.setOptions({
  64. scroll: true,
  65. });
  66. }
  67. };
  68. onUnmounted(() => {
  69. watcher();
  70. if (meta2d) {
  71. meta2d.off('opened', opened);
  72. meta2d.destroy();
  73. }
  74. });
  75. </script>
  76. <style lang="postcss" scoped>
  77. .preview {
  78. width: 100vw;
  79. height: 100vh;
  80. /* background-color: var(--color-background-editor); */
  81. .meta2d-canvas {
  82. width: 100%;
  83. height: 100%;
  84. }
  85. }
  86. </style>