scene.ts 4.8 KB

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