Ver código fonte

Merge branch 'master' of http://192.168.0.115:3000/bill/traffic-laser

# Conflicts:
#	server/test/SS-t-P1d6CwREny2/attach/sceneStore
#	src/graphic/History/History.js
#	src/graphic/Renderer/Draw.js
xushiting 2 anos atrás
pai
commit
e5699e71a3

Diferenças do arquivo suprimidas por serem muito extensas
+ 5 - 1
server/test/SS-t-P1d6CwREny2/attach/sceneStore


+ 6 - 3
src/graphic/Renderer/Draw.js

@@ -532,14 +532,15 @@ export default class Draw {
 
   drawMagnifier(vector) {
     const ctx = this.context;
+    const [style] = help.setVectorStyle(ctx, vector);
+    const radius = vector.radius || style.radius;
     this.drawPoint({
       ...vector,
       ...vector.position,
-      radius: Style.Magnifier.radius,
+      radius,
     });
     const pt = coordinate.getScreenXY(vector.position);
     vector.setPopPosition();
-    //const target = coordinate.getScreenXY(vector.popPosition);
     const target = {
       x: vector.popPosition.x,
       y: vector.popPosition.y,
@@ -589,7 +590,7 @@ export default class Draw {
           size * 2 * ro,
         ];
       }
-      const size = help.getReal(style.target.radius);
+      const size = style.target.radius;
       ctx.beginPath();
       ctx.arc(target.x, target.y, size, 0, 2 * Math.PI);
       ctx.clip();
@@ -779,6 +780,8 @@ export default class Draw {
     );
   }
 
+  drawCurveLine() {}
+
   drawLine(vector) {
     const startReal = dataService.getPoint(vector.startId);
     const start = coordinate.getScreenXY(startReal);

+ 1 - 1
src/graphic/Service/LineService.js

@@ -3,7 +3,7 @@ import Line from "../Geometry/Line.js";
 import CurvePoint from "../Geometry/CurvePoint.js";
 import CurveLine from "../Geometry/CurveLine.js";
 import { dataService } from "./DataService.js";
-import { curvePointService } from "./CurvePointService.js";
+// import { curvePointService } from "./CurvePointService.js";
 import VectorCategory from "../enum/VectorCategory.js";
 import { mathUtil } from "../Util/MathUtil.js";
 import { uiService } from "./UIService.js";

+ 4 - 1
src/hook/useLaser.ts

@@ -59,7 +59,10 @@ export const setupLaser = async (
   await loadSetupLaser();
   return new Promise<SDK>((resolve) => {
     sdk = sdkFactory(props as any);
-    sdk.scene.on("allLoaded", () => resolve(sdk));
+    sdk.scene.on("allLoaded", () => {
+      console.error("allloaded")
+      resolve(sdk)
+    });
   }).then((sdk) => {
     for (const fn of listenLoaded) {
       setTimeout(fn, 0, sdk);

+ 48 - 27
src/store/sync.ts

@@ -6,7 +6,7 @@ import {fixPoints} from "@/store/fixPoint";
 import {photos} from "@/store/photos";
 import {accidentPhotos} from "@/store/accidentPhotos";
 import {roadPhotos} from "@/store/roadPhotos";
-import {blobToBase64, debounce, getId} from "@/utils";
+import {base64ToBlob, blobToBase64, debounce, getId} from "@/utils";
 import {watch} from "vue";
 import {params} from "@/hook";
 import router, {writeRouteName} from "@/router";
@@ -40,17 +40,22 @@ export const api =
           return true;
         },
         async getFile(url) {
-          // console.error(url, baseURL)
-          //
-          // return url.includes(baseURL) ? url : (baseURL + url.trim());
-
           if (url.includes(baseURL)) {
             url = url.substring(baseURL.length);
           }
           url = url.trim();
-          const data = await axios.get(url, { responseType: "blob" });
-          const base64 = await blobToBase64(data.data);
-          return base64
+          const paths = url.split("/")
+          const notBase64BaseTypes = [
+            ".png", ".jpg", ".bin"
+          ]
+          const notBase64 = notBase64BaseTypes.some(type => paths[paths.length - 1].includes(type))
+          if (notBase64) {
+            return baseURL + url
+          } else {
+            const data = await axios.get(url, { responseType: "blob" });
+            const base64 = await blobToBase64(data.data);
+            return URL.createObjectURL(base64ToBlob(base64))
+          }
         },
         async closePage() {
           return router.push({ name: writeRouteName.scene });
@@ -88,18 +93,19 @@ export const api =
           }
           fileUrl = new URL(fileUrl, "http://www.a.com").pathname
           fileUrl = (params.realPath || params.m) + fileUrl
-          console.error("处理后url:" + fileUrl)
 
           const paths = fileUrl.split("/")
-          const notBase64 = paths[paths.length - 1].includes(".png") ||
-            paths[paths.length - 1].includes(".jpg")
+          const notBase64BaseTypes = [
+            ".png", ".jpg", ".bin"
+          ]
+          const notBase64 = notBase64BaseTypes.some(type => paths[paths.length - 1].includes(type))
 
-          if (import.meta.env.DEV || !notBase64) {
+          if (!notBase64) {
             return await new Promise<string>((resolve) => {
               const apiName = `getImageCallback${count++}`
               global[apiName] = (base64) => {
                 console.error("请求url:" + fileUrl, "返回:" + base64.substring(0, 60))
-                resolve(base64);
+                resolve(URL.createObjectURL(base64ToBlob(base64)));
                 delete global[apiName]
               };
               global.android.getImage(fileUrl, apiName);
@@ -166,7 +172,7 @@ const loadStore = async () => {
   console.log("开始同步syncSceneStore")
 };
 
-export const updateSceneStore = debounce(api.setStore, 1000);
+export const updateSceneStore = debounce(api.setStore, 300);
 export const uploadImage = (blob: Blob) => {
   const file = new File([blob], `${getId()}.jpg`);
   return api.uploadImage(file);
@@ -204,19 +210,34 @@ const syncSceneStore = () => {
     { deep: true }
   );
 };
-
-if (global.android) {
-  document.documentElement.addEventListener('focusin', ev => {
-    console.log("获得焦点")
-    console.log(ev.target)
-    global.android.inputMethodManager(true);
-  })
-  document.documentElement.addEventListener('focusout', ev => {
-    console.log("失去焦点")
-    console.log(ev.target)
-    global.android.inputMethodManager(false);
-  })
-}
+//
+// // if (global.android) {
+//   const isEditInput = (dom: HTMLElement) => {
+//     const tagName = dom.tagName.toUpperCase();
+//     const isInput = tagName === "INPUT"
+//     const isTextarea = tagName === "TEXTAREA"
+//     console.log(isInput && dom.getAttribute("type") === "text")
+//     if (!(isInput && dom.getAttribute("type") === "text") && !isTextarea) {
+//       return false;
+//     }
+//     console.log("???")
+//     return !dom.hasAttribute("readonly")
+//   }
+//   document.documentElement.addEventListener('focusin', ev => {
+//     console.log("获得焦点")
+//     console.log(ev.target)
+//     if (isEditInput(ev.target as HTMLElement)) {
+//       global.android.inputMethodManager(true);
+//     }
+//   })
+//   document.documentElement.addEventListener('focusout', ev => {
+//     console.log("失去焦点")
+//     console.log(ev.target)
+//     if (isEditInput(ev.target as HTMLElement)) {
+//       global.android.inputMethodManager(false);
+//     }
+//   })
+// // }
 
 loadStore().catch((e) => {
   console.error(e);

+ 8 - 10
src/views/graphic/container.vue

@@ -7,22 +7,20 @@
 </template>
 
 <script setup lang="ts">
-import {computed, onMounted, ref} from "vue";
+import {computed, nextTick, onMounted, ref, watchEffect} from "vue";
 import {setCanvas} from "@/hook/useGraphic";
-import {router} from '@/router'
-import {Mode} from "@/views/graphic/menus";
-import {accidentPhotos} from "@/store/accidentPhotos";
-import {roadPhotos} from "@/store/roadPhotos";
 import { useData } from './data'
 
 const drawCanvasRef = ref<HTMLCanvasElement>();
+const data = useData()
 
+const stop = watchEffect(() => {
+  if (drawCanvasRef.value && data.value) {
+    setCanvas(drawCanvasRef.value, data);
+    nextTick(stop)
+  }
+})
 
-
-onMounted(() => {
-  console.log(useData())
-  setCanvas(drawCanvasRef.value, useData());
-});
 </script>
 
 <style scoped lang="scss">

+ 6 - 2
src/views/graphic/data.ts

@@ -9,8 +9,12 @@ import {photos} from "@/store/photos";
 export const useData = () => {
   const data = ref<AccidentPhoto | RoadPhoto>(null);
   watch(
-    () => router.currentRoute.value.params,
-    (params) => {
+    () => ({
+        params: router.currentRoute.value.params,
+        accidentPhotos: accidentPhotos.value,
+        roadPhotos: roadPhotos.value
+    }),
+    ({params}) => {
       if (!params.action) {
         data.value = null
       } else if (params.action === 'add') {

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

@@ -47,6 +47,7 @@ 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";
 
 const data = useData()
 const mode = computed(() => Number(router.currentRoute.value.params.mode) as Mode)
@@ -104,7 +105,7 @@ const menus = computed<{disable?: boolean, text: string, onClick: () => void}[]>
   return menus
 })
 
-const saveStore = async () => {
+const saveStore = genUseLoading(async () => {
   const newData = {
     ...data.value,
     data: JSON.parse(JSON.stringify(drawRef.value.load.save()))
@@ -118,7 +119,7 @@ const saveStore = async () => {
   } else {
     origin.push(newData)
   }
-}
+})
 
 const saveHandler = async () => {
   await saveStore()