scene.ts 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. import { confirm } from "@/helper/message";
  2. import {
  3. PaggingReq,
  4. PaggingRes,
  5. axios,
  6. cancelUModel,
  7. checkGenMeshScene,
  8. delScene,
  9. deleteModel,
  10. genMeshSceneByCloud,
  11. getModelRunProgress,
  12. getModelSceneList,
  13. getSceneList,
  14. updateModelScene,
  15. uploadModel,
  16. } from "@/request";
  17. import { ElMessage } from "element-plus";
  18. interface BaseScene {
  19. title: string;
  20. time: string;
  21. type: SceneType;
  22. id: string;
  23. }
  24. // 只有当location 为4 时,才能生成obj
  25. export enum LocationEnum {
  26. Scene_Location_Slam, //slam\n" +
  27. Scene_Location_SFM, //sfm\n" +
  28. Scene_Location_SFMAI, //SFM + AI\n" +
  29. Scene_Location_MutiFloor, //多楼层\n" +
  30. Scene_Location_PointCloud, //点云\n" +
  31. Scene_Location_SLAMPoint, //slam实时拍\n" +
  32. Scene_Location_SLAMPointAndSFMAI, //slam实时拍+站点\n" +
  33. }
  34. export type QuoteScene = BaseScene & {
  35. hasSynchronized: boolean;
  36. sceneNum: string;
  37. sceneName: string;
  38. createTime: string;
  39. vrLink: string;
  40. num: string;
  41. snCode: string;
  42. location: LocationEnum;
  43. viewCount: number;
  44. status: QuoteSceneStatus;
  45. };
  46. // 普通场景状态
  47. export enum QuoteSceneStatus {
  48. DEL = -1,
  49. RUN = 0,
  50. ERR = 1,
  51. SUCCESS = 2,
  52. ARCHIVE = 3,
  53. RERUN = 4,
  54. }
  55. export interface ModelScene extends BaseScene {
  56. modelTitle: string;
  57. modelId: number;
  58. createStatus: ModelSceneStatus;
  59. modelSize: string;
  60. modelDateType: string;
  61. progress?: number;
  62. createTime: string;
  63. }
  64. export type Scene = QuoteScene | ModelScene;
  65. export enum SceneType {
  66. SWKK,
  67. SWKJ,
  68. SWSS,
  69. SWMX,
  70. SWSSMX,
  71. SWYDSS,
  72. SWYDMX,
  73. }
  74. // 模型场景状态
  75. export enum ModelSceneStatus {
  76. ERR = -1,
  77. RUN = 0,
  78. SUCCESS = 1,
  79. CANCEL = -2,
  80. }
  81. export const setModelScene = (scene: ModelScene) =>
  82. axios.post(updateModelScene, {
  83. modelId: scene.modelId,
  84. modelTitle: scene.modelTitle,
  85. });
  86. export const cancelUploadModelScene = (scene: ModelScene) =>
  87. axios.get(cancelUModel, { params: { modelId: scene.modelId } });
  88. export const delModelScene = (scene: ModelScene) =>
  89. axios.post(deleteModel, { modelId: scene.modelId });
  90. export const uploadModelScene = (
  91. file: File,
  92. progressCallback: (progress: number) => void
  93. ) =>
  94. axios<undefined>({
  95. method: "POST",
  96. url: uploadModel,
  97. data: { file },
  98. onUploadProgress(event: any) {
  99. progressCallback(Math.round((event.loaded / event.total) * 100) || 0);
  100. },
  101. });
  102. export const getModelSceneStatus = async (scene: ModelScene) => {
  103. const progress = (
  104. await axios.get<number>(getModelRunProgress, {
  105. params: { modelId: scene.modelId },
  106. })
  107. ).data;
  108. return {
  109. progress,
  110. status:
  111. progress >= 100
  112. ? ModelSceneStatus.SUCCESS
  113. : progress < 0
  114. ? ModelSceneStatus.ERR
  115. : ModelSceneStatus.RUN,
  116. };
  117. };
  118. // *-----公用
  119. type ScenePaggingParams = PaggingReq<
  120. Pick<BaseScene, "type"> & {
  121. modelTitle: string;
  122. sceneName: string;
  123. status?: number;
  124. caseId?: number;
  125. deptId: string;
  126. snCode: string;
  127. }
  128. >;
  129. export const getScenePagging = async (params: ScenePaggingParams) => {
  130. return (
  131. await axios.get(
  132. params.type === SceneType.SWMX ? getModelSceneList : getSceneList,
  133. {
  134. params,
  135. }
  136. )
  137. ).data as PaggingRes<Scene>;
  138. };
  139. export const delQuoteScene = (scene: QuoteScene) =>
  140. axios.get(delScene, { params: { num: scene.num } });
  141. export const genMeshScene = async (scene: QuoteScene) => {
  142. const res = (await axios.post(checkGenMeshScene, { id: scene.id })).data;
  143. if (res?.buildObjStatus === 2) {
  144. ElMessage.error("Mesh场景正在计算中,请耐心等待。");
  145. } else if (
  146. res?.buildObjStatus !== 1 ||
  147. (await confirm("重新生成obj,Mesh场景将覆盖现有信息,确定要重新生成吗?"))
  148. ) {
  149. await axios.post(genMeshSceneByCloud, { id: scene.id });
  150. ElMessage.success("生成obj将同时生成Mesh场景,需要较长时间,请耐心等待;");
  151. }
  152. };