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.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: Array title: string fusionId?: number, type: ModelType isSelf: boolean 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): Model => ({ show: !serviceModel.hide, scale: serviceModel.transform.scale[0], opacity: serviceModel.opacity || 1, isSelf: serviceModel.type !== 3, bottom: serviceModel.bottom || 0, position: serviceModel.transform.position, rotation: serviceModel.transform.rotation, id: serviceModel.id.toString(), url: [serviceModel.modelUrl], title: serviceModel.modelTitle, fusionId: serviceModel.fusionId, type: serviceModel.modelDateType === 'osgb' ? ModelType.OSGB : serviceModel.modelDateType === 'b3dm' ? ModelType.B3DM : 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[0], 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(MODEL_LIST) return serviceModels.map(serviceToLocal) } export const postAddModel = async (file: File) => { const form = new FormData() form.append('file', file) const serviceModel = await axios({ 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(UPDATE_MODEL, localToService(model)) } export const postDeleteModel = (id: Model['id']) => { console.log('delete') return axios.post(DELETE_MODEL, {ids: [id]}) }