Preview.vue 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <template>
  2. <div class="preview">
  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 { localMeta2dDataName } 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, getLe5le2d } from '@/services/api';
  15. const route = useRoute();
  16. const meta2dDom = ref('');
  17. const meta2dOptions: Options = {
  18. cdn,
  19. // rule: true,
  20. background: '#1e2430',
  21. x: 10,
  22. y: 10,
  23. width: 1920,
  24. height: 1080,
  25. // defaultFormat: { ...defaultFormat },
  26. };
  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 = getLe5le2d(route.query.id + '');
  42. ret && meta2d.open(ret);
  43. } else {
  44. const data: any = JSON.parse(
  45. await localforage.getItem(localMeta2dDataName)
  46. );
  47. data && meta2d.open(data);
  48. }
  49. };
  50. const opened = () => {
  51. meta2d.fitSizeView(true, 10);
  52. };
  53. onUnmounted(() => {
  54. watcher();
  55. if (meta2d) {
  56. meta2d.off('opened', opened);
  57. meta2d.destroy();
  58. }
  59. });
  60. </script>
  61. <style lang="postcss" scoped>
  62. .preview {
  63. width: 100vw;
  64. height: 100vh;
  65. background-color: var(--color-background-editor);
  66. .meta2d-canvas {
  67. width: 100%;
  68. height: 100%;
  69. }
  70. }
  71. </style>