enter.ts 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. import type { TabCover } from "./store";
  2. import type { Scene } from "../../example/platform/platform-resource";
  3. import type { StoreData } from "@/core/store/store";
  4. import { params } from "../env";
  5. import { genLoading } from "../loadding";
  6. import { tempStrFill } from "@/utils/shared";
  7. const SCENE_TYPE = {
  8. fuse: "fuse",
  9. mesh: "mesh",
  10. cloud: "cloud",
  11. } as const;
  12. const resourceURLS = {
  13. oss: import.meta.env.VITE_MESH_OSS,
  14. [SCENE_TYPE.mesh]: import.meta.env.VITE_MESH_API,
  15. [SCENE_TYPE.cloud]: import.meta.env.VITE_CLOUD_API,
  16. [SCENE_TYPE.fuse]: import.meta.env.VITE_FUSE_API,
  17. };
  18. const viewURLS = {
  19. [SCENE_TYPE.mesh]: import.meta.env.VITE_MESH_VIEW,
  20. [SCENE_TYPE.cloud]: import.meta.env.VITE_CLOUD_VIEW,
  21. [SCENE_TYPE.fuse]: import.meta.env.VITE_FUSE_VIEW,
  22. };
  23. const get = (url: string, params: Record<string, any>) => {
  24. const p = new URLSearchParams();
  25. for (const key in params) {
  26. p.append(key, params[key]);
  27. }
  28. const l = `${resourceURLS[SCENE_TYPE.fuse]}${url}?${p.toString()}`;
  29. return after(fetch(l, { method: "get", headers: { token } }));
  30. };
  31. const post = (url: string, data: Record<string, any>) => {
  32. const l = `${resourceURLS[SCENE_TYPE.fuse]}${url}`;
  33. return after(
  34. fetch(l, {
  35. headers: { token, "Content-Type": "application/json;charset=UTF-8" },
  36. method: "post",
  37. body: JSON.stringify(data),
  38. })
  39. );
  40. };
  41. const postFile = (url: string, data: Record<string, any>) => {
  42. const formData = new FormData();
  43. for (const key in data) {
  44. formData.append(key, data[key]);
  45. }
  46. const l = `${resourceURLS[SCENE_TYPE.fuse]}${url}`;
  47. return after(
  48. fetch(l, {
  49. headers: { token },
  50. method: "post",
  51. body: formData,
  52. })
  53. );
  54. };
  55. const login = () => {
  56. if (import.meta.env.VITE_LOGIN_VIEW) {
  57. setTimeout(() => {
  58. location.replace(
  59. tempStrFill(import.meta.env.VITE_LOGIN_VIEW, {
  60. redirect: escape(location.href),
  61. })
  62. );
  63. }, 3000);
  64. }
  65. };
  66. const after = async (fet: Promise<Response>) => {
  67. const res = await fet.then((res) => res.json());
  68. if (res.code === 4008) {
  69. login();
  70. throw res.message;
  71. } else if (res.code !== 0) {
  72. throw res.message;
  73. } else {
  74. return res.data;
  75. }
  76. };
  77. const token = params.token;
  78. const getSceneList = genLoading(async (keyword: string): Promise<Scene[]> => {
  79. const list = await post(`fusion/case/sceneListPost`, {
  80. caseId: params.caseId,
  81. isMesh: 1,
  82. sceneName: keyword,
  83. });
  84. return list.map((item: any) => ({
  85. type: SCENE_TYPE.mesh,
  86. m: item.num,
  87. title: item.name,
  88. id: item.id.toString(),
  89. }));
  90. });
  91. const getOverviewData = genLoading(async (id: string) => {
  92. if (!id) {
  93. return {
  94. store: {},
  95. viewport: null,
  96. };
  97. }
  98. const data = await get("fusion/caseOverview/info", { overviewId: id });
  99. return {
  100. store: JSON.parse(data.store),
  101. viewport: JSON.parse(data.viewport),
  102. };
  103. });
  104. const saveOverviewData = genLoading(
  105. async (
  106. id: string,
  107. data: {
  108. store: StoreData;
  109. viewport: number[] | null;
  110. }
  111. ) => {
  112. const item = await post(`fusion/caseOverview/addOrUpdate`, {
  113. ...params,
  114. id,
  115. store: JSON.stringify(data.store),
  116. viewport: JSON.stringify(data.viewport),
  117. });
  118. return item.id;
  119. }
  120. );
  121. const getTabulationId = async (id: string) => {
  122. const list = await get("fusion/caseTabulation/getByOverviewId", {
  123. overviewId: id,
  124. });
  125. return list[0]?.id;
  126. };
  127. const getTabulationData = genLoading(async (id: string) => {
  128. if (!id) {
  129. return {
  130. store: {},
  131. cover: null,
  132. isAutoGen: true,
  133. viewport: null,
  134. paperKey: "a4",
  135. };
  136. }
  137. const data = await get(`fusion/caseTabulation/info`, { tabulationId: id });
  138. return {
  139. store: JSON.parse(data.store),
  140. viewport: JSON.parse(data.viewport),
  141. cover: JSON.parse(data.cover),
  142. isAutoGen: Number(data.isAutoGen),
  143. paperKey: data.paperKey,
  144. };
  145. });
  146. const saveTabulationData = genLoading(
  147. async (
  148. id: string,
  149. data: {
  150. store: StoreData;
  151. viewport: number[] | null;
  152. isAutoGen: boolean;
  153. cover: TabCover | null;
  154. paperKey?: string;
  155. overviewId: string;
  156. }
  157. ) => {
  158. const item = await post("fusion/caseTabulation/addOrUpdate", {
  159. ...params,
  160. id,
  161. store: JSON.stringify(data.store),
  162. viewport: JSON.stringify(data.viewport),
  163. cover: JSON.stringify(data.cover),
  164. isAutoGen: Number(data.isAutoGen),
  165. paperKey: data.paperKey,
  166. overviewId: data.overviewId,
  167. });
  168. return item.id;
  169. }
  170. );
  171. const uploadResourse = genLoading(async (file: File) => {
  172. return postFile(`fusion/upload/file`, { file });
  173. });
  174. window.platform = {
  175. resourceURLS,
  176. viewURLS,
  177. getOverviewData,
  178. getSceneList,
  179. saveOverviewData,
  180. getTabulationData,
  181. saveTabulationData,
  182. uploadResourse,
  183. getTabulationId,
  184. };
  185. /* @vite-ignore */
  186. import(import.meta.env.VITE_ENTRY_EXAMPLE);