enter.ts 5.8 KB

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