Browse Source

退出进入优化

bill 3 năm trước cách đây
mục cha
commit
4ba7f54502

+ 19 - 6
src/layout/edit/fuse-edit.vue

@@ -17,8 +17,8 @@
 </template>
 
 <script lang="ts" setup>
-import { ref, watch } from 'vue'
-import { currentMeta, router } from '@/router'
+import { ref, watch, watchEffect, nextTick } from 'vue'
+import { currentMeta, router, RoutesName } from '@/router'
 import { showLeftPanoStack, showRightPanoStack } from '@/env'
 import { togetherCallback } from '@/utils'
 import { loadModel, fuseModel } from '@/model'
@@ -32,7 +32,8 @@ import {
   initialTaggingStyles, 
   initialTaggings, 
   initialGuides, 
-  initialMeasures
+  initialMeasures,
+  fuseModelsLoaded
 } from '@/store'
 
 import Header from './header/index.vue'
@@ -51,7 +52,12 @@ const initialSys = async () => {
     initialMeasures()
   ])
   await loadModel(fuseModel)
-  loaded.value = true
+  const stop = watchEffect(() => {
+    if (fuseModelsLoaded.value) {
+      loaded.value = true
+      nextTick(() => stop())
+    }
+  })
 }
 initialSys()
 
@@ -61,9 +67,16 @@ router.beforeEach(async (to, from, next) => {
   }
   next()
 })
-watch(currentMeta, (meta, _, onClean) => {
+watch(router.currentRoute, (_n, _, onClean) => {
+  const meta = currentMeta.value
   if (meta && 'full' in meta && meta.full) {
-    enterEdit(() => router.back())
+    enterEdit(() => {
+      if (!history.state.back) {
+        router.replace({ name: RoutesName.merge })
+      } else {
+        router.back()
+      }
+    })
     onClean(togetherCallback([
       showLeftPanoStack.push(ref(false)),
       showRightPanoStack.push(ref(false)),

+ 7 - 1
src/views/merge/index.vue

@@ -6,7 +6,8 @@
       </template>
       <ui-group-option label="等比缩放">
         <template #icon>
-          <a @click="router.push({ 
+          <a class="set-prop" 
+            @click="router.push({ 
               name: RoutesName.proportion, 
               params: { id: custom.currentModel!.id, save: '1' },
             })"
@@ -128,4 +129,9 @@ useViewStack(autoSaveFuseModels)
     right: 5px;
   }
 }
+
+
+.set-prop {
+  cursor: pointer;
+}
 </style>

+ 13 - 11
src/views/proportion/index.vue

@@ -18,14 +18,15 @@
 import { Message } from 'bill/index'
 import { useViewStack } from '@/hook'
 import { router, RoutesName } from '@/router'
-import { ref, computed, watch, nextTick } from 'vue'
+import { ref, computed, watch, nextTick, watchEffect } from 'vue'
 import { getSceneModel } from '@/sdk'
 import { autoSaveFuseModels, getFuseModel, leave } from '@/store'
 
 import type { ScaleSet } from '@/sdk'
 
+const isCurrent = computed(() => router.currentRoute.value.name === RoutesName.proportion)
 const model = computed(() => {
-  if (router.currentRoute.value.name === RoutesName.proportion) {
+  if (isCurrent.value) {
     const modelId = router.currentRoute.value.params.id as string
     if (modelId) {
       return getFuseModel(modelId)
@@ -49,17 +50,18 @@ const resetMeasure = () => {
   scaleSet?.startMeasure()
 }
 
-useViewStack(() => {
-  if (sceneModel.value) {
-    const model = sceneModel.value
-    scaleSet = model.enterScaleSet()
+
+watchEffect((onCleanup) => {
+  const smodel = sceneModel.value
+  if (smodel) {
+    scaleSet = smodel.enterScaleSet()
     scaleSet.startMeasure()
-    
-    return () => {
-      model.leaveScaleSet()
+
+    onCleanup(() => {
+      smodel.leaveScaleSet()
       scaleSet = null
-    }
-  } else {
+    })
+  } else if (isCurrent.value) {
     leave()
   }
 })

+ 22 - 16
src/views/registration/index.vue

@@ -48,19 +48,21 @@
 </template>
 
 <script setup lang="ts">
-import { ref, computed, watch } from 'vue'
+import { ref, computed, watch, watchEffect } from 'vue'
 import { ControlPanl } from '@/components/control-panl/'
 import { modelRange, getSceneModel } from '@/sdk'
 import { diffArrayChange } from '@/utils'
 import { useViewStack } from '@/hook'
-import { autoSaveFuseModels, getFuseModel, leave } from '@/store'
-import { router } from '@/router'
+import { autoSaveFuseModels, fuseModelsLoaded, getFuseModel, leave } from '@/store'
+import { router, RoutesName } from '@/router'
 
 import type { ControlExpose } from '@/components/control-panl'
 
+const isCurrent = computed(() => router.currentRoute.value.name === RoutesName.registration)
+
 const model = computed(() => {
   const modelId = router.currentRoute.value.params.id as string
-  if (modelId) {
+  if (isCurrent.value && modelId) {
     return getFuseModel(modelId)
   }
 })
@@ -99,21 +101,25 @@ watch(selectOptions, (nOptions, oOptions = []) => {
   }
 }, { immediate: true })
 
-useViewStack(() => {
-  if (sceneModel.value) {
-    const model = sceneModel.value
-    model.enterAlignment()
-    return () => {
-      if (selectOptions.value.length) {
-        model.leaveTransform()
-        selectOptions.value = []
-      }
-      model.leaveAlignment()
-    }
-  } else {
+watchEffect((onCleanup) => {
+  const smodel = sceneModel.value
+  if (smodel) {
+    smodel.enterAlignment()
+
+    onCleanup(() => {
+      smodel.leaveTransform()
+      smodel.leaveAlignment()
+    })
+  } else if (isCurrent.value) {
     leave()
   }
 })
+
+useViewStack(() => () => {
+  if (selectOptions.value.length) {
+    selectOptions.value = []
+  }
+})
 useViewStack(autoSaveFuseModels)
 
 </script>