scene.ts 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import axios from './instance'
  2. import {
  3. jsonToForm,
  4. uploadProgressFactory,
  5. UploadProgressCallback
  6. } from 'utils'
  7. import {
  8. QuoteSceneStatus,
  9. ModelSceneStatus,
  10. SceneType,
  11. UPLOAD_HEADS,
  12. UPDATE_MODEL_TITLE,
  13. SCENE_LIST,
  14. MODEL_SCENE_LIST,
  15. UPLOAD_MODEL,
  16. DELETE_MODEL,
  17. GET_MODEL_SCENE_STATUS
  18. } from 'constant'
  19. import type { PagingResult, PagingRequest } from '.'
  20. import type { QuoteSceneType, ModelSceneType } from 'constant'
  21. export interface BaseScene {
  22. id: string,
  23. title: string
  24. time: string
  25. }
  26. export interface QuoteScene extends BaseScene {
  27. type: QuoteSceneType,
  28. status: QuoteSceneStatus,
  29. snCode: string,
  30. num: string
  31. }
  32. export interface ModelScene extends BaseScene {
  33. status: ModelSceneStatus,
  34. type: ModelSceneType,
  35. rawType: string,
  36. progress?: number
  37. }
  38. export type Scene = QuoteScene | ModelScene
  39. export interface ServeModelScene {
  40. modelId: string
  41. modelTitle: string
  42. modelDateType: string
  43. modelSize: string
  44. modelObjUrl: string
  45. modelGlbUrl: string
  46. createStatus: ModelSceneStatus
  47. createTime: string
  48. }
  49. export type Scenes = Scene[]
  50. // 获取场景列表
  51. export type GetSceneByTypeParams = PagingRequest<{type: SceneType, sceneName?: string, status?: QuoteScene['status']}>
  52. export const getSceneByType = async (data: GetSceneByTypeParams): Promise<PagingResult<Scene[]> & { type: SceneType }> => {
  53. if (data.type === SceneType.SWMX) {
  54. const modelScenes = await axios.post<PagingResult<ServeModelScene[]>>(
  55. MODEL_SCENE_LIST,
  56. { modelTitle: data.sceneName, ...data }
  57. )
  58. return {
  59. ...modelScenes,
  60. list: modelScenes.list.map(scene => ({
  61. id: scene.modelId,
  62. title: scene.modelTitle,
  63. time: scene.createTime,
  64. status: scene.createStatus,
  65. type: SceneType.SWMX,
  66. rawType: scene.modelDateType,
  67. })),
  68. type: data.type
  69. }
  70. } else {
  71. const res = await axios.post<PagingResult<Scenes>>(SCENE_LIST, data)
  72. return { ...res, type: data.type }
  73. }
  74. }
  75. export const getModelSceneStatus = async (sceneId: Scene['id']) => {
  76. const progress = await axios.get<number>(GET_MODEL_SCENE_STATUS, { params: { modelId: sceneId } })
  77. return {
  78. id: sceneId,
  79. status: progress >= 100 ? ModelSceneStatus.SUCCESS : ModelSceneStatus.RUN
  80. }
  81. }
  82. // 上传模型文件
  83. export type UploadModelSceneProps = { file: File, progressCallback?: UploadProgressCallback }
  84. export const uploadModelScene = ({ file, progressCallback }: UploadModelSceneProps) =>
  85. axios<undefined>({
  86. method: 'POST',
  87. url: UPLOAD_MODEL,
  88. data: jsonToForm({ file }),
  89. headers: UPLOAD_HEADS,
  90. onUploadProgress: progressCallback && uploadProgressFactory(progressCallback)
  91. })
  92. // 删除模型文件
  93. export const deleteModelScene = (modelId: ServeModelScene['modelId']) =>
  94. axios.post<undefined>(DELETE_MODEL, { modelId })
  95. export const updateModelSceneTitle = (modelId: ServeModelScene['modelId'],modelTitle: ServeModelScene['modelTitle']) =>
  96. axios.post<undefined>(UPDATE_MODEL_TITLE, { modelId, modelTitle })