Index.vue 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <template>
  2. <div class="app-page" @contextmenu.prevent>
  3. <Header />
  4. <div class="design-body">
  5. <Graphics />
  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 { useRoute } from 'vue-router';
  30. import { saveModuleAndClose } from '@/utils';
  31. const route = useRoute();
  32. const { setModuleType } = useModuleType();
  33. const currentDevices = ref<DeviceItem[]>([]);
  34. onMounted(()=>{
  35. selections.mode = SelectionMode.File
  36. if (route.query.moduleType) {
  37. setModuleType(Number(route.query.moduleType))
  38. }
  39. window.addEventListener("message", handleMsg);
  40. const msg: IframeMsg = {
  41. msgType: getVisual2DMsgType(Visual2DMsgType.EditLoaded),
  42. };
  43. window.parent.postMessage(msg, "*");
  44. })
  45. onUnmounted(() => {
  46. window.removeEventListener("message", handleMsg);
  47. });
  48. const handleMsg = (e: MessageEvent<IframeMsg>) => {
  49. const { msgType, deviceList } = e.data;
  50. if (msgType === getVisual2DMsgType(Visual2DMsgType.SendDeviceData)) {
  51. currentDevices.value = deviceList as DeviceItem[];
  52. } else if (msgType === getVisual2DMsgType(Visual2DMsgType.SaveModule)) {
  53. saveModuleAndClose(e.data.close)
  54. }
  55. };
  56. const { selections } = useSelection();
  57. </script>
  58. <style lang="postcss" scoped>
  59. .app-page {
  60. height: 100vh;
  61. .design-body {
  62. display: grid;
  63. grid-template-columns: 300px calc(100% - 601px) 301px;
  64. height: calc(100vh - 40px);
  65. border-top: 1px solid var(--color-border);
  66. }
  67. }
  68. </style>