tangning hace 5 meses
padre
commit
98dfd3be9a

+ 2 - 0
src/store/caseFile.ts

@@ -76,6 +76,7 @@ export type SaveCaseFileImageInfo = Pick<CaseFile, "caseId" | "filesTitle"> & {
   imgType: BoardType;
   imgType: BoardType;
   content: BoardData;
   content: BoardData;
   file: File;
   file: File;
+  ognFileUrl?: string;
 };
 };
 
 
 export const saveCaseFileImageInfo = async (props: SaveCaseFileImageInfo) =>
 export const saveCaseFileImageInfo = async (props: SaveCaseFileImageInfo) =>
@@ -229,5 +230,6 @@ export type BoardShapeData =
 
 
 export interface BoardData {
 export interface BoardData {
   id: number;
   id: number;
+  ognFilesUrl: string | null;
   shapes: BoardShapeData[];
   shapes: BoardShapeData[];
 }
 }

+ 4 - 1
src/view/case/draw/board/useBoard.ts

@@ -69,11 +69,12 @@ const getStore = async (caseId: number, fileId: number, type: BoardType) => {
   } else {
   } else {
     const fileInfo = await getCaseFileImageInfo(fileId);
     const fileInfo = await getCaseFileImageInfo(fileId);
     if (fileInfo) {
     if (fileInfo) {
-      console.log(fileInfo);
       data = {
       data = {
         ...fileInfo.content,
         ...fileInfo.content,
+        ognFilesUrl: fileInfo.ognFilesUrl,
         id: fileInfo.filesId,
         id: fileInfo.filesId,
       };
       };
+      console.log('fileInfo', fileInfo, data);
     } else {
     } else {
       router.replace({ name: RouteName.caseFile, params: { caseId } });
       router.replace({ name: RouteName.caseFile, params: { caseId } });
       throw "该图不存在!";
       throw "该图不存在!";
@@ -118,7 +119,9 @@ export const useBoard = (props: Ref<BoardProps | null>) => {
       props.value.fileId,
       props.value.fileId,
       props.value.type
       props.value.type
     );
     );
+    console.log('store', store);
     const boardRaw = (board.value = await boardFactory(store, props.value.dom));
     const boardRaw = (board.value = await boardFactory(store, props.value.dom));
+    console.log('boardRaw', boardRaw);
     state.value.exixtsBgImage = !!(store as any).floors[0].bgImage
     state.value.exixtsBgImage = !!(store as any).floors[0].bgImage
     onCleanup(() => {
     onCleanup(() => {
       boardRaw && boardRaw.destroy();
       boardRaw && boardRaw.destroy();

+ 12 - 5
src/view/case/draw/index.vue

@@ -65,6 +65,7 @@ const list = ref({
 });
 });
 const fmtId = ref(0);
 const fmtId = ref(0);
 const pmtId = ref(0);
 const pmtId = ref(0);
+const ognFilesUrl = ref('')
 const dom = ref<HTMLCanvasElement>();
 const dom = ref<HTMLCanvasElement>();
 const props = computed(() => {
 const props = computed(() => {
   const route = router.currentRoute.value;
   const route = router.currentRoute.value;
@@ -113,7 +114,10 @@ const trackImage = async () => {
     props.value!.type === BoardType.scene
     props.value!.type === BoardType.scene
       ? await selectFuseImage(props.value!)
       ? await selectFuseImage(props.value!)
       : await selectMapImage({});
       : await selectMapImage({});
-
+  console.log('户型图', data);
+  if (data?.ognFilesUrl) {
+    ognFilesUrl.value = data.ognFilesUrl;
+  }
   if (data?.blob) {
   if (data?.blob) {
     setBackImage(data.blob);
     setBackImage(data.blob);
     if ("taggings" in data) {
     if ("taggings" in data) {
@@ -128,22 +132,24 @@ const trackImage = async () => {
 };
 };
 
 
 const { board, state } = useBoard(props);
 const { board, state } = useBoard(props);
-
+console.log('board', board, state, props);
 // 获取通用数据
 // 获取通用数据
 const getStore = async () => {
 const getStore = async () => {
   const store = await board.value!.getStore();
   const store = await board.value!.getStore();
+  console.log('getStore', store, board.value, state.value);
   const titleShape = store.shapes.find(
   const titleShape = store.shapes.find(
     (shape: any) => shape.type === title
     (shape: any) => shape.type === title
   ) as TitleShapeData;
   ) as TitleShapeData;
-  return { store, titleShape };
+  return { store, titleShape, ognFilesUrl: store.ognFilesUrl };
 };
 };
 
 
 //裁剪
 //裁剪
 const handleCropping = async (data) => {
 const handleCropping = async (data) => {
   const appStore = await getStore();
   const appStore = await getStore();
-  console.log('titleShape', appStore, board.value, state.value);
+  const args = props.value!;
+  console.log('titleShape', appStore, board.value, args);
   const {width, height } = appStore.store.floors?.[0].bgImage;
   const {width, height } = appStore.store.floors?.[0].bgImage;
-  const blob = await fetch(state.value.selectShape.data.url).then(res => res.blob());
+  const blob = await fetch(appStore.store.ognFilesUrl || state.value.selectShape.data.url).then(res => res.blob());
   const cropBlob = await imageCropper({
   const cropBlob = await imageCropper({
       img: blob,
       img: blob,
       fixed: [width, height]
       fixed: [width, height]
@@ -168,6 +174,7 @@ const saveHandler = async () => {
     file: new File([blob], `${filesTitle}.jpg`),
     file: new File([blob], `${filesTitle}.jpg`),
     filesTitle: filesTitle,
     filesTitle: filesTitle,
     content: store && JSON.stringify(store),
     content: store && JSON.stringify(store),
+    ognFileUrl: ognFilesUrl.value || store.ognFilesUrl,
   };
   };
   args.inAdd || (body.filesId = props.value!.fileId);
   args.inAdd || (body.filesId = props.value!.fileId);
   const { data } = await uploadNewFile(body);
   const { data } = await uploadNewFile(body);

+ 5 - 3
src/view/case/draw/selectFuseImage.vue

@@ -61,7 +61,7 @@ import { imageCropper } from "@/view/system/quisk";
 
 
 export type FuseImage = { blob: Blob | null; taggings: CaseTagging[] };
 export type FuseImage = { blob: Blob | null; taggings: CaseTagging[] };
 const props = defineProps<{ caseId: number }>();
 const props = defineProps<{ caseId: number }>();
-
+const ognFilesUrl = ref<string | null>(null);
 const fuseUrl = computed(() => getQuery(props.caseId, true, true));
 const fuseUrl = computed(() => getQuery(props.caseId, true, true));
 
 
 const taggings = ref<CaseTagging[]>([]);
 const taggings = ref<CaseTagging[]>([]);
@@ -95,7 +95,9 @@ const refreshBlob = async () => {
   const width = Math.ceil(540 * scale);
   const width = Math.ceil(540 * scale);
   const height = Math.ceil(390 * scale);
   const height = Math.ceil(390 * scale);
   const fuseImage = await getFuseImage(iframeRef.value, width, height);
   const fuseImage = await getFuseImage(iframeRef.value, width, height);
-
+  if(fuseImage?.ognFilesUrl) {
+    ognFilesUrl.value = fuseImage?.ognFilesUrl;
+  }
   if (fuseImage?.blob) {
   if (fuseImage?.blob) {
     console.log('fuseImage', fuseImage?.blob);
     console.log('fuseImage', fuseImage?.blob);
     // const cropBlob = await imageCropper({
     // const cropBlob = await imageCropper({
@@ -118,7 +120,7 @@ const refreshBlob = async () => {
 
 
 defineExpose<QuiskExpose>({
 defineExpose<QuiskExpose>({
   submit() {
   submit() {
-    return { blob: imageBlob.value, taggings: selectTaggings.value };
+    return { blob: imageBlob.value, taggings: selectTaggings.value, ognFilesUrl: ognFilesUrl.value };
   },
   },
 });
 });
 
 

+ 10 - 7
src/view/case/help.ts

@@ -187,6 +187,7 @@ export const getFuseImage = async (
 ) => {
 ) => {
   const typeMap = await getIframeSceneType(iframe);
   const typeMap = await getIframeSceneType(iframe);
   let blob: Blob | null = null;
   let blob: Blob | null = null;
+  let newUrl: string | null = null;
 
 
   switch (typeMap?.type) {
   switch (typeMap?.type) {
     case FuseImageType.FUSE:
     case FuseImageType.FUSE:
@@ -199,19 +200,21 @@ export const getFuseImage = async (
       console.error("截图尺寸", width, height);
       console.error("截图尺寸", width, height);
       if(typeMap.sdk.store?.getValue('metadata')?.floorPlanUser) {
       if(typeMap.sdk.store?.getValue('metadata')?.floorPlanUser) {
         let num = typeMap.sdk.store?.getValue('metadata').num
         let num = typeMap.sdk.store?.getValue('metadata').num
+        newUrl = `/oss/scene_view_data/${num}/user/cad-style-3-${typeMap.sdk.Scene.floorId}.jpg`
        // /oss/scene_view_data/YZL-jm-3EOpLfZxim9/user/cad-style-3.jpg
        // /oss/scene_view_data/YZL-jm-3EOpLfZxim9/user/cad-style-3.jpg
-       let newBlob = await urlToBlob(`/oss/scene_view_data/${num}/user/cad-style-3.jpg`)
+       let newBlob = await urlToBlob(newUrl)
        blob = await imageCropper({
        blob = await imageCropper({
         img: newBlob,
         img: newBlob,
         fixed: [width, height]
         fixed: [width, height]
        })
        })
        console.error("截图尺寸2", blob);
        console.error("截图尺寸2", blob);
       } else {
       } else {
-        const result = await typeMap.sdk.Camera.screenshot(
-          [{ width: width, height: height, name: "2k", bgOpacity: 0 }],
-          false
-        );
-        blob = base64ToBlob(result[0].data);
+        alert("暂未获取到平面图,请前往三维场景制作");
+        // const result = await typeMap.sdk.Camera.screenshot(
+        //   [{ width: width, height: height, name: "2k", bgOpacity: 0 }],
+        //   false
+        // );
+        // blob = base64ToBlob(result[0].data);
       }
       }
      
      
       break;
       break;
@@ -225,7 +228,7 @@ export const getFuseImage = async (
       });
       });
       break;
       break;
   }
   }
-  return { type: typeMap?.type, blob };
+  return { type: typeMap?.type, blob, ognFilesUrl: newUrl };
 };
 };
 
 
 // 处理fuse融合一起的图,将热点加入图片内
 // 处理fuse融合一起的图,将热点加入图片内