Browse Source

fix: 添加新数据需求

bill 2 years ago
parent
commit
5610fbeafd
48 changed files with 78 additions and 45 deletions
  1. 2 0
      server/mock.ts
  2. 1 0
      server/test/SS-t-P1d6CwREny2/attach/floor_0_vision.txt
  3. 1 1
      server/test/SS-t-P1d6CwREny2/attach/sceneStore
  4. BIN
      server/test/SS-t-P1d6CwREny2/attach/upload/1685518090910611.jpg
  5. BIN
      server/test/SS-t-P1d6CwREny2/attach/upload/1685520124861337.jpg
  6. BIN
      server/test/SS-t-P1d6CwREny2/attach/upload/1685520158221265.jpg
  7. BIN
      server/test/SS-t-P1d6CwREny2/attach/upload/1685520752118646.jpg
  8. BIN
      server/test/SS-t-P1d6CwREny2/attach/upload/168552108627021.jpg
  9. BIN
      server/test/SS-t-P1d6CwREny2/attach/upload/1685521100958725.jpg
  10. BIN
      server/test/SS-t-P1d6CwREny2/attach/upload/1685521116786961.jpg
  11. BIN
      server/test/SS-t-P1d6CwREny2/attach/upload/1685521130035543.jpg
  12. BIN
      server/test/SS-t-P1d6CwREny2/attach/upload/1685521148222535.jpg
  13. BIN
      server/test/SS-t-P1d6CwREny2/attach/upload/1685521159254605.jpg
  14. BIN
      server/test/SS-t-P1d6CwREny2/attach/upload/1685521184172334.jpg
  15. 1 0
      server/test/SS-t-P1d6CwREny2/attach/vision.json
  16. 1 1
      server/test/a0k4xu045_202305311600080410/attach/sceneStore
  17. BIN
      server/test/a0k4xu045_202305311600080410/attach/upload/1685522025979634.jpg
  18. BIN
      server/test/a0k4xu045_202305311600080410/attach/upload/1685526052186380.jpg
  19. BIN
      server/test/a0k4xu045_202305311600080410/attach/upload/1685526111353443.jpg
  20. BIN
      server/test/a0k4xu045_202305311600080410/attach/upload/1685526113065592.jpg
  21. BIN
      server/test/a0k4xu045_202305311600080410/attach/upload/1685526134152409.jpg
  22. BIN
      server/test/a0k4xu045_202305311600080410/attach/upload/1685526152705630.jpg
  23. BIN
      server/test/a0k4xu045_202305311600080410/attach/upload/1685581812129495.jpg
  24. BIN
      server/test/a0k4xu045_202305311600080410/attach/upload/1685581883868282.jpg
  25. BIN
      server/test/a0k4xu045_202305311600080410/attach/upload/1685581888778190.jpg
  26. BIN
      server/test/a0k4xu045_202305311600080410/attach/upload/1685582198712327.jpg
  27. 3 2
      src/graphic/Geometry/Img.js
  28. 3 2
      src/graphic/Geometry/Magnifier.js
  29. 2 1
      src/graphic/Load.js
  30. BIN
      src/graphic/a0k4xu045_202305301709276070.zip
  31. 1 1
      src/hook/useGraphic.ts
  32. 1 1
      src/hook/useParams.ts
  33. 1 1
      src/store/photos.ts
  34. 6 5
      src/store/sync.ts
  35. 1 1
      src/views/accidents/index.vue
  36. 2 1
      src/views/graphic/geos/magnifier.vue
  37. 1 1
      src/views/photos/index.vue
  38. 16 7
      src/views/scene/covers/basePoint.vue
  39. 11 5
      src/views/scene/covers/cover.vue
  40. 15 5
      src/views/scene/covers/fixPoint.vue
  41. BIN
      src/views/scene/covers/icon/point_f_s.png
  42. BIN
      src/views/scene/covers/icon/point_s_n.png
  43. BIN
      src/views/scene/covers/icon/point_s_s.png
  44. BIN
      src/views/scene/covers/icon/pointf_n.png
  45. BIN
      src/views/scene/covers/point1.png
  46. 1 1
      src/views/scene/menus/menus.ts
  47. 1 1
      src/views/scene/menus/pane.vue
  48. 7 8
      src/views/scene/photo.vue

+ 2 - 0
server/mock.ts

@@ -39,8 +39,10 @@ export async function createServer(port: number) {
     const file = (req as any).files.file
     const relUrl = `/attach/upload/${file.name}`
     const absUrl = path.resolve(staticDir, `./${req.params.sceneCode}/${relUrl}`)
+    console.log("上传图片完成路径为", relUrl)
     file.mv(absUrl, err => {
       if (err) {
+        res.status(404)
         res.json({code: 1, msg: 'ok'})
       } else {
         res.json({code: 0, msg: 'ok', data: relUrl})

+ 1 - 0
server/test/SS-t-P1d6CwREny2/attach/floor_0_vision.txt

@@ -0,0 +1 @@
+{}

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


BIN
server/test/SS-t-P1d6CwREny2/attach/upload/1685518090910611.jpg


BIN
server/test/SS-t-P1d6CwREny2/attach/upload/1685520124861337.jpg


BIN
server/test/SS-t-P1d6CwREny2/attach/upload/1685520158221265.jpg


BIN
server/test/SS-t-P1d6CwREny2/attach/upload/1685520752118646.jpg


BIN
server/test/SS-t-P1d6CwREny2/attach/upload/168552108627021.jpg


BIN
server/test/SS-t-P1d6CwREny2/attach/upload/1685521100958725.jpg


BIN
server/test/SS-t-P1d6CwREny2/attach/upload/1685521116786961.jpg


BIN
server/test/SS-t-P1d6CwREny2/attach/upload/1685521130035543.jpg


BIN
server/test/SS-t-P1d6CwREny2/attach/upload/1685521148222535.jpg


BIN
server/test/SS-t-P1d6CwREny2/attach/upload/1685521159254605.jpg


BIN
server/test/SS-t-P1d6CwREny2/attach/upload/1685521184172334.jpg


+ 1 - 0
server/test/SS-t-P1d6CwREny2/attach/vision.json

@@ -0,0 +1 @@
+{}

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


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


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


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


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


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


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


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


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


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


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


+ 3 - 2
src/graphic/Geometry/Img.js

@@ -1,6 +1,7 @@
 import { mathUtil } from "../Util/MathUtil.js";
 import VectorType from "../enum/VectorType.js";
 import Geometry from "./Geometry";
+import {api} from '@/store/sync.ts'
 
 export default class Img extends Geometry {
   constructor(src, vectorId) {
@@ -24,9 +25,9 @@ export default class Img extends Geometry {
   }
 
   setImageData() {
-    return new Promise((resolve, reject) => {
+    return new Promise(async (resolve, reject) => {
       this.imageData = new Image();
-      this.imageData.src = this.src;
+      this.imageData.src = await api.getFile(this.src);
       this.imageData.onload = function () {
         resolve();
       };

+ 3 - 2
src/graphic/Geometry/Magnifier.js

@@ -4,6 +4,7 @@ import { coordinate } from "../Coordinate.js";
 import { mathUtil } from "../Util/MathUtil.js";
 import VectorType from "../enum/VectorType.js";
 import Geometry from "./Geometry";
+import {api} from '@/store/sync.ts'
 
 const distance = 500;
 export default class Magnifier extends Geometry {
@@ -141,10 +142,10 @@ export default class Magnifier extends Geometry {
   }
 
   setImageData() {
-    return new Promise((resolve, reject) => {
+    return new Promise(async (resolve, reject) => {
       if (this.photoUrl) {
         this.photoImage = new Image();
-        this.photoImage.src = this.photoUrl;
+        this.photoImage.src = await api.getFile(this.photoUrl);
         this.photoImage.onload = function () {
           resolve();
         };

+ 2 - 1
src/graphic/Load.js

@@ -155,7 +155,8 @@ export default class Load {
         if (data3d.fixPoints) {
           for (let i = 0; i < data3d.fixPoints.length; ++i) {
             let point = pointService.create(
-              this.getXY(width, height, data3d.fixPoints[i])
+              // data3d.fixPoints[i].text
+              this.getXY(width, height, data3d.fixPoints[i].pos)
             );
             point.setCategory(VectorCategory.Point.FixPoint);
           }

BIN
src/graphic/a0k4xu045_202305301709276070.zip


+ 1 - 1
src/hook/useGraphic.ts

@@ -55,7 +55,7 @@ export const setCanvas = async (canvas: HTMLCanvasElement, data: Ref<AccidentPho
           console.log("load", data.value)
           drawRef.value.load.load(data.value.data, {
             ...data.value.sceneData,
-            backImage: await api.getFile(data.value.photoUrl)
+            backImage: data.value.photoUrl
           })
         } else {
           drawRef.value.load.clear()

+ 1 - 1
src/hook/useParams.ts

@@ -21,7 +21,7 @@ export const setParams = (p: Params) => (params = p);
 
 export const useParams = () => params;
 
-//params.m = "SS-t-P1d6CwREny2"
+// params.m = "SS-t-P1d6CwREny2"
 if (params.test) {
   params.test = true;
 } else {

+ 1 - 1
src/store/photos.ts

@@ -7,7 +7,7 @@ export type PhotoRaw = {
   meterPerPixel: number
   time: number,
   measures: { pos: Pos[], dis: number}[],
-  fixPoints: Array<Pos>,
+  fixPoints: Array<{ text:string, pos: Pos }>,
   basePoints: Array<Pos>
   baseLines: Array<Pos[]>
 }

+ 6 - 5
src/store/sync.ts

@@ -16,8 +16,8 @@ const global = window as any;
 
 let count = 0;
 export const api =
-  // import.meta.env.DEV && !global.android
-  true
+  import.meta.env.DEV && !global.android
+  // true
     ? // const api = import.meta.env.DEV
       {
         async setStore(data) {
@@ -47,7 +47,7 @@ export const api =
           url = url.trim();
           const paths = url.split("/")
           const notBase64BaseTypes = [
-            ".png", ".jpg", ".bin"
+            ".png", ".jpg"
           ]
           const notBase64 = notBase64BaseTypes.some(type => paths[paths.length - 1].includes(type))
           if (notBase64) {
@@ -97,7 +97,8 @@ export const api =
 
           const paths = fileUrl.split("/")
           const notBase64BaseTypes = [
-            ".png", ".jpg", ".bin"
+            // ".png", ".jpg"
+            // , ".bin"
           ]
           const notBase64 = notBase64BaseTypes.some(type => paths[paths.length - 1].includes(type))
 
@@ -105,7 +106,7 @@ export const api =
             return await new Promise<string>((resolve) => {
               const apiName = `getImageCallback${count++}`
               global[apiName] = (base64) => {
-                console.error("请求url:" + fileUrl, "返回:" + base64.substring(0, 60))
+                // console.error("请求url:" + fileUrl, "返回:" + base64.substring(0, 60))
                 resolve(URL.createObjectURL(base64ToBlob(base64)));
                 delete global[apiName]
               };

+ 1 - 1
src/views/accidents/index.vue

@@ -1,7 +1,7 @@
 <template>
   <MainPanel>
     <template v-slot:header>
-      <Header :count="selects.length" :title="`标注照片(${sortPhotos.length})`">
+      <Header :count="selects.length" :title="`标注照片(${sortPhotos.length})`">
         <ui-button
             :type="selectMode ? 'primary' : 'normal'"
             @click="selectMode = !selectMode"

+ 2 - 1
src/views/graphic/geos/magnifier.vue

@@ -51,7 +51,8 @@ const menus = [
 watch(
   () => [file.value],
   async ([blob]) => {
-    syncVector(await api.getFile(await uploadImage(blob)))
+    // console.log(blob)
+    syncVector(await uploadImage(blob))
   }
 )
 

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

@@ -1,7 +1,7 @@
 <template>
   <MainPanel>
     <template v-slot:header>
-      <Header :count="selects.length" title="照片管理">
+      <Header :count="selects.length" :title="`全部照片(${photos.length})`">
         <ui-button type="primary" @click="selectMode = !selectMode" width="96px">
           {{ selectMode ? '取消' : '选择' }}
         </ui-button>

+ 16 - 7
src/views/scene/covers/basePoint.vue

@@ -2,26 +2,35 @@
   <Cover
       @change-pos="pos => $emit('changePos', pos)"
       :pos="pos"
-      @focus="$emit('focus')"
-      @blur="$emit('blur')"
+      @focus="active = true"
+      @blur="active = false"
   >
-    <img :src="icon" class="label" />
+    <img :src="active ? activeIcon : icon" class="label" />
   </Cover>
 
 </template>
 
 <script setup lang="ts">
 import Cover from './cover.vue'
-import icon from './point1.png'
+import icon from './icon/point_s_n.png'
+import activeIcon from './icon/point_s_s.png'
 import {Pos3D} from '@/sdk'
-import {watchEffect} from "vue";
+import {ref, watchEffect} from "vue";
 
 const props = defineProps<{ pos: Pos3D }>()
-defineEmits<{
+const active = ref(false)
+const emit = defineEmits<{
   (m: 'changePos', pos: Pos3D): void,
   (m: 'focus'): void,
-  (m: 'blur'): void
+  (m: 'blur'): void,
 }>()
+watchEffect(() => {
+  if (active.value) {
+    emit('focus')
+  } else {
+    emit('blur')
+  }
+})
 </script>
 
 <style scoped lang="scss">

+ 11 - 5
src/views/scene/covers/cover.vue

@@ -1,11 +1,12 @@
 <template>
   <div
       class="cover-layout"
-      @click.stop.prevent="clickHandler"
+      @click="clickHandler"
       @mousedown.stop.prevent="downHandler"
       @touchstart.stop.prevent="downHandler"
       :class="{ move: move }"
       :style="style"
+      ref="dom"
   >
     <slot />
   </div>
@@ -17,13 +18,16 @@ import {Pos, Pos3D} from '@/sdk'
 import {useSDK} from '@/hook'
 import { getPostionByTarget} from '@/components/base/utils'
 
-const props = defineProps<{ pos: Pos3D }>()
+const props = defineProps<{
+  pos: Pos3D
+}>()
 const emit = defineEmits<{
   (m: 'changePos', pos: Pos3D): void
   (m: 'focus'): void
   (m: 'blur'): void
 }>()
 const sdk = useSDK()
+const dom = ref<HTMLElement>()
 
 const screen = ref<Pos>(null)
 const style = computed(
@@ -95,9 +99,11 @@ const downHandler = (sev: MouseEvent | TouchEvent) => {
 const clickHandler = ev => {
   emit("focus")
 
-  const handler = () => {
-    emit("blur")
-    document.documentElement.removeEventListener("click", handler)
+  const handler = (ev: MouseEvent) => {
+    if (!dom.value.contains(ev.target as HTMLElement) && ev.target !== dom.value) {
+      emit("blur")
+      document.documentElement.removeEventListener("click", handler)
+    }
   }
   document.documentElement.addEventListener("click", handler, { passive: true })
 }

+ 15 - 5
src/views/scene/covers/fixPoint.vue

@@ -2,12 +2,12 @@
   <Cover
       @change-pos="pos => $emit('changePos', pos)"
       :pos="data.pos"
-      @focus="$emit('focus')"
-      @blur="$emit('blur')"
+      @focus="active = true"
+      @blur="active = false"
       class="fix-cover"
   >
     <div class="label">
-      <img :src="icon" />
+      <img :src="active ? activeIcon : icon" />
       <p>{{ data.text }}</p>
     </div>
   </Cover>
@@ -16,16 +16,26 @@
 
 <script setup lang="ts">
 import Cover from './cover.vue'
-import icon from './point1.png'
+import icon from './icon/pointf_n.png'
+import activeIcon from './icon/point_f_s.png'
 import {Pos3D} from '@/sdk'
 import {FixPoint} from "@/store/fixPoint";
+import {ref, watchEffect} from "vue";
 
 const props = defineProps<{ data: FixPoint }>()
-defineEmits<{
+const active = ref(false)
+const emit = defineEmits<{
   (m: 'changePos', pos: Pos3D): void,
   (m: 'focus'): void,
   (m: 'blur'): void,
 }>()
+watchEffect(() => {
+  if (active.value) {
+    emit('focus')
+  } else {
+    emit('blur')
+  }
+})
 </script>
 
 <style scoped lang="scss">

BIN
src/views/scene/covers/icon/point_f_s.png


BIN
src/views/scene/covers/icon/point_s_n.png


BIN
src/views/scene/covers/icon/point_s_s.png


BIN
src/views/scene/covers/icon/pointf_n.png


BIN
src/views/scene/covers/point1.png


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

@@ -71,7 +71,7 @@ export const menus: MenuRaw[] = [
   },
   {
     icon: "standard",
-    text: "基准线/点",
+    text: "基准",
     key: "baseLineOrPoint",
     children: [
       {

+ 1 - 1
src/views/scene/menus/pane.vue

@@ -27,7 +27,7 @@ const props = withDefaults(
 const emit = defineEmits<{ (e: 'back'): void }>();
 const backMenu = {
   icon: "return",
-  text: "返回",
+  text: "",
   key: "back",
   onClick: () => emit("back")
 }

+ 7 - 8
src/views/scene/photo.vue

@@ -39,15 +39,14 @@ if (photos.value[photos.value.length - 1]?.url) {
 
 const tempPhoto = ref<string>();
 const coverRef = ref<HTMLImageElement>()
-const getCurrentScreens = (poss: Array<Pos3D>): Array<Pos> => {
+const getCurrentScreen = (pos: Pos3D): Pos => {
   const sdk = useSDK()
-  return poss
-    .map(pos => {
-      const data = sdk.scene.getScreenByPoint(pos)
-      return data.trueSide ? data.pos : null
-    })
-    .filter(pos => !!pos);
+  const data = sdk.scene.getScreenByPoint(pos)
+  return data.trueSide ? data.pos : null
 }
+const getCurrentScreens = (poss: Array<Pos3D>): Array<Pos> =>
+  poss.map(getCurrentScreen).filter(pos => !!pos);
+
 const photo = genUseLoading(async () => {
   const sdk = useSDK()
   const dom = sdk.scene.el
@@ -90,7 +89,7 @@ const photo = genUseLoading(async () => {
       baseLines: baseLines.value
         .map(data => getCurrentScreens(data.points))
         .filter(poss => poss.length),
-      fixPoints: getCurrentScreens(fixPoints.value.map(data => data.pos)),
+      fixPoints: fixPoints.value.map(data => ({ text: data.text, pos: getCurrentScreen(data.pos) })),
       basePoints: getCurrentScreens(basePoints.value.map(data => data.pos))
     })
     showCoverUrl.value = await api.getFile(url)