bill 2 years ago
parent
commit
c3e77385e8
2 changed files with 138 additions and 2 deletions
  1. 3 2
      src/api/fuse-model.ts
  2. 135 0
      src/api/model.ts

+ 3 - 2
src/api/fuse-model.ts

@@ -47,7 +47,7 @@ interface ServiceFuseModel {
   sceneData: Scene
 }
 
-const serviceToLocal = (serviceModel: ServiceFuseModel): FuseModel => ({
+const serviceToLocal = (serviceModel: ServiceFuseModel, test = false): FuseModel => ({
   show: true,
   scale: serviceModel.transform.scale[0],
   opacity: serviceModel.opacity || 1,
@@ -84,7 +84,8 @@ export type FuseModels = FuseModel[]
 
 export const fetchFuseModels = async () => {
   const serviceModels = await axios.get<ServiceFuseModel[]>(FUSE_MODEL_LIST, { params: { caseId: params.caseId } })
-  return serviceModels.map(serviceToLocal)
+  console.error(serviceModels.map((item, index) => serviceToLocal(item, index == 0)))
+  return serviceModels.map((item, index) => serviceToLocal(item, index == 0))
 } 
 
 export const postAddFuseModel = async (model: FuseModel) => {

+ 135 - 0
src/api/model.ts

@@ -0,0 +1,135 @@
+import axios from "./instance";
+import {
+  MODEL_LIST,
+  INSERT_MODEL,
+  UPDATE_MODEL,
+  DELETE_MODEL,
+  UPLOAD_HEADS,
+} from "./constant";
+
+export enum ModelType {
+  SWKK = "swkk",
+  SWKJ = "swkj",
+  SWMX = "glb",
+  SWSS = "laser",
+  OSGB = "obsg",
+  B3DM = "b3dm",
+}
+
+export const ModelTypeDesc: Record<ModelType, string> = {
+  [ModelType.SWKK]: "四维看看",
+  [ModelType.SWKJ]: "四维看见",
+  [ModelType.SWSS]: "四维深时",
+  [ModelType.SWMX]: "三维模型",
+  [ModelType.OSGB]: "osgb模型",
+  [ModelType.B3DM]: "b3dm模型",
+};
+
+export interface ModelAttrs {
+  show: boolean;
+  scale: number;
+  opacity: number;
+  bottom: number;
+  position: SceneLocalPos;
+  rotation: SceneLocalPos;
+}
+export interface Model extends ModelAttrs {
+  id: string;
+  url: string;
+  title: string;
+  fusionId?: number;
+  type: ModelType;
+  size: number;
+  time: string;
+}
+
+interface ServiceModel {
+  createTime: string;
+  id: number;
+  hide: number;
+  modelDateType: string;
+  modelUrl: string;
+  fusionId?: number;
+  modelSize: number;
+  modelTitle: string;
+  opacity: number;
+  bottom: number;
+  type: number;
+  transform: {
+    position: SceneLocalPos;
+    rotation: SceneLocalPos;
+    scale: [number, number, number];
+  };
+}
+
+const serviceToLocal = (serviceModel: ServiceModel, test = false): Model => ({
+  show: !serviceModel.hide,
+  scale: serviceModel.transform.scale[0],
+  opacity: serviceModel.opacity || 1,
+  bottom: serviceModel.bottom || 0,
+  position: serviceModel.transform.position,
+  rotation: serviceModel.transform.rotation,
+  id: serviceModel.id.toString(),
+  url: test ? "https://testgis.4dage.com/LVB2/tileset.json" : serviceModel.modelUrl,
+  title: serviceModel.modelTitle,
+  fusionId: serviceModel.fusionId,
+  type:
+    serviceModel.modelDateType === "o3dm"
+      ? ModelType.B3DM
+      : serviceModel.modelDateType === "osgb"
+      ? ModelType.OSGB
+      : serviceModel.type === 2
+      ? ModelType.SWMX
+      : ModelType.SWMX,
+  size: serviceModel.modelSize,
+  time: serviceModel.createTime,
+});
+
+const localToService = (model: Model): ServiceModel => ({
+  createTime: model.time,
+  id: Number(model.id),
+  hide: Number(!model.show),
+  fusionId: model.fusionId,
+  modelDateType: model.type,
+  modelUrl: model.url,
+  type: model.type === ModelType.SWSS ? 2 : 3,
+  modelSize: model.size,
+  modelTitle: model.title,
+  opacity: model.opacity,
+  bottom: model.bottom,
+  transform: {
+    position: model.position,
+    rotation: model.rotation,
+    scale: [model.scale, model.scale, model.scale],
+  },
+});
+
+export type Models = Model[];
+
+export const fetchModels = async () => {
+  const serviceModels = await axios.post<ServiceModel[]>(MODEL_LIST);
+  return serviceModels.map((item, index) => serviceToLocal(item, index == 0));
+};
+
+export const postAddModel = async (file: File) => {
+  const form = new FormData();
+  form.append("file", file);
+
+  const serviceModel = await axios<ServiceModel>({
+    url: INSERT_MODEL,
+    method: "POST",
+    headers: { ...UPLOAD_HEADS },
+    data: form,
+  });
+  return serviceToLocal(serviceModel);
+};
+
+export const postUpdateModels = (model: Model) => {
+  console.log("update", model);
+  return axios.post<undefined>(UPDATE_MODEL, localToService(model));
+};
+
+export const postDeleteModel = (id: Model["id"]) => {
+  console.log("delete");
+  return axios.post<undefined>(DELETE_MODEL, { ids: [id] });
+};