fuse-edit.vue 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <template>
  2. <template v-if="loaded" style="height: 100%">
  3. <Header></Header>
  4. <router-view v-slot="{ Component }">
  5. <keep-alive>
  6. <component :is="Component" />
  7. </keep-alive>
  8. </router-view>
  9. </template>
  10. </template>
  11. <script lang="ts" setup>
  12. import { ref, watch } from 'vue'
  13. import { currentMeta, router } from '@/router'
  14. import { showLeftPanoStack, showRightPanoStack } from '@/env'
  15. import { togetherCallback } from '@/utils'
  16. import { loadModel, fuseModel } from '@/model'
  17. import {
  18. enterEdit,
  19. isOld,
  20. save,
  21. initialFuseModels,
  22. initialScenes,
  23. initialTaggingStyles,
  24. initialTaggings,
  25. initialGuides,
  26. initialMeasures
  27. } from '@/store'
  28. import Header from './header/index.vue'
  29. const loaded = ref(false)
  30. const initialSys = async () => {
  31. await Promise.all([
  32. initialFuseModels(),
  33. initialScenes()
  34. ])
  35. await Promise.all([
  36. initialTaggingStyles(),
  37. initialTaggings(),
  38. initialGuides(),
  39. initialMeasures()
  40. ])
  41. await loadModel(fuseModel)
  42. loaded.value = true
  43. }
  44. initialSys()
  45. router.beforeEach(async (to, from, next) => {
  46. if (to.params.save && isOld.value) {
  47. await save()
  48. }
  49. next()
  50. })
  51. watch(currentMeta, (meta, _, onClean) => {
  52. if (meta && 'full' in meta && meta.full) {
  53. enterEdit(() => router.back())
  54. onClean(togetherCallback([
  55. showLeftPanoStack.push(ref(false)),
  56. showRightPanoStack.push(ref(false)),
  57. ]))
  58. }
  59. }, { flush: 'post', immediate: true })
  60. </script>