fuse-edit.vue 1.2 KB

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