bill před 1 rokem
rodič
revize
a597b5fd53
3 změnil soubory, kde provedl 465 přidání a 154 odebrání
  1. 300 0
      public/test-case/model-list.json
  2. 59 61
      src/api/constant.ts
  3. 106 93
      src/api/fuse-model.ts

+ 300 - 0
public/test-case/model-list.json

@@ -541,6 +541,306 @@
                 "bind": true,
                 "location": null
             }
+        },
+        {
+            "caseId": null,
+            "fusionNumId": 1099,
+            "fusionId": 222,
+            "modelId": 1309,
+            "hide": 0,
+            "transform": {
+                "scale": [
+                    100.0,
+                    100.0,
+                    100.0
+                ],
+                "position": {
+                    "x": 0.0,
+                    "y": 0.0,
+                    "z": 0.0
+                },
+                "rotation": {
+                    "x": 0.0,
+                    "y": 0.0,
+                    "z": 0.0
+                }
+            },
+            "opacity": 100.0,
+            "bottom": 0.0,
+            "token": null,
+            "sceneData": {
+                "modelId": 1309,
+                "modelTitle": null,
+                "modelDateType": "b3dm",
+                "modelSize": null,
+                "type": 6,
+                "modelObjUrl": null,
+                "modelGlbUrl": "[\"https://4dkk.4dage.com/scene_view_data/SG-t-D0hJSjOGkfX/images/3dtiles/tileset.json\"]",
+                "userName": null,
+                "modelType": "b3dm",
+                "num": "SG-t-D0hJSjOGkfX",
+                "tbStatus": 0,
+                "createStatus": 1,
+                "createTime": "2024-07-23 17:40:50",
+                "updateTime": "2024-07-23 20:39:46",
+                "deptId": "DEP000011456505791239610368",
+                "deptName": "广州市消防救援支队",
+                "fileNewName": null,
+                "id": 3007940,
+                "buildObjStatus": 0,
+                "name": "非文保app拍摄的深光场景",
+                "payStatus": 1,
+                "sceneName": "非文保app拍摄的深光场景",
+                "snCode": "BPVT00019",
+                "status": 2,
+                "thumb": "https://4dkk.4dage.com/scene_view_data/SG-t-D0hJSjOGkfX/images/floor_0.png?t=1721727650730",
+                "title": "非文保app拍摄的深光场景",
+                "viewCount": 10,
+                "isLaser": false,
+                "phone": null,
+                "bind": true,
+                "location": null
+            }
+        },
+        {
+            "caseId": null,
+            "fusionNumId": 1100,
+            "fusionId": 223,
+            "modelId": 1196,
+            "hide": 0,
+            "transform": {
+                "scale": [
+                    100.0,
+                    100.0,
+                    100.0
+                ],
+                "position": {
+                    "x": 0.0,
+                    "y": 0.0,
+                    "z": 3.67381
+                },
+                "rotation": {
+                    "x": 0.0,
+                    "y": 0.0,
+                    "z": 0.0
+                }
+            },
+            "opacity": 100.0,
+            "bottom": 0.0,
+            "token": null,
+            "sceneData": {
+                "modelId": 1196,
+                "modelTitle": null,
+                "modelDateType": "b3dm",
+                "modelSize": "1.10MB",
+                "type": 1,
+                "modelObjUrl": null,
+                "modelGlbUrl": "[\"https://4dkk.4dage.com/fusion/xj/model/KJ-t-gYp3LoN2DtK/mesh/b3dm/tileset.json\"]",
+                "userName": null,
+                "modelType": "b3dm",
+                "num": "KJ-t-gYp3LoN2DtK",
+                "tbStatus": 0,
+                "createStatus": 1,
+                "createTime": "2024-07-04 15:05:07",
+                "updateTime": "2024-07-17 09:28:54",
+                "deptId": "DEP000011808851599099564032",
+                "deptName": "新疆某大队",
+                "fileNewName": null,
+                "id": 3007618,
+                "buildObjStatus": 0,
+                "name": "某住房宿舍火灾",
+                "payStatus": 1,
+                "sceneName": "某住房宿舍火灾",
+                "snCode": "HDMI00001",
+                "status": 2,
+                "thumb": "https://4dkk.4dage.com/scene_edit_data/KJ-t-gYp3LoN2DtK/user/thumb-1k.jpg",
+                "title": "某住房宿舍火灾",
+                "viewCount": 5,
+                "isLaser": false,
+                "phone": null,
+                "bind": true,
+                "location": null
+            }
+        },
+        {
+            "caseId": null,
+            "fusionNumId": 1101,
+            "fusionId": 224,
+            "modelId": 1315,
+            "hide": 0,
+            "transform": {
+                "scale": [
+                    100.0,
+                    100.0,
+                    100.0
+                ],
+                "position": {
+                    "x": 0.0,
+                    "y": 0.0,
+                    "z": 0.0
+                },
+                "rotation": {
+                    "x": 0.0,
+                    "y": 0.0,
+                    "z": 0.0
+                }
+            },
+            "opacity": 100.0,
+            "bottom": 0.0,
+            "token": null,
+            "sceneData": {
+                "modelId": 1315,
+                "modelTitle": null,
+                "modelDateType": "obj",
+                "modelSize": null,
+                "type": 5,
+                "modelObjUrl": null,
+                "modelGlbUrl": null,
+                "userName": null,
+                "modelType": "pointcloud",
+                "num": "SG-t-D0hJSjOGkfX",
+                "tbStatus": 0,
+                "createStatus": 1,
+                "createTime": "2024-07-23 17:40:50",
+                "updateTime": "2024-08-02 11:27:12",
+                "deptId": "DEP000011456505791239610368",
+                "deptName": "广州市消防救援支队",
+                "fileNewName": null,
+                "id": 4404,
+                "buildObjStatus": 1,
+                "name": "非文保app拍摄的深光场景",
+                "payStatus": 1,
+                "sceneName": null,
+                "snCode": "BPVT00019",
+                "status": 2,
+                "thumb": "https://laser-oss.4dkankan.com/static/img_default/pc.jpg",
+                "title": "非文保app拍摄的深光场景",
+                "viewCount": 12,
+                "isLaser": true,
+                "phone": "15915816041",
+                "bind": true,
+                "location": 4
+            }
+        },
+        {
+            "caseId": null,
+            "fusionNumId": 1102,
+            "fusionId": 225,
+            "modelId": 1252,
+            "hide": 0,
+            "transform": {
+                "scale": [
+                    100.0,
+                    100.0,
+                    100.0
+                ],
+                "position": {
+                    "x": 0.0,
+                    "y": 0.0,
+                    "z": 0.0
+                },
+                "rotation": {
+                    "x": 0.0,
+                    "y": 0.0,
+                    "z": 0.0
+                }
+            },
+            "opacity": 100.0,
+            "bottom": 0.0,
+            "token": null,
+            "sceneData": {
+                "modelId": 1252,
+                "modelTitle": null,
+                "modelDateType": "obj",
+                "modelSize": null,
+                "type": 2,
+                "modelObjUrl": null,
+                "modelGlbUrl": null,
+                "userName": null,
+                "modelType": "pointcloud",
+                "num": "SS-t-Rv7vsJ0R219",
+                "tbStatus": 0,
+                "createStatus": 1,
+                "createTime": "2024-03-27 14:52:33",
+                "updateTime": "2024-07-17 14:18:53",
+                "deptId": "DEP000011759420653032312832",
+                "deptName": "数据统计总队",
+                "fileNewName": null,
+                "id": 3796,
+                "buildObjStatus": 1,
+                "name": "场景1",
+                "payStatus": 1,
+                "sceneName": null,
+                "snCode": "A0IA7R137",
+                "status": 2,
+                "thumb": "https://laser-oss.4dkankan.com/static/img_default/pc.jpg",
+                "title": "场景1",
+                "viewCount": 56,
+                "isLaser": true,
+                "phone": "18819272201",
+                "bind": true,
+                "location": 4
+            }
+        },
+        {
+            "caseId": null,
+            "fusionNumId": 1103,
+            "fusionId": 222,
+            "modelId": 1128,
+            "hide": 0,
+            "transform": {
+                "scale": [
+                    100.0,
+                    100.0,
+                    100.0
+                ],
+                "position": {
+                    "x": 11.54761,
+                    "y": 27.06429,
+                    "z": 83.2928
+                },
+                "rotation": {
+                    "x": 1.5708,
+                    "y": 0.0,
+                    "z": 0.0
+                }
+            },
+            "opacity": 100.0,
+            "bottom": 0.0,
+            "token": null,
+            "sceneData": {
+                "modelId": 1128,
+                "modelTitle": null,
+                "modelDateType": "obj",
+                "modelSize": "15.04MB",
+                "type": 4,
+                "modelObjUrl": "/home/tomcat/jar-fusion-8808/xj/model/SS-t-KcsO9dK5leV/mesh.obj",
+                "modelGlbUrl": "[\"https://4dkk.4dage.com/fusion/xj/model/SS-t-KcsO9dK5leV/mesh/floor_0/lod_0/mesh.glb\"]",
+                "userName": null,
+                "modelType": "glb",
+                "num": "SS-t-KcsO9dK5leV",
+                "tbStatus": 0,
+                "createStatus": 1,
+                "createTime": "2024-07-05 17:27:17",
+                "updateTime": "2024-07-11 15:32:17",
+                "deptId": "DEP000011808851599099564032",
+                "deptName": "新疆某大队",
+                "fileNewName": null,
+                "id": 3007659,
+                "buildObjStatus": 0,
+                "name": "某能源厂房火灾",
+                "payStatus": 1,
+                "sceneName": "某能源厂房火灾",
+                "snCode": "HDSS00001",
+                "status": 2,
+                "thumb": "https://4dkk.4dage.com/scene_view_data/SS-t-KcsO9dK5leV/images/floor_0.png?t=1720171637632",
+                "title": "某能源厂房火灾",
+                "viewCount": 10,
+                "isLaser": false,
+                "phone": null,
+                "bind": true,
+                "location": null
+            }
         }
     ],
     "success": true,

+ 59 - 61
src/api/constant.ts

@@ -1,99 +1,97 @@
 export enum ResCode {
   TOKEN_INVALID = 4008,
-  SUCCESS = 0
+  SUCCESS = 0,
 }
 
 export const ResCodeDesc: { [key in ResCode]: string } = {
-  [ResCode.TOKEN_INVALID]: 'token已失效',
-  [ResCode.SUCCESS]: '请求成功'
-}
+  [ResCode.TOKEN_INVALID]: "token已失效",
+  [ResCode.SUCCESS]: "请求成功",
+};
 
 export const UPLOAD_HEADS = {
-  'Content-Type': 'multipart/form-data'
-}
+  "Content-Type": "multipart/form-data",
+};
 
-export const CASE_INFO = `/fusion-xj/case/getInfo`
+export const CASE_INFO = `/fusion-xj/case/getInfo`;
 // 校验密码
-export const AUTH_PWD = `/fusion-xj/web/fireProject/getDetailWithoutAuth`
+export const AUTH_PWD = `/fusion-xj/web/fireProject/getDetailWithoutAuth`;
 
 // 融合模型列表
-export const FUSE_MODEL_LIST = `/test-case/model-list.json`
-export const FUSE_INSERT_MODEL = `/fusion-xj/caseFusion/add`
-export const FUSE_UPDATE_MODEL = `/fusion-xj/caseFusion/update`
-export const FUSE_DELETE_MODEL = `/fusion-xj/caseFusion/delete`
+export const FUSE_MODEL_LIST = `/test-case/model-list.json`;
+export const FUSE_INSERT_MODEL = `/fusion-xj/caseFusion/add`;
+export const FUSE_UPDATE_MODEL = `/fusion-xj/caseFusion/update`;
+export const FUSE_DELETE_MODEL = `/fusion-xj/caseFusion/delete`;
 // 场景列表
-export const SCENE_LIST_ALL = `/fusion-xj/api/scene/list`
-export const MODEL_LIST = `/test-case/scene-list.json`
-export const MODEL_SIGN = `/fusion-xj/model/getInfo`
+export const SCENE_LIST_ALL = `/fusion-xj/api/scene/list`;
+export const MODEL_LIST = `/test-case/scene-list.json`;
+export const MODEL_SIGN = `/fusion-xj/model/getInfo`;
 
 // 标注列表
-export const TAGGING_LIST = `/fusion-xj/caseTag/allList`
-export const INSERT_TAGGING = `/fusion-xj/caseTag/add`
-export const UPDATE_TAGGING = `/fusion-xj/caseTag/update`
-export const DELETE_TAGGING = `/fusion-xj/caseTag/delete`
+export const TAGGING_LIST = `/fusion-xj/caseTag/allList`;
+export const INSERT_TAGGING = `/fusion-xj/caseTag/add`;
+export const UPDATE_TAGGING = `/fusion-xj/caseTag/update`;
+export const DELETE_TAGGING = `/fusion-xj/caseTag/delete`;
 
 // 标注放置列表
-export const TAGGING_POINT_LIST = `/fusion-xj/caseTagPoint/allList`
-export const INSERT_TAGGING_POINT = `/fusion-xj/caseTagPoint/place`
-export const UPDATE_TAGGING_POINT = `/fusion-xj/caseTagPoint/update`
-export const DELETE_TAGGING_POINT = `/fusion-xj/caseTagPoint/delete`
+export const TAGGING_POINT_LIST = `/fusion-xj/caseTagPoint/allList`;
+export const INSERT_TAGGING_POINT = `/fusion-xj/caseTagPoint/place`;
+export const UPDATE_TAGGING_POINT = `/fusion-xj/caseTagPoint/update`;
+export const DELETE_TAGGING_POINT = `/fusion-xj/caseTagPoint/delete`;
 
 // 标注样式类型列表
-export const TAGGING_STYLE_LIST = '/fusion-xj/edit/hotIcon/list'
-export const INSERT_TAGGING_STYLE = '/fusion-xj/edit/hotIcon/add'
-export const DELETE_TAGGING_STYLE = '/fusion-xj/edit/hotIcon/delete'
+export const TAGGING_STYLE_LIST = "/fusion-xj/edit/hotIcon/list";
+export const INSERT_TAGGING_STYLE = "/fusion-xj/edit/hotIcon/add";
+export const DELETE_TAGGING_STYLE = "/fusion-xj/edit/hotIcon/delete";
 
 // 测量线
-export const MESASURE_LIST = `/fusion-xj/fusionMeter/allList`
-export const INSERT_MESASURE = `/fusion-xj/fusionMeter/add`
-export const UPDATE_MESASURE = `/fusion-xj/fusionMeter/updateMeter`
-export const DELETE_MESASURE = `/fusion-xj/fusionMeter/delete`
+export const MESASURE_LIST = `/fusion-xj/fusionMeter/allList`;
+export const INSERT_MESASURE = `/fusion-xj/fusionMeter/add`;
+export const UPDATE_MESASURE = `/fusion-xj/fusionMeter/updateMeter`;
+export const DELETE_MESASURE = `/fusion-xj/fusionMeter/delete`;
 
 // 导览
-export const GUIDE_LIST = `/fusion-xj/fusionGuide/allList`
-export const INSERT_GUIDE = `/fusion-xj/fusionGuide/add`
-export const UPDATE_GUIDE = `/fusion-xj/fusionGuide/update`
-export const DELETE_GUIDE = `/fusion-xj/fusionGuide/delete`
+export const GUIDE_LIST = `/fusion-xj/fusionGuide/allList`;
+export const INSERT_GUIDE = `/fusion-xj/fusionGuide/add`;
+export const UPDATE_GUIDE = `/fusion-xj/fusionGuide/update`;
+export const DELETE_GUIDE = `/fusion-xj/fusionGuide/delete`;
 
 // 导览路线
-export const GUIDE_PATH_LIST = `/fusion-xj/fusionGuidePath/allList`
-export const INSERT_GUIDE_PATH = `/fusion-xj/fusionGuidePath/add`
-export const UPDATE_GUIDE_PATH = `/fusion-xj/fusionGuidePath/update`
-export const DELETE_GUIDE_PATH = `/fusion-xj/fusionGuidePath/delete`
+export const GUIDE_PATH_LIST = `/fusion-xj/fusionGuidePath/allList`;
+export const INSERT_GUIDE_PATH = `/fusion-xj/fusionGuidePath/add`;
+export const UPDATE_GUIDE_PATH = `/fusion-xj/fusionGuidePath/update`;
+export const DELETE_GUIDE_PATH = `/fusion-xj/fusionGuidePath/delete`;
 
 // 屏幕录制
-export const RECORD_LIST = `/fusion-xj/caseVideoFolder/allList`
-export const RECORD_STATUS = `/fusion-xj/caseVideo/uploadAddVideoProgress`
-export const INSERT_RECORD = `/fusion-xj/caseVideo/uploadAddVideo`
-export const MERGE_RECORD = `/fusion-xj/caseVideo/uploadAddVideo`
-export const UPDATE_RECORD = `/fusion-xj/caseVideoFolder/updateNameOrSort`
-export const DELETE_RECORD = `/fusion-xj/caseVideoFolder/delete`
+export const RECORD_LIST = `/fusion-xj/caseVideoFolder/allList`;
+export const RECORD_STATUS = `/fusion-xj/caseVideo/uploadAddVideoProgress`;
+export const INSERT_RECORD = `/fusion-xj/caseVideo/uploadAddVideo`;
+export const MERGE_RECORD = `/fusion-xj/caseVideo/uploadAddVideo`;
+export const UPDATE_RECORD = `/fusion-xj/caseVideoFolder/updateNameOrSort`;
+export const DELETE_RECORD = `/fusion-xj/caseVideoFolder/delete`;
 
 // 录制片段
-export const RECORD_FRAGMENT_LIST = `/fusion-xj/caseVideo/allList`
-export const DELETE_RECORD_FRAGMENT = `/fusion-xj/caseVideo/delete`
+export const RECORD_FRAGMENT_LIST = `/fusion-xj/caseVideo/allList`;
+export const DELETE_RECORD_FRAGMENT = `/fusion-xj/caseVideo/delete`;
 
 // 视图提取
-export const VIEW_LIST = `/fusion-xj/caseView/allList`
-export const INSERT_VIEW = `/fusion-xj/caseView/add`
-export const UPDATE_VIEW = `/fusion-xj/caseView/updateNameOrSort`
-export const DELETE_VIEW = `/fusion-xj/caseView/delete`
-
-export const GET_SETTING = `/test-case/setting.json`
-export const UPDATE_SETTING = `/fusion-xj/caseSettings/saveOrUpdate`
-
+export const VIEW_LIST = `/fusion-xj/caseView/allList`;
+export const INSERT_VIEW = `/fusion-xj/caseView/add`;
+export const UPDATE_VIEW = `/fusion-xj/caseView/updateNameOrSort`;
+export const DELETE_VIEW = `/fusion-xj/caseView/delete`;
 
-export const GET_SETTING_RESOURCES = `/fusion-xj/settingsResource/info`
-export const UPDATE_SETTING_RESOURCE = `/fusion-xj/settingsResource/saveOrUpdate`
-export const DEL_SETTING_RESOURCE = `/fusion-xj/settingsResource/delete`
-export const ADD_SETTING_RESOURCE = `/fusion-xj/settingsResource/saveOrUpdate`
+export const GET_SETTING = `/test-case/setting.json`;
+export const UPDATE_SETTING = `/fusion-xj/caseSettings/saveOrUpdate`;
 
+export const GET_SETTING_RESOURCES = `/fusion-xj/settingsResource/info`;
+export const UPDATE_SETTING_RESOURCE = `/fusion-xj/settingsResource/saveOrUpdate`;
+export const DEL_SETTING_RESOURCE = `/fusion-xj/settingsResource/delete`;
+export const ADD_SETTING_RESOURCE = `/fusion-xj/settingsResource/saveOrUpdate`;
 
 // 卷宗类型
-export const FOLDER_TYPE_LIST = `/fusion-xj/caseFilesType/allList`
+export const FOLDER_TYPE_LIST = `/fusion-xj/caseFilesType/allList`;
 
 // 卷宗
-export const FLODER_LIST = `/fusion-xj/caseFiles/allList`
+export const FLODER_LIST = `/fusion-xj/caseFiles/allList`;
 
 // 文件上传
-export const UPLOAD_FILE = `/fusion-xj/upload/file`
+export const UPLOAD_FILE = `/fusion-xj/upload/file`;

+ 106 - 93
src/api/fuse-model.ts

@@ -1,149 +1,162 @@
-import axios from './instance'
-import { 
+import axios from "./instance";
+import {
   FUSE_MODEL_LIST,
   FUSE_INSERT_MODEL,
   FUSE_UPDATE_MODEL,
   FUSE_DELETE_MODEL,
-} from './constant'
-import { params } from '@/env'
-
-import { Scene, SceneStatus, SceneType } from './scene'
+} from "./constant";
+import { params } from "@/env";
 
+import { Scene, SceneStatus, SceneType } from "./scene";
 
 export interface FuseModelAttrs {
-  show: boolean,
-  scale: number,
-  opacity: number,
-  bottom: number,
-  position: SceneLocalPos,
-  rotation: SceneLocalPos
+  show: boolean;
+  scale: number;
+  opacity: number;
+  bottom: number;
+  position: SceneLocalPos;
+  rotation: SceneLocalPos;
 }
 
 export interface FuseModel extends FuseModelAttrs {
-  id: string
-  modelId: number
-  fusionNumId: number,
-  url: string
-  title: string
-  fusionId: number,
-  modelType: string,
-  type: SceneType
-  size: number,
-  status: SceneStatus,
-  time: string
-  raw?: any
+  id: string;
+  modelId: number;
+  fusionNumId: number;
+  url: string;
+  title: string;
+  fusionId: number;
+  modelType: string;
+  type: SceneType;
+  size: number;
+  status: SceneStatus;
+  time: string;
+  raw?: any;
 }
 
 interface ServiceFuseModel {
-  fusionId: number
-  hide: number,
-  opacity: number
-  bottom: number
-  fusionNumId: number,
+  fusionId: number;
+  hide: number;
+  opacity: number;
+  bottom: number;
+  fusionNumId: number;
   transform: {
-    position: SceneLocalPos, 
-    rotation: SceneLocalPos, 
-    scale: [number, number, number]
-  },
-  sceneData: Scene
+    position: SceneLocalPos;
+    rotation: SceneLocalPos;
+    scale: [number, number, number];
+  };
+  sceneData: Scene;
 }
 
-const serviceToLocal = (serviceModel: ServiceFuseModel, test = false): FuseModel => {
-  let url = ""
-  console.log(serviceModel.sceneData, serviceModel.sceneData.type)
-  if ([SceneType.SWSS, SceneType.SWYDSS].includes(serviceModel.sceneData.type)) {
-    url = serviceModel.sceneData.num
+const serviceToLocal = (
+  serviceModel: ServiceFuseModel,
+  test = false
+): FuseModel => {
+  let url = "";
+  console.log(serviceModel.sceneData, serviceModel.sceneData.type);
+  if (
+    [SceneType.SWSS, SceneType.SWYDSS].includes(serviceModel.sceneData.type)
+  ) {
+    url = serviceModel.sceneData.num;
   } else {
-    switch(serviceModel.sceneData.modelDateType) {
-      case '3dgs':
-        url = serviceModel.sceneData.model3dgsUrl
+    switch (serviceModel.sceneData.modelDateType) {
+      case "3dgs":
+        url = serviceModel.sceneData.model3dgsUrl;
         break;
-      case 'shp':
-        url = serviceModel.sceneData.modelShpUrl
+      case "shp":
+        url = serviceModel.sceneData.modelShpUrl;
         break;
       default:
-        url = serviceModel.sceneData.modelGlbUrl
+        url = serviceModel.sceneData.modelGlbUrl;
     }
     try {
-      url = JSON.parse(url)[0]
+      url = JSON.parse(url)[0];
     } catch (e) {
-      console.error(url, e)
+      console.error(url, e);
     }
   }
 
   return {
-  show: true,
-  scale: serviceModel.transform.scale[0],
-  opacity: serviceModel.opacity || 1,
-  bottom: serviceModel.bottom || 0,
-  fusionNumId: serviceModel.fusionNumId,
-  modelType: serviceModel.sceneData?.modelDateType,
-  position: serviceModel.transform.position,
-  rotation: serviceModel.transform.rotation,
-  id: serviceModel.fusionNumId.toString(),
-  url,
-  title: serviceModel.sceneData ? (serviceModel.sceneData?.name || serviceModel.sceneData.sceneName || serviceModel.sceneData.modelTitle) : '-',
-  modelId: serviceModel.sceneData?.modelId,
-  fusionId: serviceModel.fusionId,
-  type: serviceModel.sceneData?.type,
-  size: serviceModel.sceneData?.modelSize,
-  raw: serviceModel.sceneData,
-  time: serviceModel.sceneData?.createTime,
-  status: serviceModel.sceneData ? serviceModel.sceneData.status : SceneStatus.ERR
-}
-}
+    show: true,
+    scale: serviceModel.transform.scale[0],
+    opacity: serviceModel.opacity || 1,
+    bottom: serviceModel.bottom || 0,
+    fusionNumId: serviceModel.fusionNumId,
+    modelType: serviceModel.sceneData?.modelDateType,
+    position: serviceModel.transform.position,
+    rotation: serviceModel.transform.rotation,
+    id: serviceModel.fusionNumId.toString(),
+    url,
+    title: serviceModel.sceneData
+      ? serviceModel.sceneData?.name ||
+        serviceModel.sceneData.sceneName ||
+        serviceModel.sceneData.modelTitle
+      : "-",
+    modelId: serviceModel.sceneData?.modelId,
+    fusionId: serviceModel.fusionId,
+    type: serviceModel.sceneData?.type,
+    size: serviceModel.sceneData?.modelSize,
+    raw: serviceModel.sceneData,
+    time: serviceModel.sceneData?.createTime,
+    status: serviceModel.sceneData
+      ? serviceModel.sceneData.status
+      : SceneStatus.ERR,
+  };
+};
 
-const localToService = (model: FuseModel): Omit<ServiceFuseModel, 'sceneData'> => ({
+const localToService = (
+  model: FuseModel
+): Omit<ServiceFuseModel, "sceneData"> => ({
   fusionId: model.fusionId,
   hide: Number(!model.show),
   opacity: model.opacity,
   fusionNumId: model.fusionNumId,
   bottom: model.bottom,
   transform: {
-    position: model.position, 
-    rotation: model.rotation, 
-    scale: [model.scale, model.scale, model.scale]
-  }
-})
+    position: model.position,
+    rotation: model.rotation,
+    scale: [model.scale, model.scale, model.scale],
+  },
+});
 
-export type FuseModels = FuseModel[]
+export type FuseModels = FuseModel[];
 
 export const fetchFuseModels = async () => {
-  const serviceModels = await axios.get<ServiceFuseModel[]>(FUSE_MODEL_LIST, { params: { caseId: params.caseId } })
-  // const serviceModels = await axios.get<ServiceFuseModel[]>('/test-case/model-list.json', { params: { caseId: params.caseId } })
-  console.error(serviceModels.map((item, index) => serviceToLocal(item, index == 0)))
-  return serviceModels.map((item, index) => serviceToLocal(item, index == 0))
-} 
+  const serviceModels = await axios.get<ServiceFuseModel[]>(FUSE_MODEL_LIST, {
+    params: { caseId: params.caseId },
+  });
+  return serviceModels.map((item, index) => serviceToLocal(item, index == 0));
+};
 
 export const postAddFuseModel = async (model: FuseModel) => {
-  const upload = localToService(model)
+  const upload = localToService(model);
   const serviceModel = await axios<ServiceFuseModel>({
     url: FUSE_INSERT_MODEL,
-    method: 'POST',
+    method: "POST",
     data: {
       caseId: params.caseId,
       modelId: model.modelId,
       hide: upload.hide,
       transform: upload.transform,
       opacity: upload.opacity,
-      bottom: upload.bottom
-    }
-  })
-  return serviceToLocal(serviceModel)
-}
+      bottom: upload.bottom,
+    },
+  });
+  return serviceToLocal(serviceModel);
+};
 
 export const postUpdateFuseModels = (model: FuseModel) => {
-  const upload = localToService(model)
+  const upload = localToService(model);
   return axios.post<undefined>(FUSE_UPDATE_MODEL, {
     fusionNumId: upload.fusionNumId,
     hide: upload.hide,
     transform: upload.transform,
     opacity: upload.opacity,
-    bottom: upload.bottom
-  })
-}
+    bottom: upload.bottom,
+  });
+};
 
 export const postDeleteFuseModel = (model: FuseModel) => {
-  return axios.post<undefined>(FUSE_DELETE_MODEL, { fusionNumId: model.fusionNumId })
-}
-
+  return axios.post<undefined>(FUSE_DELETE_MODEL, {
+    fusionNumId: model.fusionNumId,
+  });
+};