scene.ts 2.5 KB

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