Meta2d.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. <template>
  2. <div class="content">
  3. <div id="meta2d"></div>
  4. </div>
  5. </template>
  6. <script>
  7. import {
  8. Meta2d,
  9. register,
  10. registerAnchors,
  11. registerCanvasDraw,
  12. } from '@meta2d/core';
  13. import { flowPens, flowAnchors } from '@meta2d/flow-diagram';
  14. import {
  15. activityDiagram,
  16. activityDiagramByCtx,
  17. } from '@meta2d/activity-diagram';
  18. import { classPens } from '@meta2d/class-diagram';
  19. import { sequencePens, sequencePensbyCtx } from '@meta2d/sequence-diagram';
  20. import { register as registerEcharts } from '@meta2d/chart-diagram';
  21. import { registerHighcharts } from '@meta2d/chart-diagram';
  22. import { registerLightningChart } from '@meta2d/chart-diagram';
  23. import { formPens, formPath2DPens } from '@meta2d/form-diagram';
  24. import { chartsPens } from '@meta2d/le5le-charts';
  25. import { ftaPens, ftaPensbyCtx, ftaAnchors } from '@meta2d/fta-diagram';
  26. let meta2d = null;
  27. globalThis.getMeta2dData =async (id) => {
  28. const res = await fetch(`/json/${id}.json`, {
  29. method:'GET',
  30. });
  31. if (res.ok) {
  32. let data = await res.text();
  33. // meta2d.open(JSON.parse(data));
  34. return JSON.parse(data);
  35. }
  36. }
  37. export default {
  38. name: 'Meta2d',
  39. mounted() {
  40. this.initMeta2d();
  41. },
  42. destroyed() {
  43. if(meta2d){
  44. meta2d.off('opened',this.opened);
  45. meta2d.destroy();
  46. }
  47. },
  48. methods: {
  49. initMeta2d() {
  50. const options = {
  51. // x: 10,
  52. // y: 10,
  53. width: 1920,
  54. height: 1080,
  55. background: '#1e2430',
  56. color: '#bdc7db',
  57. };
  58. meta2d = new Meta2d('meta2d', options);
  59. //注册基础图形库 参考文档:https://doc.le5le.com/document/119754049
  60. this.registerBasicDiagram();
  61. meta2d.on('opened',this.opened);
  62. this.open();
  63. //注册企业图形库
  64. setTimeout(async()=>{
  65. globalThis.userId = meta2d.store.data.userId;
  66. globalThis.registerIot(globalThis.userId,'/js/2d-components.js');
  67. if (globalThis.meta2dTools && registerToolsNew) {
  68. registerToolsNew();
  69. }
  70. },1000);
  71. },
  72. open(){
  73. let url = '/json/v.json';
  74. if (this.$route.query.id) {
  75. url = `/json/${this.$route.query.id}.json`;
  76. if(this.$route.query.id.startsWith('2d')){
  77. meta2d.setOptions({
  78. background: '#fff',
  79. color: '#000',
  80. width:undefined,
  81. height:undefined
  82. });
  83. }
  84. }
  85. this._fetch(url, function (text) {
  86. var data = JSON.parse(text);
  87. data.locked = 1;
  88. data.rule = false;
  89. globalThis.userId = data.userId;
  90. meta2d.open(data);
  91. });
  92. },
  93. opened(){
  94. if(this.$route.query.id&&this.$route.query.id.startsWith('2d')){
  95. meta2d.fitView(true, 0); //充满屏幕
  96. }else{
  97. meta2d.fitSizeView(true, 0); //大屏充满屏幕
  98. }
  99. },
  100. _fetch(url, cb) {
  101. var xhr = new XMLHttpRequest();
  102. xhr.open('GET', url, true);
  103. xhr.send();
  104. xhr.onreadystatechange = function () {
  105. if (xhr.readyState == 4 && xhr.status == 200) {
  106. cb && cb(xhr.responseText);
  107. }
  108. };
  109. },
  110. registerBasicDiagram() {
  111. register(flowPens());
  112. registerAnchors(flowAnchors());
  113. register(activityDiagram());
  114. registerCanvasDraw(activityDiagramByCtx());
  115. register(classPens());
  116. register(sequencePens());
  117. registerCanvasDraw(sequencePensbyCtx());
  118. registerEcharts();
  119. registerHighcharts();
  120. registerLightningChart();
  121. register(formPath2DPens());
  122. registerCanvasDraw(formPens());
  123. registerCanvasDraw(chartsPens());
  124. register(ftaPens());
  125. registerCanvasDraw(ftaPensbyCtx());
  126. registerAnchors(ftaAnchors());
  127. },
  128. },
  129. };
  130. </script>
  131. <!-- Add "scoped" attribute to limit CSS to this component only -->
  132. <style scoped>
  133. .content {
  134. position: relative;
  135. background-color: #1e2430;
  136. height: 100vh;
  137. }
  138. #meta2d {
  139. position: absolute !important;
  140. width: 100%;
  141. height: 100%;
  142. touch-action: none;
  143. overflow: hidden;
  144. }
  145. </style>