model.ts 2.9 KB

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