model.ts 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. import axios from './instance'
  2. import {
  3. MODEL_LIST,
  4. INSERT_MODEL,
  5. UPDATE_MODEL,
  6. DELETE_MODEL,
  7. UPLOAD_HEADS
  8. } from './constant'
  9. export enum ModelType {
  10. SWKK = 'swkk',
  11. SWKJ = 'swkj',
  12. SWMX = 'glb',
  13. SWSS = 'laser',
  14. OSGB = 'obsg',
  15. B3DM = 'b3dm'
  16. }
  17. export const ModelTypeDesc: Record<ModelType, string> = {
  18. [ModelType.SWKK]: '四维看看',
  19. [ModelType.SWKJ]: '四维看见',
  20. [ModelType.SWSS]: '四维深时',
  21. [ModelType.SWMX]: '三维模型',
  22. [ModelType.OSGB]: 'osgb模型',
  23. [ModelType.B3DM]: 'b3dm模型'
  24. }
  25. export interface ModelAttrs {
  26. show: boolean,
  27. scale: number,
  28. opacity: number,
  29. bottom: number,
  30. position: SceneLocalPos,
  31. rotation: SceneLocalPos
  32. }
  33. export interface Model extends ModelAttrs {
  34. id: string
  35. url: Array<string>
  36. title: string
  37. fusionId?: number,
  38. type: ModelType
  39. isSelf: boolean
  40. size: number,
  41. time: string
  42. }
  43. interface ServiceModel {
  44. createTime: string,
  45. id: number,
  46. hide: number,
  47. modelDateType: string
  48. modelUrl: string
  49. fusionId?: number,
  50. modelSize: number
  51. modelTitle: string
  52. opacity: number
  53. bottom: number
  54. type: number
  55. transform: {
  56. position: SceneLocalPos,
  57. rotation: SceneLocalPos,
  58. scale: [number, number, number]
  59. }
  60. }
  61. const serviceToLocal = (serviceModel: ServiceModel): Model => ({
  62. show: !serviceModel.hide,
  63. scale: serviceModel.transform.scale[0],
  64. opacity: serviceModel.opacity || 1,
  65. isSelf: serviceModel.type !== 3,
  66. bottom: serviceModel.bottom || 0,
  67. position: serviceModel.transform.position,
  68. rotation: serviceModel.transform.rotation,
  69. id: serviceModel.id.toString(),
  70. url: [serviceModel.modelUrl],
  71. title: serviceModel.modelTitle,
  72. fusionId: serviceModel.fusionId,
  73. type: serviceModel.modelDateType === 'osgb' ? ModelType.OSGB : serviceModel.modelDateType === 'b3dm' ? ModelType.B3DM : serviceModel.type === 2 ? ModelType.SWMX : ModelType.SWMX,
  74. size: serviceModel.modelSize,
  75. time: serviceModel.createTime
  76. })
  77. const localToService = (model: Model): ServiceModel => ({
  78. createTime: model.time,
  79. id: Number(model.id),
  80. hide: Number(!model.show),
  81. fusionId: model.fusionId,
  82. modelDateType: model.type,
  83. modelUrl: model.url[0],
  84. type: model.type === ModelType.SWSS ? 2 : 3,
  85. modelSize: model.size,
  86. modelTitle: model.title,
  87. opacity: model.opacity,
  88. bottom: model.bottom,
  89. transform: {
  90. position: model.position,
  91. rotation: model.rotation,
  92. scale: [model.scale, model.scale, model.scale]
  93. }
  94. })
  95. export type Models = Model[]
  96. export const fetchModels = async () => {
  97. const serviceModels = await axios.post<ServiceModel[]>(MODEL_LIST)
  98. return serviceModels.map(serviceToLocal)
  99. }
  100. export const postAddModel = async (file: File) => {
  101. const form = new FormData()
  102. form.append('file', file)
  103. const serviceModel = await axios<ServiceModel>({
  104. url: INSERT_MODEL,
  105. method: 'POST',
  106. headers: { ...UPLOAD_HEADS },
  107. data: form
  108. })
  109. return serviceToLocal(serviceModel)
  110. }
  111. export const postUpdateModels = (model: Model) => {
  112. console.log('update', model)
  113. return axios.post<undefined>(UPDATE_MODEL, localToService(model))
  114. }
  115. export const postDeleteModel = (id: Model['id']) => {
  116. console.log('delete')
  117. return axios.post<undefined>(DELETE_MODEL, {ids: [id]})
  118. }