Browse Source

修改道路交互

bill 2 years ago
parent
commit
354ee4694f

File diff suppressed because it is too large
+ 1 - 1
server/test/a0k4xu045_202305311600080410/attach/sceneStore


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

@@ -22,7 +22,13 @@
     <ActionMenus class="select-menus" :menus="selectMenus" dire="row" v-if="selects.length" />
   </MainPanel>
 
-  <FillSlide :data="sortPhotos" v-model:active="active" @quit="active = null" v-if="active">
+  <FillSlide
+      :data="sortPhotos"
+      v-model:active="active"
+      @quit="active = null"
+      v-if="active"
+      :getURL="data => data.urlRaw || data.url"
+  >
     <template v-slot:foot>
       <ActionMenus class="menus" :menus="menus" dire="row" />
     </template>

+ 1 - 0
src/views/scene/covers/cover.vue

@@ -85,6 +85,7 @@ const downHandler = (sev: MouseEvent | TouchEvent) => {
     mountEl.removeEventListener('touchend', upHandler)
     move.value = false
     customMap.magnifier = false
+    console.log("关闭放大镜")
     if (new Date().getTime() - start < 300) {
       clickHandler(ev)
     }

+ 3 - 2
src/views/scene/index.vue

@@ -3,12 +3,12 @@
 
   <template v-if="loaded">
     <Mode />
-    <Menus />
+    <Menus @enter-child="childPage = true" @leave-child="childPage = false" />
     <BasePoints />
     <FixPoints />
     <Measures />
     <Photo />
-    <ButtonPane class="back fun-ctrl" size="48" @click="back">
+    <ButtonPane class="back fun-ctrl" size="48" @click="back" v-if="!childPage">
       <ui-icon type="close" class="icon" />
     </ButtonPane>
   </template>
@@ -30,6 +30,7 @@ import {ref, watchEffect} from "vue";
 import {back} from "@/store/sync";
 
 const loaded = ref(false)
+const childPage = ref(false)
 const stopReg = watchEffect(() => {
   if (loaded.value) {
     const sdk = useSDK();

+ 14 - 4
src/views/scene/menus/actions.ts

@@ -73,24 +73,34 @@ const trackMeasureMenuAction = (
 
 const menuActions = {
   [menuEnum.BASE_POINT]: (_, onComplete) => {
-    const hide = Message.success({ msg: "请单击选择基准点位置" })
-    return trackPosMenuAction(
+    let hide = Message.success({ msg: "请单击选择基准点位置" })
+    const onDestroy = trackPosMenuAction(
       () => {
         hide()
+        hide = null
         onComplete()
       },
       pos => basePoints.value.push({ id: getId(), pos })
     )
+    return () => {
+      onDestroy()
+      hide && hide()
+    }
   },
   [menuEnum.FIX_POINT]:  (_, onComplete) => {
-    const hide = Message.success({ msg: "请单击选择固定点位置" })
-    return trackPosMenuAction(
+    let hide = Message.success({ msg: "请单击选择固定点位置" })
+    const onDestroy = trackPosMenuAction(
       () => {
         hide()
+        hide = null
         onComplete()
       },
       pos => fixPoints.value.push({ id: getId(), pos, text: "其他散落物" })
     )
+    return () => {
+      onDestroy()
+      hide && hide()
+    }
   },
   [menuEnum.MEASURE_ROW]: (menu, onComplete) => {
     return trackMeasureMenuAction(

+ 5 - 0
src/views/scene/menus/menus.ts

@@ -9,6 +9,7 @@ export type MenuRaw = {
   key: string,
   text: string,
   continued?: boolean
+  defaultSelect?: true | (() => boolean),
   icon?: string,
   disabled?: boolean | (() => boolean),
   children?: MenuRaw[],
@@ -46,6 +47,7 @@ export const menus: MenuRaw[] = [
         icon: "line_h",
         // continued: true,
         text: "水平",
+        defaultSelect: true,
         key: menuEnum.MEASURE_ROW
       },
       {
@@ -68,6 +70,7 @@ export const menus: MenuRaw[] = [
     key: "fixPointMenu",
     children: [
       {
+        defaultSelect: true,
         icon: "point_a",
         text: "固定点",
         key: menuEnum.FIX_POINT
@@ -97,12 +100,14 @@ export const menus: MenuRaw[] = [
     },
     children: [
       {
+        defaultSelect: () => !baseLines.value.length,
         icon: "line",
         text: "基准线",
         key: menuEnum.BASE_LINE,
         disabled: () => !!baseLines.value.length
       },
       {
+        defaultSelect: true,
         icon: "point",
         text: "基准点",
         key: menuEnum.BASE_POINT

+ 29 - 3
src/views/scene/menus/pane.vue

@@ -18,14 +18,18 @@
 import ActionMenus from "@/components/group-button/index.vue";
 import {generateMixMenus, MenuRaw, menus, findMenuByKey} from './menus'
 import {joinActions} from './actions'
-import {computed, onUnmounted, watchEffect} from "vue";
+import {computed, onMounted, onUnmounted, watchEffect} from "vue";
 import {disabledMap} from "@/hook";
 
 const props = withDefaults(
   defineProps<{ menus?: MenuRaw[], level?: number }>(),
   {level: 1}
 )
-const emit = defineEmits<{ (e: 'back'): void }>();
+const emit = defineEmits<{
+  (e: 'back'): void,
+  (e: 'enterChild'): void,
+  (e: 'leaveChild'): void,
+}>();
 const backMenu = {
   icon: "return",
   text: "",
@@ -56,8 +60,30 @@ if (props.level === 1) {
   watchEffect(() => {
     disabledMap.photo = !store.child.value?.length
   })
+  watchEffect(() => {
+    if (store.child.value) {
+      emit('enterChild')
+    } else {
+      emit('leaveChild')
+    }
+  })
 }
+
 onUnmounted(joinActions(store.itemActiveKey));
+onMounted(() => {
+  if (props.level > 1) {
+    const defaultMenu = props.menus.find(menu => {
+      if (typeof menu.defaultSelect === 'function') {
+        return menu.defaultSelect()
+      } else {
+        return menu.defaultSelect
+      }
+    })
+    console.log(defaultMenu)
+    store.itemActiveKey.value = defaultMenu?.key
+    // store.activeMenuKey.value =
+  }
+})
 </script>
 <script lang="ts"> export default {name: 'scene-menus'}</script>
 
@@ -69,4 +95,4 @@ onUnmounted(joinActions(store.itemActiveKey));
   transform: translateY(-50%);
   z-index: 2;
 }
-</style>
+</style>