Index.vue 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <template>
  2. <div class="app-page" @contextmenu.prevent>
  3. <Header />
  4. <div class="design-body">
  5. <Graphics ref="graphicsRef"/>
  6. <View />
  7. <div style="border-left: 1px solid var(--color-border);">
  8. <FitProps v-if="selections.mode === SelectionMode.Fit" />
  9. <FileProps v-else-if="selections.mode === SelectionMode.File" />
  10. <PenProps v-else-if="selections.mode === SelectionMode.Pen" :device-list="currentDevices" />
  11. <PensProps v-else />
  12. </div>
  13. </div>
  14. </div>
  15. </template>
  16. <script lang="ts" setup>
  17. import Header from './components/Header.vue';
  18. import Graphics from './components/Graphics.vue';
  19. import View from './components/View.vue';
  20. import FileProps from './components/FileProps.vue';
  21. import PenProps from './components/PenProps.vue';
  22. import PensProps from './components/PensProps.vue';
  23. import FitProps from './components/FitProps.vue';
  24. import { useSelection, SelectionMode } from '@/services/selections';
  25. import { onMounted, onUnmounted, ref } from "vue";
  26. import { DeviceItem, IframeMsg } from '@/types';
  27. import { getVisual2DMsgType, Visual2DMsgType } from '.';
  28. import { useModuleType } from '@/services/module-type';
  29. import { graphicsRef } from '@/services/project';
  30. import { useRoute } from 'vue-router';
  31. import { saveModuleAndClose } from '@/utils';
  32. const route = useRoute();
  33. const { setModuleType } = useModuleType();
  34. const currentDevices = ref<DeviceItem[]>([]);
  35. onMounted(()=>{
  36. selections.mode = SelectionMode.File
  37. if (route.query.moduleType) {
  38. setModuleType(Number(route.query.moduleType))
  39. }
  40. window.addEventListener("message", handleMsg);
  41. const msg: IframeMsg = {
  42. msgType: getVisual2DMsgType(Visual2DMsgType.EditLoaded),
  43. };
  44. window.parent.postMessage(msg, "*");
  45. })
  46. onUnmounted(() => {
  47. window.removeEventListener("message", handleMsg);
  48. });
  49. const handleMsg = (e: MessageEvent<IframeMsg>) => {
  50. const { msgType, deviceList } = e.data;
  51. if (msgType === getVisual2DMsgType(Visual2DMsgType.SendDeviceData)) {
  52. currentDevices.value = deviceList as DeviceItem[];
  53. } else if (msgType === getVisual2DMsgType(Visual2DMsgType.SaveModule)) {
  54. saveModuleAndClose(e.data.close)
  55. }
  56. };
  57. const { selections } = useSelection();
  58. </script>
  59. <style lang="postcss" scoped>
  60. .app-page {
  61. height: 100vh;
  62. .design-body {
  63. display: grid;
  64. grid-template-columns: 300px calc(100% - 601px) 301px;
  65. height: calc(100vh - 40px);
  66. border-top: 1px solid var(--color-border);
  67. }
  68. }
  69. </style>