Browse Source

fix: 添加新数据需求

bill 2 năm trước cách đây
mục cha
commit
abbd6e77fd

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1 - 1
server/test/a0k4xu045_202305311600080410/attach/sceneStore


BIN
server/test/a0k4xu045_202305311600080410/attach/upload/1685586211010602.jpg


+ 1 - 1
src/graphic/Renderer/Draw.js

@@ -705,7 +705,7 @@ export default class Draw {
     this.context.font = `${
       vector.fontSize * coordinate.ratio
     }px Microsoft YaHei`;
-    this.drawTextByInfo(vector.center, vector.value, 0, false);
+    this.drawTextByInfo(vector.center, vector.value, (vector.angle || 0) *(Math.PI / 180), false);
 
     const ctx = this.context;
     const pt = coordinate.getScreenXY(vector.center);

+ 3 - 0
src/hook/custom/preset.ts

@@ -20,6 +20,7 @@ export enum DisabledCom {
   floors = "floors",
   lmenu = "lmenu",
   autoLeave = "autoLeave",
+  Mode = 'mode'
 }
 
 export const searchDisabledStack = stackFactory(ref(false));
@@ -39,6 +40,7 @@ export const toolDisabled = stackFactory(ref(false));
 export const floorsDisabled = stackFactory(ref(false));
 export const lmenuDisabled = stackFactory(ref(false));
 export const autoLeaveDisabled = stackFactory(ref(false));
+export const modeDisabled = stackFactory(ref(false));
 
 export const disabledMapStack = {
   [DisabledCom.Search]: searchDisabledStack,
@@ -59,6 +61,7 @@ export const disabledMapStack = {
   [DisabledCom.floors]: floorsDisabled,
   [DisabledCom.lmenu]: lmenuDisabled,
   [DisabledCom.autoLeave]: autoLeaveDisabled,
+  [DisabledCom.Mode]: modeDisabled,
 } as { [key in DisabledCom]: Stack<Ref<boolean>> };
 
 export type DisabledMapStack = typeof disabledMapStack;

+ 3 - 1
src/sdk/types/sdk.ts

@@ -69,7 +69,7 @@ export type Measure = {
     dataUrl: string;
     pose: Pose;
   };
-  bus: Emitter<{ update: Measure; highlight: boolean, firstClickMarker: void }>;
+  bus: Emitter<{ update: Measure; selected: boolean, firstClickMarker: void }>;
   getDatasets: () => Array<string>;
   getDatasetId: () => string;
   getDatasetLocations: () => Array<Pos3D>;
@@ -447,6 +447,8 @@ export type LaserSDK = {
   map: Map;
   scene: Scene;
   enterDatasetsManage: () => any;
+  enterTopView: () => any,
+  leaveTopView: () => any,
   leaveDatasetsManage: () => any;
   getPointByEntity: (id: string) => Pos3D;
   entityIncludePoint: (id: string, pos: Pos3D) => boolean;

+ 12 - 9
src/views/scene/container.vue

@@ -6,7 +6,7 @@
 
 <script setup lang="ts">
 import {onMounted, ref, watchEffect} from "vue";
-import {customMap, setupLaser, useLoading, useParams} from "@/hook";
+import {customMap, disabledMap, setupLaser, useLoading, useParams} from "@/hook";
 import {store} from "@/store";
 import {currentApp} from "@/store/app";
 import {axios} from "@/dbo/";
@@ -40,14 +40,17 @@ onMounted(async () => {
   setTimeout(() => {
     watchEffect(() => {
       const doms = Array.from(sceneLayoutRef.value.querySelectorAll("#navCube, #home")) as HTMLElement[]
-      if (customMap.mode === Mode.pano) {
-        doms.forEach(dom => {
-          dom.style.display = "none"
-        })
-      } else {
-        doms.forEach(dom => {
-          dom.style.display = "block"
-        })
+      console.log("====>", disabledMap.mode)
+      if (!disabledMap.mode) {
+        if (customMap.mode === Mode.pano) {
+          doms.forEach(dom => {
+            dom.style.display = "none"
+          })
+        } else {
+          doms.forEach(dom => {
+            dom.style.display = "block"
+          })
+        }
       }
     })
     Loading.hideAll()

+ 3 - 1
src/views/scene/covers/measure.vue

@@ -21,7 +21,8 @@ const measure = computed(() => {
 
 watchEffect(() => {
   if (measure.value) {
-    measure.value.bus.on("highlight", (focus) => {
+    measure.value.bus.on("selected", (focus) => {
+      console.error("measure highlight")
       if (focus) {
         emit('focus')
       } else {
@@ -30,6 +31,7 @@ watchEffect(() => {
     })
 
     measure.value.bus.on("update", () => {
+      console.error("measure update", measure.value.getPoints())
       emit("changePoints", measure.value.getPoints())
     })
   }

+ 5 - 1
src/views/scene/covers/measures.vue

@@ -3,7 +3,7 @@
       v-for="measure in list"
       :key="measure.id"
       :data="measure"
-      @change-points="points => measure.points = points"
+      @change-points="points => changePoints(measure, points)"
       @blur="() => active = active === measure ? null : active"
       @focus="() => active = measure"
   />
@@ -32,4 +32,8 @@ const activeActionMenus = [
     }
   }
 ]
+
+const changePoints = (measure, points) => {
+  measure.points = points.map(point => ({...point}))
+}
 </script>

+ 22 - 1
src/views/scene/menus/menus.ts

@@ -1,5 +1,8 @@
 import {findMenuByAttr, generateMixMenus as generateMixMenusRaw} from '@/utils/menus'
 import {ref} from "vue";
+import {useSDK} from "@/hook";
+import {laserModeStack, modeDisabled} from '@/hook/custom/index'
+import {Mode} from "@/sdk";
 
 export type MenuRaw = {
   key: string,
@@ -7,7 +10,7 @@ export type MenuRaw = {
   continued?: boolean
   icon?: string,
   children?: MenuRaw[],
-  onClick?: () => void
+  onClick?: () => void | (() => void)
 }
 
 export enum menuEnum {
@@ -36,6 +39,24 @@ export const menus: MenuRaw[] = [
     icon: "measure",
     text: "测量",
     key: "measure",
+    onClick() {
+      const sdk = useSDK()
+      const doms = document.querySelectorAll("#navCube, #home") as NodeListOf<HTMLElement>;
+      laserModeStack.push(ref(Mode.cloud))
+      console.log("push")
+      modeDisabled.push(ref(true))
+      doms.forEach(dom => dom.style.display = "none");
+      // sdk.enterTopView()
+
+      console.log(modeDisabled.current.value.value)
+      return () => {
+        doms.forEach(dom => dom.style.display = "block");
+        laserModeStack.pop()
+        console.log("pop")
+        modeDisabled.pop()
+        // sdk.leaveTopView()
+      }
+    },
     children: [
       {
         icon: "line_h",

+ 13 - 2
src/views/scene/menus/pane.vue

@@ -16,9 +16,9 @@
 
 <script lang="ts" setup>
 import ActionMenus from "@/components/group-button/index.vue";
-import {generateMixMenus, MenuRaw, menus} from './menus'
+import {generateMixMenus, MenuRaw, menus, findMenuByKey} from './menus'
 import {joinActions} from './actions'
-import {computed, onUnmounted} from "vue";
+import {computed, onUnmounted, watchEffect} from "vue";
 
 const props = withDefaults(
   defineProps<{ menus?: MenuRaw[], level?: number }>(),
@@ -40,6 +40,17 @@ const store = generateMixMenus(
   m => m,
   menusMix.value
 )
+
+watchEffect((onCleanup) => {
+  const menu = store.activeMenuKey.value && findMenuByKey(store.activeMenuKey.value)
+  if (store.child && menu?.onClick) {
+    const leaveHook = menu.onClick()
+    leaveHook && onCleanup(leaveHook)
+  } else {
+    onCleanup(() => {})
+  }
+})
+
 onUnmounted(joinActions(store.itemActiveKey));
 </script>
 <script lang="ts"> export default {name: 'scene-menus'}</script>

+ 6 - 5
src/views/scene/mode.vue

@@ -3,14 +3,15 @@
     class="scene-mode-tabs"
     :menus="menus"
     :active-key="activeKey"
+    v-if="!disabledMap.mode"
   />
 </template>
 
 <script lang="ts" setup>
 import GroupButton from '@/components/group-button/index.vue'
 import {Mode} from "@/sdk";
-import {computed, ref, watchEffect} from "vue";
-import {customMap} from "@/hook";
+import {computed, ref, watch, watchEffect} from "vue";
+import {customMap, disabledMap} from "@/hook/custom/index";
 
 const tabs = [
   {
@@ -34,9 +35,7 @@ const menus = computed(() =>
   }))
 )
 
-watchEffect(() => {
-  customMap.mode = activeKey.value
-})
+watch(activeKey, () => customMap.mode = activeKey.value)
 </script>
 
 <style lang="scss" scoped>
@@ -56,3 +55,5 @@ watchEffect(() => {
   }
 }
 </style>
+<script setup lang="ts">
+</script>

+ 1 - 1
src/views/sys/mode-tab/index.vue

@@ -9,7 +9,7 @@
         (customMap.full === 'map' && !disabledMap.clound),
       'full-ctrl': customMap.fullCtrl,
     }"
-    v-if="!inDisabled && tabs.length"
+    v-if="!disabledMap.mode && !inDisabled && tabs.length"
   >
     <ui-guide
       :msg="customMap.mode !== item.mode ? item.markDesc : ''"