fuse-model.ts 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. import axios from './instance'
  2. import {
  3. FUSE_MODEL_LIST,
  4. FUSE_INSERT_MODEL,
  5. FUSE_UPDATE_MODEL,
  6. FUSE_DELETE_MODEL,
  7. } from './constant'
  8. import { params } from '@/env'
  9. import { Scene, SceneStatus, SceneType } from './scene'
  10. export interface FuseModelAttrs {
  11. show: boolean,
  12. scale: number,
  13. opacity: number,
  14. bottom: number,
  15. position: SceneLocalPos,
  16. rotation: SceneLocalPos
  17. }
  18. export interface FuseModel extends FuseModelAttrs {
  19. id: string
  20. modelId: number
  21. fusionNumId: number,
  22. url: string
  23. title: string
  24. fusionId: number,
  25. modelType: string,
  26. type: SceneType
  27. size: number,
  28. status: SceneStatus,
  29. time: string
  30. }
  31. interface ServiceFuseModel {
  32. fusionId: number
  33. hide: number,
  34. opacity: number
  35. bottom: number
  36. fusionNumId: number,
  37. transform: {
  38. position: SceneLocalPos,
  39. rotation: SceneLocalPos,
  40. scale: [number, number, number]
  41. },
  42. sceneData: Scene
  43. }
  44. const serviceToLocal = (serviceModel: ServiceFuseModel, test = false): FuseModel => ({
  45. show: true,
  46. scale: serviceModel.transform.scale[0],
  47. opacity: serviceModel.opacity || 1,
  48. bottom: serviceModel.bottom || 0,
  49. fusionNumId: serviceModel.fusionNumId,
  50. modelType: serviceModel.sceneData?.modelDateType,
  51. position: serviceModel.transform.position,
  52. rotation: serviceModel.transform.rotation,
  53. id: serviceModel.fusionNumId.toString(),
  54. url: serviceModel.sceneData ? ([SceneType.SWSS, SceneType.SWYDSS].includes(serviceModel.sceneData.type) ? serviceModel.sceneData.num : serviceModel.sceneData.modelGlbUrl) : '',
  55. title: serviceModel.sceneData ? (serviceModel.sceneData?.name || serviceModel.sceneData.sceneName || serviceModel.sceneData.modelTitle) : '-',
  56. modelId: serviceModel.sceneData?.modelId,
  57. fusionId: serviceModel.fusionId,
  58. type: serviceModel.sceneData?.type,
  59. size: serviceModel.sceneData?.modelSize,
  60. time: serviceModel.sceneData?.createTime,
  61. status: serviceModel.sceneData ? serviceModel.sceneData.status : SceneStatus.ERR
  62. })
  63. const localToService = (model: FuseModel): Omit<ServiceFuseModel, 'sceneData'> => ({
  64. fusionId: model.fusionId,
  65. hide: Number(!model.show),
  66. opacity: model.opacity,
  67. fusionNumId: model.fusionNumId,
  68. bottom: model.bottom,
  69. transform: {
  70. position: model.position,
  71. rotation: model.rotation,
  72. scale: [model.scale, model.scale, model.scale]
  73. }
  74. })
  75. export type FuseModels = FuseModel[]
  76. export const fetchFuseModels = async () => {
  77. const serviceModels = await axios.get<ServiceFuseModel[]>(FUSE_MODEL_LIST, { params: { caseId: params.caseId } })
  78. console.error(serviceModels.map((item, index) => serviceToLocal(item, index == 0)))
  79. return serviceModels.map((item, index) => serviceToLocal(item, index == 0))
  80. }
  81. export const postAddFuseModel = async (model: FuseModel) => {
  82. const upload = localToService(model)
  83. const serviceModel = await axios<ServiceFuseModel>({
  84. url: FUSE_INSERT_MODEL,
  85. method: 'POST',
  86. data: {
  87. caseId: params.caseId,
  88. modelId: model.modelId,
  89. hide: upload.hide,
  90. transform: upload.transform,
  91. opacity: upload.opacity,
  92. bottom: upload.bottom
  93. }
  94. })
  95. return serviceToLocal(serviceModel)
  96. }
  97. export const postUpdateFuseModels = (model: FuseModel) => {
  98. const upload = localToService(model)
  99. return axios.post<undefined>(FUSE_UPDATE_MODEL, {
  100. fusionNumId: upload.fusionNumId,
  101. hide: upload.hide,
  102. transform: upload.transform,
  103. opacity: upload.opacity,
  104. bottom: upload.bottom
  105. })
  106. }
  107. export const postDeleteFuseModel = (model: FuseModel) => {
  108. return axios.post<undefined>(FUSE_DELETE_MODEL, { fusionNumId: model.fusionNumId })
  109. }