import axios from "axios"; import icons from "./image-helper"; let mallInfos = new Map(); const href = window.location.href; let baseUrl = href.includes("localhost") || href.includes("-dev") || href.includes("-test") ? "https://project-iot.test.1000my.com" : "https://iot.1000my.com"; const getMallInfo = async (code) => { const { groundFloorOrder, scale, offsetToNorth } = { groundFloorOrder: 0, scale: 0.15, offsetToNorth: 0, }; const mall = { baseUrl, code, groundFloorIndex: groundFloorOrder, needSpotLight: false, scale, isNew: true, cloud: "1000my", offsetToNorth, }; let cdnUrl; try { const { data: { data: uploadUrl }, } = await axios.get(`${baseUrl}/api/info/v1/web/getUploadUrl`); cdnUrl = uploadUrl; } catch (error) { console.error(error); } const config = { mapDataUrl: `${cdnUrl}/ar/${code}/Aeditor/Aeditor.json?t=${new Date().getTime()}`, shopInfoUrl: `${cdnUrl}/ar/${code}/QueryShopListForMap/QueryShopListForMap.json?t=${new Date().getTime()}`, }; try { const { data: { mapUrl, shopUrl }, } = await axios.get( `${cdnUrl}/ar/${code}/config.json?t=${new Date().getTime()}` ); if (mapUrl) config.mapDataUrl = mapUrl; if (shopUrl) config.shopInfoUrl = shopUrl; } catch (error) { console.log("获取config失败"); } const [mapDataJSON, serverShopInfo, facs, theme, { cityName, projectName }] = await Promise.all([ (async () => { try { const { data: { data }, } = await axios.get(config.mapDataUrl); return data[0].mapData; } catch (error) { console.error(error); return {}; } })(), (async () => { try { const { data: { data }, } = await axios.get(config.shopInfoUrl); return data[0]; } catch (error) { console.error(error); return {}; } })(), (async () => { try { const { data: { data: facs }, } = await axios.get( `${baseUrl}/api/data/v1/web/getProjectUsedIconList?projectCode=${code}` ); return facs; } catch (error) { console.error(error); return []; } })(), (async () => { try { const { data: { data: theme }, } = await axios.get( `${baseUrl}/api/guide/v1/web/getProjectBindingTheme?projectCode=${code}` ); return theme; } catch (error) { console.error(error); return {}; } })(), (async () => { try { const { data: { data }, } = await axios.get( `${baseUrl}/api/data/v1/web/getMallData?projectCode=${code}` ); return data; } catch (error) { console.error(error); return {}; } })(), ]); mall.name = projectName .replace("导视", "") .replace("信发", "") .replace("项目", "") .replace("/", ""); document.title = mall.name; mall.city = cityName; const mapData = JSON.parse(mapDataJSON)[0]; mall.floors = serverShopInfo.map(({ floor, floorOrd }) => ({ name: floor, floorOrder: floorOrd, url: true, })); mall.facilityTypeMap = facs.reduce( (acc, nxt) => ({ ...acc, [nxt.node]: nxt.customFacilityName || nxt.name, }), {} ); const shopInfo = serverShopInfo.map(({ floorOrd: floorOrder, shopList }) => ({ floorOrder, shopList: shopList.map((iot) => ({ ...iot, code: iot.shopCode, houseNum: iot.houseNumber, logoPath: cdnUrl + iot.logoUrl, shopFormat: iot.industryFatherName, shopFormatName: iot.industryFatherName, intro: true, formatColor: iot.color, floorOrder, })), })); shopInfo.forEach(({ shopList }) => shopList.forEach((shop) => { shop.initialsCn = shop.name .split(" ") .filter((t) => t) .map((str) => str[0]) .join(""); shop.initialsEn = shop.nameEn .split(" ") .filter((t) => t) .map((str) => str[0]) .join(""); }) ); const images = facs.reduce( (acc, nxt) => ({ ...acc, [nxt.abbreviation]: nxt.filePath }), {} ); Object.assign(images, icons); mall.addtionalFacilityCodeMap = facs.reduce( (acc, nxt) => ({ ...acc, [nxt.abbreviation]: Number(nxt.node) }), {} ); mall.lots = []; mapData.buildArr.forEach(({ mapData: { parkArea } }) => { parkArea.forEach(({ parkNum }) => mall.lots.push(parkNum)); }); const r = document.querySelector(":root"); Object.entries(theme).forEach(([cat, obj]) => { Object.entries(obj).forEach(([k, v]) => { if (cat === "image") theme[cat][k] = cdnUrl + v; else r.style.setProperty(`--${cat}-${k}`, v); }); }); console.log(mapData, shopInfo, theme); Object.assign(mall, { floorData: mall.floors, shopInfo, mapData, floors: mall.floors.reduce((acc, { name, floorOrder, url }) => { acc[floorOrder] = [url, name]; return acc; }, []), theme, }); const mallInfo = { mall, shopInfo, images }; mallInfos.set(mall.code, mallInfo); return mallInfo; }; export { getMallInfo };