|
@@ -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] });
|
|
|
+};
|