project.ts 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. import axios from './instance'
  2. import { jsonToForm } from '@/shared'
  3. import { SceneType } from './scene'
  4. import {
  5. GET_PROJECT_LIST,
  6. GET_PROJECT,
  7. UPLOAD_BIM,
  8. ADD_PROJECT,
  9. REPLACE_SCENES,
  10. FINE_PROJECT,
  11. DEL_PROJECT,
  12. UPDATE_PROJECT,
  13. DEL_BIM,
  14. DEL_SCENE,
  15. UPDATE_BIM_NAME
  16. } from './constant'
  17. import type { PageResult, PageRequest, Scenes, Scene } from './'
  18. import { ui18n } from '@/lang'
  19. export enum ProjectStatus {
  20. undone,
  21. done
  22. }
  23. export const ProjectStatusDesc = {
  24. [ProjectStatus.done]: ui18n.t('project.desc.done'),
  25. [ProjectStatus.undone]: ui18n.t('project.desc.undone')
  26. }
  27. export interface SimpleProject {
  28. projectId: number
  29. projectName: string
  30. projectMsg: string
  31. projectImg: string
  32. projectCreater: string
  33. bimId: string
  34. panos: string
  35. createTime: string
  36. updateTime: string
  37. projectStatus: ProjectStatus
  38. }
  39. export enum BimStatus {
  40. error = 'ERROR',
  41. done = 'DONE',
  42. upload = 'UPLOAD',
  43. transfrom = 'TRANSLATE',
  44. offline = 'OFFLINE'
  45. }
  46. export const BimStatusDesc = {
  47. [BimStatus.error]: ui18n.t('project.bimDesc.error'),
  48. [BimStatus.done]: ui18n.t('project.bimDesc.done'),
  49. [BimStatus.upload]: ui18n.t('project.bimDesc.upload'),
  50. [BimStatus.transfrom]: ui18n.t('project.bimDesc.transfrom'),
  51. [BimStatus.offline]: ui18n.t('project.bimDesc.offline')
  52. }
  53. export type Bim = {
  54. bimId: number
  55. bimLocalFilePath: string
  56. userName: string
  57. bimName: string
  58. bimOssFilePath: string
  59. bimServiceId: null
  60. bimStatus: BimStatus
  61. createTime: string
  62. }
  63. export type Project = SimpleProject & {
  64. sceneList: Scenes
  65. bimData?: Bim
  66. }
  67. export type SimpleProjects = SimpleProject[]
  68. export const fetchProjects = async (filter: PageRequest) => {
  69. return axios.post<PageResult<SimpleProject>>(GET_PROJECT_LIST, filter)
  70. }
  71. export const fetchProject = async (id: Project['projectId']) => {
  72. return axios.get<Project>(GET_PROJECT, {
  73. params: { projectId: id }
  74. })
  75. }
  76. export type InsertProjectData = PartialPart<
  77. Pick<Project, 'projectImg' | 'projectName' | 'projectMsg'>,
  78. 'projectImg'
  79. >
  80. export const insertProject = (data: InsertProjectData) =>
  81. axios.post<Project>(ADD_PROJECT, data)
  82. export type UpdateProjectData = InsertProjectData & Pick<Project, 'projectId'>
  83. export const updateProject = (data: UpdateProjectData) =>
  84. axios.post<Project>(UPDATE_PROJECT, data)
  85. export const finishProject = (id: Project['projectId']) =>
  86. axios.post<Project>(FINE_PROJECT, { projectId: id })
  87. export const deleteProject = (id: Project['projectId']) =>
  88. axios.post<Project>(DEL_PROJECT, { projectId: id })
  89. export type BimUploadData = {
  90. name: string
  91. file: File
  92. }
  93. export const uploadProjectBimScene = async (
  94. id: Project['projectId'],
  95. data: BimUploadData
  96. ) => {
  97. await axios({
  98. url: UPLOAD_BIM,
  99. method: 'POST',
  100. data: jsonToForm({
  101. projectId: id,
  102. file: data.file,
  103. projectName: data.name
  104. }),
  105. headers: {
  106. 'Content-Type': 'multipart/form-data'
  107. }
  108. })
  109. }
  110. export const deleteProjectBimScene = async (bimId: Bim['bimId']) =>
  111. axios.post(DEL_BIM, { bimId })
  112. export const updateProjectBimSceneName = async (
  113. data: Pick<Bim, 'bimId' | 'bimName'>
  114. ) => axios.post(UPDATE_BIM_NAME, data)
  115. export const deleteProjectScene = async (data: {
  116. projectId: Project['projectId']
  117. num: Scene['num']
  118. }) => axios.post(DEL_SCENE, data)
  119. export const relaceProjectScenes = async (data: {
  120. id: Project['projectId']
  121. sceneNumParam: {
  122. type: SceneType
  123. numList: Scene['num'][]
  124. }[]
  125. }) =>
  126. axios.post(REPLACE_SCENES, {
  127. projectId: data.id,
  128. sceneNumParam: data.sceneNumParam
  129. })