bill hai 1 día
pai
achega
6aa74f9ea8

+ 34 - 17
src/components/tagging/sign-new.vue

@@ -1,6 +1,6 @@
 <template>
   <div
-    v-if="show && posStyle"
+    v-if="task3D && show && posStyle"
     class="hot-item pc"
     :style="posStyle"
     @mouseenter="isHover = true"
@@ -21,7 +21,7 @@
           <ui-audio
             v-if="tagging.audio"
             class="audio"
-            :src="getResource(getFileUrl(tagging.audio))"
+            :src="getResources(getFileUrl(tagging.audio))"
             ref="audio"
           />
         </h2>
@@ -72,12 +72,13 @@ import Preview from "../static-preview/index.vue";
 import { getTaggingStyle } from "@/store";
 import { getFileUrl } from "@/utils";
 import { sdk, TaggingPositionNode } from "@/sdk";
-import { custom, getResource } from "@/env";
+import { custom, getResource as getResources } from "@/env";
 
 import type { Tagging, TaggingPosition } from "@/store";
 import { useCameraChange, usePixel } from "@/hook/use-pixel";
 import { inRevise } from "bill/utils";
 import { defStyleType } from "@/api";
+import mitt from "mitt";
 
 export type SignProps = { tagging: Tagging; scenePos: TaggingPosition; show?: boolean };
 
@@ -94,13 +95,11 @@ const emit = defineEmits<{
 const desc = ref<HTMLDivElement>();
 const showDesc = computed(() => {
   const a = desc.value?.innerText.trim();
-  console.error("--aaa->", desc.value, a);
   return a;
 });
 
 const audio = ref();
 watchEffect(() => {
-  audio.value && console.error("准备好了!,");
   if (props.show && audio.value) {
     audio.value.play();
   }
@@ -109,20 +108,38 @@ const [posStyle, pos, pause, recovery] = usePixel(() => undefined);
 
 const queryItems = computed(() =>
   props.tagging.images.map((image) => ({
-    url: getResource(getFileUrl(image)),
+    url: getResources(getFileUrl(image)),
   }))
 );
-console.log(props.tagging.styleId);
 const taggingStyle = computed(() => getTaggingStyle(props.tagging.styleId));
-const tag = markRaw(
-  sdk.createTagging({
-    ...props.scenePos,
-    title: props.tagging.title,
-    position: props.scenePos.localPos,
-    canMove: false,
-    image: getFileUrl(taggingStyle.value!.icon),
-  })
-) as TaggingPositionNode;
+let task3D = sdk.createTagging({
+  ...props.scenePos,
+  title: props.tagging.title,
+  position: props.scenePos.localPos,
+  canMove: false,
+  image: getFileUrl(taggingStyle.value!.icon),
+});
+if (!task3D) {
+  emit("delete");
+}
+const emptyfn = () => {};
+const tag = (task3D
+  ? markRaw(task3D)
+  : {
+      changeCanMove: emptyfn,
+      changeMat: emptyfn,
+      changeFontSize: emptyfn,
+      changeTitle: emptyfn,
+      visibilityTitle: emptyfn,
+      changeType: emptyfn,
+      changeImage: emptyfn,
+      changePosition: emptyfn,
+      changeLineHeight: emptyfn,
+      visibility: emptyfn,
+      getImageCenter: emptyfn,
+      bus: mitt(),
+      destroy: emptyfn,
+    }) as TaggingPositionNode;
 const showDelete = ref(false);
 tag.showDelete = (show) => {
   showDelete.value = show;
@@ -184,7 +201,6 @@ tag.bus.on("changeLineHeight", (lineHeight) => {
 watch(getPosition, (p) => {
   changeTimeout = setTimeout(() => {
     if (inRevise(p, currentPosition)) {
-      console.log("更改当前位置");
       tag.changePosition(p);
       currentPosition = p;
     }
@@ -311,6 +327,7 @@ defineExpose(tag);
       p {
         margin-bottom: 10px;
         display: flex;
+
         span {
           flex: 0 0 auto;
         }

+ 2 - 1
src/hook/use-fly.ts

@@ -47,6 +47,7 @@ export const flyTagging = (tagging: Tagging, callback?: () => void) => {
   };
   flyIndex(0);
   stopFly = () => {
+    console.log('stopstop')
     clearTimeout(timeout)
     isStop = true;
     stopFly = null;
@@ -146,4 +147,4 @@ export const flyModel = (model: FuseModel, mode: "pano" | "fuse", f = false) =>
   if (currentModel.value !== fuseModel) {
     loadModel(fuseModel);
   }
-};
+};

+ 17 - 9
src/layout/edit/scene-select.vue

@@ -44,13 +44,13 @@
           </TabPane>
         </Tabs>
       </div>
-      <div style="padding: 1px" v-else>
+      <!-- <div style="padding: 1px" v-else>
         <Empty
           :description="keyword.length ? '暂无搜索结果' : '暂无结果'"
           :image="Empty.PRESENTED_IMAGE_SIMPLE"
           className="ant-empty ant-empty-normal"
         />
-      </div>
+      </div> -->
     </div>
   </Modal>
 
@@ -157,7 +157,6 @@ const typeFilterScenes = computed(() => {
   const typeScenes: any = {};
   for (const type of types.value) {
     typeScenes[type] = origin.value
-    // && item.name.includes(keyword.value)
       .filter((item) => item.name && item.num )
       .filter((item) => item.type === type);
   }
@@ -178,12 +177,21 @@ const rowSelection: any = ref({
 
   hideSelectAll: true,
   onChange: (ids: string[]) => {
-    console.error(ids)
+    const key =  typeFilterScenes.value[type.value].map((item: any) => item.num).join('')
     ids = ids.filter(id => !selectIds.value.includes(id))
-    cache[type.value] = ids
+    if (!cache[type.value]) {
+      cache[type.value] = {}
+    }
+    cache[type.value][key] = ids
+
+
+
+
     const curIds = [...selectIds.value]
-    for (const key in cache) {
-      curIds.push(...cache[key])
+    for (const keyp in cache) {
+      for (const key in cache[keyp]) {
+        curIds.push(...cache[keyp][key])
+      }
     }
     selects.value = curIds
   },
@@ -218,7 +226,7 @@ const addModelHandler = createLoadPack(async (attachs: any[]) => {
       attach
     }
   });
-  const addPromises = items.map(item => addFuseModel(item.data, item.attach));
+  const addPromises = items.map(item => addFuseModel(item.data, item.attach).then(data => item.data = data));
 
   const addModels = await Promise.all(addPromises);
   await new Promise<void>((resolve) => {
@@ -237,7 +245,7 @@ const addModelHandler = createLoadPack(async (attachs: any[]) => {
   addModels.forEach(item => {
     if (getSceneModel(item)) {
       item.rotation = getSceneModel(item)!.getDefaultRotation();
-      getSceneModel(item)!.putInFrontOfCam()
+      // getSceneModel(item)!.putInFrontOfCam()
     }
 
   });

+ 14 - 5
src/sdk/association/fuseMode.ts

@@ -1,6 +1,6 @@
 import { SDK, SceneModel, ModelAttrRange } from "../sdk";
 import { toRaw, watch, reactive, ref, watchEffect } from "vue";
-import { custom, getResource } from "@/env";
+import { custom, getResource as getResources } from "@/env";
 import {
   diffArrayChange,
   shallowWatchArray,
@@ -25,7 +25,7 @@ import { currentLayout, RoutesName } from "@/router";
 import { unsetFactory } from "@/utils/unset";
 import { getTaggingPosNode, taggingGroup } from "./tagging";
 
-const us = unsetFactory()
+export const us = unsetFactory()
 
 // -----------------模型关联--------------------
 
@@ -63,6 +63,7 @@ const setModels = (sdk: SDK, models: FuseModels, oldModels: FuseModels) => {
     let sceneModel: SceneModel;
     try {
       
+    console.error('addMode', itemRaw)
       sceneModel = sdk.addModel({
         ...itemRaw,
         ...modelRange,
@@ -75,7 +76,7 @@ const setModels = (sdk: SDK, models: FuseModels, oldModels: FuseModels) => {
           : item.modelType,
         url: [SceneType.SWSS, SceneType.SWYDSS].includes(item.type)
           ? item.url
-          : item.url && item.url.map(getResource),
+          : item.url && item.url.map(getResources),
         fromType: item.type,
       });
     } catch (e) {
@@ -86,6 +87,10 @@ const setModels = (sdk: SDK, models: FuseModels, oldModels: FuseModels) => {
 
     sceneModelMap.set(itemRaw, sceneModel);
 
+    let stop = true
+    setTimeout(() => {
+      stop = false
+    }, 3000)
     let changeId: NodeJS.Timeout;
     sceneModel.bus.on("transformChanged", (transform) => {
       clearTimeout(changeId);
@@ -125,7 +130,12 @@ const setModels = (sdk: SDK, models: FuseModels, oldModels: FuseModels) => {
 
         if (deepIsRevise(update, transform)) {
           console.error('change', item)
-          us.unSet(() => Object.assign(item, transform));
+          if (stop) {
+            us.unSet(() => Object.assign(item, transform));
+          } else {
+            Object.assign(item, transform)
+          }
+          
         }
       }, 16);
     });
@@ -296,7 +306,6 @@ export const associationModels = (sdk: SDK) => {
             () => item.rotation,
             () => {
               if (!us.isUnSet) {
-                console.log('rotation', item.raw.modelTitle,  toRaw(item.rotation))
                 getSceneModel(item)?.changeRotation(toRaw(item.rotation));
               }
             }

+ 10 - 3
src/sdk/association/measure.ts

@@ -37,9 +37,17 @@ export const getSceneMeasureDesc = (smMeasure: SceneMeasure, measure: Measure) =
 
 export const associationMessaure = <T extends MeasureType>(smMeasure: SceneMeasure<T>, measure: Measure<T>) => {
   smMeasure.bus.on('update', ([points, modelIds]) => {
-    us.unSet(() => measure.positions = points.map((point, i) => ({ point, modelId: modelIds[i] })))
+    // us.unSet(() => 
+      measure.positions = points.map((point, i) => ({ point, modelId: modelIds[i] }))
+  // )
+  })
+  let timeout: any
+  smMeasure.bus.on('highlight', selected => {
+    clearTimeout(timeout)
+    timeout = setTimeout(() => {
+      us.unSet(() => measure.selected = selected)
+    })
   })
-  smMeasure.bus.on('highlight', selected => us.unSet(() => measure.selected = selected))
 }
 
 export const associationMessaures = (sdk: SDK) => {
@@ -93,4 +101,3 @@ export const associationMessaures = (sdk: SDK) => {
     )
   })
 }
-

+ 6 - 5
src/store/sys.ts

@@ -5,6 +5,7 @@ import { useViewStack } from "@/hook";
 
 import type { UnwrapRef } from "vue";
 import { currentMeta } from "@/router";
+import { stackVar } from "@/components/drawing/hook";
 
 const Flags = {
   EDIT: 0b10,
@@ -99,11 +100,11 @@ export type AutoSetModeSetting<T> = {
   recovery?: () => void;
 };
 
-let isUnset = false;
+export let isUnset = stackVar(false);
 export const unSetModelUpdate = (run: () => void) => {
-  isUnset = true;
+  const pop = isUnset.push(true)
   run();
-  nextTick(() => (isUnset = false));
+  nextTick(pop);
 };
 export const autoSetModeCallback = <T extends object>(
   current: T,
@@ -136,7 +137,7 @@ export const autoSetModeCallback = <T extends object>(
   };
 
   const handler = (newv: UnwrapRef<T>, oldv?: UnwrapRef<T>) => {
-    if (isSave || isUnset || isLeaveIng) return;
+    if (isSave || isUnset.value || isLeaveIng) return;
     if (!setting.isUpdate || setting.isUpdate(newv, oldv)) {
       isEdit.value || enterEdit();
       isOld.value || enterOld();
@@ -158,4 +159,4 @@ export const useAutoSetMode = <T extends object>(
 ) => {
   const startWatch = autoSetModeCallback(current, setting, last);
   useViewStack(startWatch);
-};
+};

+ 7 - 4
src/utils/unset.ts

@@ -1,18 +1,21 @@
+import { isUnset as isStoreUnset } from "@/store";
 import { nextTick } from "vue";
 
 export const unsetFactory = () => {
   let isUnSet = false;
+  
   const unSet = (fn: () => void) => {
-    console.error("unset");
+    console.error('unset')
+    const pop = isStoreUnset.push(true)
     isUnSet = true;
     fn();
-    nextTick(() => (isUnSet = false));
+    nextTick(pop)
   };
 
   return {
     get isUnSet() {
-      return isUnSet
+      return isStoreUnset.value
     },
     unSet
   }
-};
+};

+ 4 - 2
vite.config.ts

@@ -7,8 +7,10 @@ import { resolve } from 'path'
 
 // const oss = `https://phx.4dkankan.com/`
 // const ip = `https://phx.4dkankan.com/`
-const oss = `https://survey.4dkankan.com/`
-const ip = `https://survey.4dkankan.com/`
+// const oss = `https://survey.4dkankan.com/`
+// const ip = `https://survey.4dkankan.com/`
+const oss = `http://192.168.0.125:1804/`
+const ip = `http://192.168.0.125:1804/`
 const proxy = {
   '/offlineData': {
     target: 'http://192.168.0.13:8080/',