bill пре 3 година
родитељ
комит
efe62ffef0
6 измењених фајлова са 60 додато и 13 уклоњено
  1. 17 3
      src/api/mesasure.ts
  2. 8 5
      src/model/app.vue
  3. 12 5
      src/model/platform.ts
  4. 5 0
      src/router/config.ts
  5. 5 0
      src/router/constant.ts
  6. 13 0
      src/views/sign-model/index.vue

+ 17 - 3
src/api/mesasure.ts

@@ -8,6 +8,12 @@ export enum MeasureType {
   area = 'area'
 }
 
+enum ServiceMeasureType {
+  free = 0,
+  vertical = 1,
+  area = 2
+}
+
 export type MeasurePosition = {point: SceneLocalPos, modelId: FuseModel['id']}
 
 export interface Measure<T extends MeasureType = MeasureType> {
@@ -23,7 +29,7 @@ interface ServiceMeasure {
   fusionMeterId: number,
   fusionId: number,
   meterTitle: string,
-  meterType: MeasureType,
+  meterType: ServiceMeasureType,
   position: string,
   length: number,
 }
@@ -34,14 +40,22 @@ const toLocal = (serviceMeasure: ServiceMeasure) : Measure => ({
   title: serviceMeasure.meterTitle,
   desc: serviceMeasure.length.toString(),
   positions: JSON.parse(serviceMeasure.position),
-  type: serviceMeasure.meterType,
+  type: serviceMeasure.meterType === ServiceMeasureType.area 
+    ? MeasureType.area
+    : serviceMeasure.meterType === ServiceMeasureType.vertical
+    ? MeasureType.vertical
+    : MeasureType.free
 })
 
 const toService = (measure: Measure, isUpdate = true): PartialProps<ServiceMeasure, 'fusionMeterId'> => ({
   fusionMeterId: isUpdate ? Number(measure.id): undefined,
   fusionId: measure.fusionId,
   meterTitle: measure.title,
-  meterType: measure.type,
+  meterType: measure.type === MeasureType.area 
+    ? ServiceMeasureType.area
+    : measure.type === MeasureType.vertical
+    ? ServiceMeasureType.vertical
+    : ServiceMeasureType.free,
   position: JSON.stringify(measure.positions),
   length: Number(measure.desc),
 

+ 8 - 5
src/model/app.vue

@@ -8,7 +8,7 @@
 <script lang="ts">
 import { defineComponent, ref, watchEffect, computed, watch, onMounted, nextTick } from 'vue'
 import { SceneType } from '@/store'
-import { showModelsMapStack } from '@/env'
+import { params, showModelsMapStack } from '@/env'
 import { fuseModel, modelProps } from './index'
 import { modelSDKFactory } from './platform'
 
@@ -34,10 +34,13 @@ export const Model = defineComponent({
     const url = computed(() => {
       if (!scene.value) return;
       const type = scene.value.type
-      const kk = [SceneType.SWKK || SceneType.SWKJ]
-      const pathname = kk.includes(type) ? 'swkk/spg.html' : 'swss/index.html'
-
-      return `/${pathname}?m=${scene.value.num}`
+      const urls = {
+        [SceneType.SWKK]: `swkk/spg.html?m=${scene.value.num}`,
+        [SceneType.SWKJ]: `swkk/spg.html?m=${scene.value.num}`,
+        [SceneType.SWSS]: `swss/index.html?m=${scene.value.num}`,
+        [SceneType.SWMX]: `index.html?caseId=${params.caseId}&modelId=${scene.value.num}&token=${params.token}#sign-model`
+      }
+      return urls[type]
     })
     const fuseRef = ref<HTMLDivElement>()
     const iframeRef = ref<HTMLIFrameElement>()

+ 12 - 5
src/model/platform.ts

@@ -71,15 +71,18 @@ export interface ModelExpose {
 
 export async function exposeFactory(type: ModelType, win?: any): Promise<ModelExpose> {
   const sceneType = type === fuseModel ? fuseModel : type.type
-  const platforms: {[key in any]: {getSDK: () => Promise<void>, expose: ModelExpose}} = {
+  const platforms: {[key in any]: {getSDK: () => Promise<any>, expose: ModelExpose}} = {
     [fuseModel]: {
-      getSDK: () => fuseLoaded,
+      getSDK: async () => {
+        await fuseLoaded
+        return fuseSDK
+      },
       expose: {
         async getView() {
-          const dataURL = await fuseSDK.screenshot(260, 160)
+          const dataURL = await sdk.screenshot(260, 160)
           const res = await fetch(dataURL)
           const image = await res.blob()
-          const pose = fuseSDK.getPose()
+          const pose = sdk.getPose()
           return {
             image,
             flyData: JSON.stringify(pose)
@@ -87,7 +90,7 @@ export async function exposeFactory(type: ModelType, win?: any): Promise<ModelEx
         },
         async setView(flyData: string) {
           const pose = JSON.parse(flyData)
-          fuseSDK.comeTo({ dur: 300, ...pose })
+          sdk.comeTo({ dur: 300, ...pose })
         }
       }
     },
@@ -146,6 +149,10 @@ export async function exposeFactory(type: ModelType, win?: any): Promise<ModelEx
     }
   }
   platforms[SceneType.SWKJ] = platforms[SceneType.SWKK]
+  platforms[SceneType.SWMX] = {
+    getSDK: async () => findObjectAttr(win , '__sdk'),
+    expose: platforms[fuseModel].expose
+  }
 
   if (!(sceneType in platforms)) {
     throw new Error('不支持该类型场景!')

+ 5 - 0
src/router/config.ts

@@ -100,6 +100,11 @@ export const routes: RouteRecordRaw[] = [
       },
       
     ]
+  },
+  {
+    path: paths[RoutesName.signModel],
+    name: RoutesName.signModel,
+    component: () => import('@/views/sign-model/index.vue')
   }
 ]
 

+ 5 - 0
src/router/constant.ts

@@ -28,6 +28,10 @@ export enum RoutesName {
   recordShow = 'recordShow',
   viewShow = 'viewShow',
   folderShow = 'folderShow',
+
+
+  // 单模型展示
+  signModel = 'signModel'
 }
 
 
@@ -54,6 +58,7 @@ export const paths = {
   [RoutesName.viewShow]: 'view',
   [RoutesName.folderShow]: 'folder',
   
+  [RoutesName.signModel]: '/sign-model'
 }
 
 export const metas = {

+ 13 - 0
src/views/sign-model/index.vue

@@ -0,0 +1,13 @@
+<template>
+
+</template>
+
+<script setup lang="ts">
+import { loadModel, fuseModel } from '@/model'
+import { getScene, initialScenes } from '@/store'
+
+
+initialScenes()
+  .then(() => getScene)
+
+</script>