Browse Source

fix: 添加新数据需求

bill 2 years ago
parent
commit
45cd01cad3

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


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


+ 11 - 2
src/components/group-button/index.vue

@@ -5,7 +5,7 @@
       :key="menu.key"
       class="menu"
       :style="menuStyle"
-      :class="{ active: activeKey === menu.key, dire, disabled: menu.disabled }"
+      :class="{ active: activeKey === menu.key, dire, disabled: disabledMap[menu.key] }"
       @click="menu.onClick && menu.onClick(menu)"
     >
       <template v-if="$slots.default">
@@ -26,7 +26,7 @@ type Menu =  {
   key: any,
   text?: string,
   icon?: string,
-  disabled?: boolean
+  disabled?: boolean | (() => boolean)
   onClick?: (menu: Menu) => void
 }
 
@@ -35,6 +35,15 @@ const props = withDefaults(
   {dire: 'row', size: 64}
 )
 
+const disabledMap = computed(() => {
+  const map = {}
+  for (let menu of props.menus) {
+    map[menu.key] = !menu.disabled ? false :
+      typeof menu.disabled === "boolean" ? menu.disabled : menu.disabled()
+  }
+  return map
+})
+
 const menuStyle = computed(() => {
   const offset = props.size / 4;
   return props.dire === 'row'

+ 12 - 4
src/views/scene/covers/measures.vue

@@ -1,6 +1,6 @@
 <template>
   <Measure
-      v-for="measure in list"
+      v-for="measure in list.concat(baseLines)"
       :key="measure.id"
       :data="measure"
       @change-points="points => changePoints(measure, points)"
@@ -13,11 +13,18 @@
 
 <script setup lang="ts">
 import { list, MeasureAtom } from '@/store/measure'
+import { baseLines } from '@/store/baseLine'
 import Measure from './measure.vue'
 import {ref} from "vue";
 import ActionsPanel from "@/views/scene/covers/actions.vue";
 
 const active = ref<MeasureAtom>()
+const getStore = (item: MeasureAtom) =>
+  ~list.value.indexOf(item)
+    ? list.value
+    : ~baseLines.value.indexOf(item)
+      ? baseLines.value
+      : null
 const activeActionMenus = [
   {
     key: "delete",
@@ -25,10 +32,11 @@ const activeActionMenus = [
     color: "#FF4D4F",
     iconColor: "#fff",
     action() {
-      const index = list.value.indexOf(active.value)
-      if (~index) {
-        list.value.splice(index, 1)
+      const store = getStore(active.value)
+      if (store) {
+        store.splice(store.indexOf(active.value), 1)
       }
+      active.value = null
     }
   }
 ]

+ 23 - 20
src/views/scene/menus/menus.ts

@@ -1,14 +1,16 @@
 import {findMenuByAttr, generateMixMenus as generateMixMenusRaw} from '@/utils/menus'
-import {ref} from "vue";
+import {computed, Ref, ref} from "vue";
 import {useSDK} from "@/hook";
 import {laserModeStack, modeDisabled} from '@/hook/custom/index'
 import {Mode} from "@/sdk";
+import {baseLines} from "@/store/baseLine";
 
 export type MenuRaw = {
   key: string,
   text: string,
   continued?: boolean
   icon?: string,
+  disabled?: boolean | (() => boolean),
   children?: MenuRaw[],
   onClick?: () => void | (() => void)
 }
@@ -39,24 +41,6 @@ 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",
@@ -94,11 +78,30 @@ export const menus: MenuRaw[] = [
     icon: "standard",
     text: "基准",
     key: "baseLineOrPoint",
+    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",
         text: "基准线",
-        key: menuEnum.BASE_LINE
+        key: menuEnum.BASE_LINE,
+        disabled: () => !!baseLines.value.length
       },
       {
         icon: "point",