scene.ts 5.6 KB

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