root 2 rokov pred
rodič
commit
890f9a2d24

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 1 - 1
server/test/a0k4xu045_202305311600080410/attach/sceneStore


+ 0 - 1
src/components/base/components/input/state.js

@@ -194,7 +194,6 @@ export const numberPropsDesc = {
 export const rangePropsDesc = {
     ...numberPropsDesc,
     min: { ...numberPropsDesc.min, require: true },
-    min: { ...numberPropsDesc.min, require: true },
     input: { type: Boolean, default: true },
 }
 

+ 1 - 1
src/graphic/CanvasStyle/default.js

@@ -58,7 +58,7 @@ const CurveLan = {
 
 const Text = {
   strokeStyle: "rgb(0,0,0,1)",
-  fillStyle: "rgb(0,0,0,1)",
+  fillStyle: "#2F8FFF",
   fontSize: 14,
   strokeStyle_adding: "rgba(243, 255, 0, 0.8)",
   fillStyle_adding: "rgba(243, 255, 0, 0.8)",

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

@@ -517,7 +517,7 @@ export default class Draw {
     }
 
     const dires =
-      vector.category === UIEvents.MeasureLine
+      vector.category === UIEvents.DoubleArrow
         ? [
             [start, end],
             [end, start],

+ 0 - 1
src/graphic/Style1.js

@@ -66,7 +66,6 @@ const Style = {
   Lane,
   CurveLan,
   Point,
-  Text,
   CurvePoint,
   Text: {
     ...Text,

+ 1 - 1
src/sdk/laser/index.ts

@@ -25,7 +25,7 @@ export const laserFactory = (props: LaserSDKProps, store?: Store): LaserSDK => {
 
   laser.scene.el = props.sceneEl;
   if (store) {
-    store.showNavpanel = ref(true);
+    // store.showNavpanel = ref(true);
     attach(laser as unknown as LaserSDK, store);
   }
 

+ 4 - 3
src/views/graphic/header.vue

@@ -46,14 +46,14 @@ import UiIcon from "@/components/base/components/icon/index.vue";
 import UiButton from "@/components/base/components/button/index.vue";
 import {Mode} from './menus'
 import {changeStore, drawRef, graphicState} from '@/hook/useGraphic'
-import {computed, watch, watchEffect} from "vue";
+import {computed, watchEffect} from "vue";
 import {router, writeRouteName} from '@/router'
 import {AccidentPhoto, accidentPhotos, types} from '@/store/accidentPhotos'
 import {useData} from './data'
 import UiInput from "@/components/base/components/input/index.vue";
 import {roadPhotos} from "@/store/roadPhotos";
 import {back, uploadImage} from '@/store/sync'
-import {genUseLoading, useLoading} from "@/hook";
+import {genUseLoading} from "@/hook";
 import {dataService} from "@/graphic/Service/DataService";
 
 const data = useData()
@@ -73,7 +73,8 @@ watchEffect(() => {
   }
 })
 
-const menus = computed<{disable?: boolean, text: string, onClick: () => void}[]>(() => {
+type Menu = {disable?: boolean, text: string, icon: string, onClick: () => void}
+const menus = computed<Menu[]>(() => {
   const menus = [
     {
       text: "",

+ 44 - 0
src/views/scene/TrackMeasure.vue

@@ -0,0 +1,44 @@
+<template>
+  <ButtonPane class="photo-btn fun-ctrl" :size="80" @click="active = true">
+    <ui-icon type="line_h" class="icon" :class="{active}" />
+  </ButtonPane>
+</template>
+<script setup lang="ts">
+import UiIcon from "@/components/base/components/icon/index.vue";
+import ButtonPane from "@/components/button-pane/index.vue";
+import {startMeasure, SuccessMeasureAtom} from "@/views/scene/linkage/measure";
+import {ref, watchEffect} from "vue";
+
+const props = defineProps<{ onConfirm: (data: SuccessMeasureAtom) => void }>()
+const active = ref(false)
+watchEffect(() => {
+  if (active.value) {
+    startMeasure('L_LINE', 'red')
+      .then((measure) => {
+        props.onConfirm(measure)
+      })
+  }
+})
+</script>
+
+<style lang="scss" scoped>
+.photo-btn {
+  position: absolute;
+  margin-bottom: 16px;
+  top: 50%;
+  left: 15px;
+
+
+  .icon {
+    &.active {
+      color: var(--colors-primary-base);
+    }
+
+    position: absolute;
+    left: 50%;
+    transform: translateX(-50%);
+    font-size: 28px;
+  }
+}
+
+</style>

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

@@ -1,17 +1,15 @@
 <template>
   <Container @loaded="loaded = true" />
 
-  <template v-if="loaded">
-    <template v-if="!trackMode">
-      <Menus @enter-child="childPage = true" @leave-child="childPage = false" />
-      <BasePoints />
-      <FixPoints />
-      <Measures />
-      <Photo />
-      <ButtonPane class="back fun-ctrl" size="48" @click="back" v-if="!childPage">
-        <ui-icon type="close" class="icon" />
-      </ButtonPane>
-    </template>
+  <template v-if="loaded && !trackMode">
+    <Menus @enter-child="childPage = true" @leave-child="childPage = false" />
+    <BasePoints />
+    <FixPoints />
+    <Measures />
+    <Photo />
+    <ButtonPane class="back fun-ctrl" size="48" @click="back" v-if="!childPage">
+      <ui-icon type="close" class="icon" />
+    </ButtonPane>
     <Mode />
   </template>
 </template>
@@ -30,7 +28,6 @@ import customSetup from "../../hook/custom";
 import UiIcon from "@/components/base/components/icon/index.vue";
 import {ref, watchEffect} from "vue";
 import {back} from "@/store/sync";
-import router from "@/router";
 import {trackMode} from "@/views/scene/trackMeasureWidth";
 
 const loaded = ref(false)

+ 2 - 0
src/views/scene/linkage/measure.ts

@@ -9,9 +9,11 @@ type TempCanvasMeasureAtom = Omit<CanvasMeasureAtom, "canvas"> & {
   canvas: StartMeasure;
 };
 
+export type SuccessMeasureAtom = MeasureAtom & {length: number}
 
 let prevMeasure: TempCanvasMeasureAtom
 
+
 export const startMeasure = (type: MeasureType, color: string, firstClickMarker?: () => void) => {
   if (prevMeasure) {
     prevMeasure.canvas.bus.emit("quit")

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

@@ -1,5 +1,5 @@
 import {findMenuByAttr, generateMixMenus as generateMixMenusRaw} from '@/utils/menus'
-import {computed, nextTick, Ref, ref} from "vue";
+import {nextTick, ref} from "vue";
 import {useSDK} from "@/hook";
 import {laserModeStack, modeDisabled} from '@/hook/custom/index'
 import {Mode} from "@/sdk";

+ 1 - 1
src/views/scene/mode.vue

@@ -56,4 +56,4 @@ watch(activeKey, () => customMap.mode = activeKey.value)
 }
 </style>
 <script setup lang="ts">
-</script>
+</script>

+ 31 - 7
src/views/scene/trackMeasureWidth.ts

@@ -1,19 +1,43 @@
-import { router } from "@/router";
+import {router} from "@/router";
 import writeRouteName from "../../router/constant";
-import { startMeasure } from '../scene/linkage/measure'
-import {nextTick, ref} from "vue";
-import { useAsyncSDK } from '@/hook/useLaser'
+import {startMeasure, SuccessMeasureAtom} from '../scene/linkage/measure'
+import {ref, watchEffect} from "vue";
+import {useAsyncSDK} from '@/hook/useLaser'
+import {customMap, laserModeStack} from '@/hook/custom/index'
+import {Mode} from "@/sdk";
+import {mount} from "@/components/base/utils/componentHelper";
+import TrackMeasure from "@/views/scene/TrackMeasure.vue";
+import {list} from '@/store/measure'
+
 
 export const trackMode = ref(false)
 
+watchEffect(() => console.error(customMap.mode))
 export const trackMeasureWidth = async () => {
   trackMode.value = true
   await router.push({ name: writeRouteName.scene })
-  await useAsyncSDK()
-  const measure = await startMeasure('LINE', 'red')
+  const sdk = await useAsyncSDK()
+  list.value.forEach(item => sdk.carry.measureMap.get(item).hide())
+
+  laserModeStack.push(ref(Mode.cloud))
+  await new Promise(resolve => setTimeout(resolve, 10))
+  sdk.enterTopView()
+  const measure = await new Promise<SuccessMeasureAtom>(resolve => {
+    const { destroy } = mount(TrackMeasure, {
+      props: {
+        onConfirm: data => {
+          destroy()
+          resolve(data)
+        }
+      },
+      element: document.body
+    } as any)
+  })
+  laserModeStack.pop()
   await router.back()
-  await nextTick();
+  list.value.forEach(item => sdk.carry.measureMap.get(item).show())
   await new Promise(resolve => setTimeout(resolve, 100))
+  sdk.leaveTopView()
   trackMode.value = false
   return Number(measure.length.toFixed(2))
 }