scene.ts 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  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. fileNewName: string;
  66. modelSize: string;
  67. modelDateType: string;
  68. progress?: number;
  69. createTime: string;
  70. }
  71. export type Scene = QuoteScene | ModelScene;
  72. export enum SceneType {
  73. SWKK,
  74. SWKJ,
  75. SWSS,
  76. SWMX,
  77. SWSSMX,
  78. SWYDSS,
  79. SWYDMX,
  80. }
  81. // 模型场景状态
  82. export enum ModelSceneStatus {
  83. ERR = -1,
  84. RUN = 0,
  85. REV = 2,
  86. SUCCESS = 1,
  87. CANCEL = -2,
  88. }
  89. const downHash = async (res: string, name: string) => {
  90. if (res.includes("code")) {
  91. ElMessage.error(JSON.parse(res).message);
  92. } else {
  93. await saveAs(new Blob([res], { type: "text/plain" }), name + "-hash.txt");
  94. }
  95. };
  96. export const setModelScene = (scene: ModelScene) =>
  97. axios.post(updateModelScene, {
  98. modelId: scene.modelId,
  99. modelTitle: scene.modelTitle,
  100. });
  101. export const cancelUploadModelScene = (scene: ModelScene) =>
  102. axios.get(cancelUModel, { params: { modelId: scene.modelId } });
  103. export const delModelScene = (scene: ModelScene) =>
  104. axios.post(deleteModel, { modelId: scene.modelId });
  105. export const copyModelScene = (scene: ModelScene) =>
  106. axios.post(copyModel, { modelId: scene.modelId });
  107. export const downModelSceneHash = async (scene: ModelScene) => {
  108. const res = (await axios.get(downModelHash, {
  109. params: { modelId: scene.modelId, ingoreRes: true },
  110. responseType: "text",
  111. })) as string;
  112. await downHash(res, scene.modelTitle);
  113. };
  114. export const uploadModelScene = (
  115. file: File,
  116. progressCallback: (progress: number) => void
  117. ) =>
  118. axios<undefined>({
  119. method: "POST",
  120. url: uploadModel,
  121. data: { file },
  122. onUploadProgress(event: any) {
  123. const p = Math.round((event.loaded / event.total) * 100);
  124. console.log(p);
  125. if (p === 100) {
  126. progressCallback(0);
  127. } else {
  128. progressCallback(p || 0);
  129. }
  130. },
  131. });
  132. export const getModelSceneStatus = async (scene: ModelScene) => {
  133. const progress = (
  134. await axios.get<number>(getModelRunProgress, {
  135. params: { modelId: scene.modelId },
  136. })
  137. ).data;
  138. return {
  139. progress,
  140. status:
  141. progress >= 100
  142. ? ModelSceneStatus.SUCCESS
  143. : progress < 0
  144. ? ModelSceneStatus.ERR
  145. : ModelSceneStatus.RUN,
  146. };
  147. };
  148. // *-----公用
  149. type ScenePaggingParams = PaggingReq<
  150. Pick<BaseScene, "type"> & {
  151. modelTitle: string;
  152. sceneName: string;
  153. status?: number;
  154. caseId?: number;
  155. deptId: string;
  156. snCode: string;
  157. }
  158. >;
  159. export const getScenePagging = async (params: ScenePaggingParams) => {
  160. const data = (
  161. await axios.get(
  162. params.type === SceneType.SWMX ? getModelSceneList : getSceneList,
  163. {
  164. params,
  165. }
  166. )
  167. ).data as PaggingRes<Scene>;
  168. return data;
  169. };
  170. export const delQuoteScene = (scene: QuoteScene) =>
  171. axios.get(delScene, { params: { num: scene.num } });
  172. export const copyQuoteScene = (scene: QuoteScene) =>
  173. axios.post(copyScene, { num: scene.num });
  174. export const downQuoteSceneHash = async (scene: QuoteScene) => {
  175. const res = (await axios.get(downSceneHash, {
  176. params: { num: scene.num, ingoreRes: true },
  177. responseType: "text",
  178. })) as any;
  179. await downHash(res, scene.title);
  180. };
  181. export type QueryDownloadQuoteSceneParams = PaggingReq<{
  182. deptId: string;
  183. userName: string;
  184. nickName: string;
  185. createTime: string;
  186. sceneTitle: string;
  187. sceneNum: string;
  188. snCode: string;
  189. }>;
  190. export type DownloadQuoteSceneLog = {
  191. id: number;
  192. sceneNum: string;
  193. sceneTitle: string;
  194. userName: string;
  195. nickName: string;
  196. snCode: string;
  197. deptLevelStr: string;
  198. deptName: string;
  199. deptId: string;
  200. createTime: string;
  201. };
  202. export const getDownloadQuoteScene = async (
  203. params: Omit<QueryDownloadQuoteSceneParams, "createTime"> & {
  204. startCreateTime: string | null;
  205. endCreateTime: string | null;
  206. }
  207. ) =>
  208. (await axios.post(downloadSceneList, params))
  209. .data as PaggingRes<DownloadQuoteSceneLog>;
  210. export const genMeshScene = async (scene: QuoteScene) => {
  211. const res = (await axios.post(checkGenMeshScene, { id: scene.id })).data;
  212. if (res?.buildObjStatus === 2) {
  213. ElMessage.error("Mesh场景正在计算中,请耐心等待。");
  214. } else if (
  215. res?.buildObjStatus !== 1 ||
  216. (await confirm("重新生成obj,Mesh场景将覆盖现有信息,确定要重新生成吗?"))
  217. ) {
  218. await axios.post(genMeshSceneByCloud, { id: scene.id });
  219. ElMessage.success("生成obj将同时生成Mesh场景,需要较长时间,请耐心等待;");
  220. }
  221. };