Preview.vue 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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 { registerNormalShape } from "../components/register";
  11. import { defaultFormat } from "@/services/defaults";
  12. import { useRouter, useRoute } from "vue-router";
  13. import { Meta2d, Options, Pen } from "@meta2d/core";
  14. import { registerBasicDiagram } from "@/services/register";
  15. import { cdn } from "@/services/api";
  16. const route = useRoute();
  17. const meta2dDom = ref("");
  18. const meta2dOptions: Options = {
  19. cdn,
  20. // rule: true,
  21. background: "#1e2430",
  22. x: 10,
  23. y: 10,
  24. width: 1920,
  25. height: 1080,
  26. // defaultFormat: { ...defaultFormat },
  27. };
  28. onMounted(() => {
  29. meta2d = new Meta2d(meta2dDom.value, meta2dOptions);
  30. registerBasicDiagram();
  31. open();
  32. meta2d.on("opened", opened);
  33. });
  34. const watcher = watch(
  35. () => route.query.id,
  36. async () => {
  37. open();
  38. }
  39. );
  40. const open = async () => {
  41. if (route.query.id) {
  42. const ret: any = getLe5le2d(route.query.id + "");
  43. ret && meta2d.open(ret);
  44. } else {
  45. const data: any = JSON.parse(
  46. await localforage.getItem(localMeta2dDataName)
  47. );
  48. data&&meta2d.open(data);
  49. }
  50. };
  51. const opened = () => {
  52. meta2d.fitSizeView(true, 10);
  53. };
  54. onUnmounted(() => {
  55. watcher();
  56. if (meta2d) {
  57. meta2d.off("opened", opened);
  58. meta2d.destroy();
  59. }
  60. });
  61. </script>
  62. <style lang="postcss" scoped>
  63. .preview {
  64. width: 100vw;
  65. height: 100vh;
  66. background-color: var(--color-background-editor);
  67. .meta2d-canvas {
  68. width: 100%;
  69. height: 100%;
  70. }
  71. }
  72. </style>