iotAR小程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

164 lines
4.1 KiB

import { get } from "./pages/map2d/util";
import dataHelper from "./data-helper";
const baseUrl = "https://iot-dev.123.1000my.com";
export const cdnUrl = "https://test-598d.1000my.com";
export const code = "project-k5chc3vt0vkodjbmhl8rua";
export const post = (url, data) =>
new Promise((resolve) => {
wx.request({
url: baseUrl + url,
method: "POST",
header: { projectCode: code },
data: { ...data },
success({ data, statusCode }) {
if (statusCode !== 200) return reject();
resolve(data);
},
});
});
let mapDataAndShop = null;
export const mall = {
isNew: true,
baseUrl,
cdnUrl,
code,
floors: [
[true, "L1"],
[true, "L2"],
],
};
const config = {
mapDataUrl: `${baseUrl}/api/guide/v1/web/getMallMapData/${code}/Aeditor`,
shopInfoUrl: `${baseUrl}/api/guide/v1/web/getMapInfo?projectCode=${code}`,
};
export const getMapData = async () => {
if (mapDataAndShop) return mapDataAndShop;
// try {
// const { mapUrl, shopUrl } = await get(
// `${cdnUrl}/test-projects/${code}/config.json?t=${new Date().getTime()}`
// );
// if (mapUrl) config.mapDataUrl = mapUrl;
// if (shopUrl) config.shopInfoUrl = shopUrl;
// } catch (error) {
// console.log("获取config失败");
// }
let [
{
data: { mapData },
},
{
data: { buildingList, shopList: serverShopInfo },
},
{ data: facs },
{ data: sdkMapList },
{
data: { projectConfig: sdkConfig },
},
{ data: pois },
...rest
] = await Promise.all([
get(config.mapDataUrl),
get(config.shopInfoUrl),
get(
`${baseUrl}/api/guide/v1/web/getProjectUsedIconList?projectCode=${code}`
),
post(`/api/ar/v1/applet/GetSdkConfigList`, { mallCode: code }),
post(`/api/ar/v1/applet/ProjectConfig`, { mallCode: code }),
post(`/api/ar/v1/applet/GetPoiList`, { mallCode: code }),
...mall.floors.map((_, i) =>
get(`${baseUrl}/api/guide/v1/web/getMallMapData/${code}/${i}`)
),
]);
const poiMap = pois.reduce((acc, nxt) => ({ ...acc, [nxt.code]: nxt }), {});
const sdkMap = sdkMapList.map(
({
poiid: poi_id,
floorid: floor_id,
isPark: is_park,
appid: app_id,
mapid: map_id,
caseid: case_id,
transMatrix: transform_matrix,
scale,
}) => ({
app_id,
map_id,
poi_id,
floor_id,
transform_matrix,
scale,
case_id,
is_park,
})
);
const map2dData = rest
.map((res) => (res.data && res.data.mapData ? res.data.mapData : null))
.map((mapData) => (mapData ? JSON.parse(mapData) : null));
mall.floors.forEach((floor, i) => {
floor[2] = map2dData[i];
});
serverShopInfo = serverShopInfo
.filter(({ buildingOrder }) => buildingOrder === 0)
.map((iot) => ({
...iot,
name: iot.shopName,
houseNum: iot.houseNumber,
nameEn: iot.shopNameEn,
logoPath: cdnUrl + iot.logoUrl,
shopFormat: iot.industryFatherName,
intro: true,
}))
.reduce((acc, nxt) => {
if (!acc[nxt.floorOrder]) acc[nxt.floorOrder] = [nxt];
else acc[nxt.floorOrder] = [...acc[nxt.floorOrder], nxt];
return acc;
}, [])
.map((shopList, floorOrder) => ({ floorOrder, shopList }));
mapData = JSON.parse(mapData)[0];
const facilityTypeMap = facs.reduce(
(acc, nxt) => ({
...acc,
[nxt.node]: nxt.customFacilityName || nxt.name,
}),
{}
);
const facilityCodeMap = facs.reduce(
(acc, nxt) => ({
...acc,
[nxt.abbreviation]: Number(nxt.objCode),
}),
{}
);
const floors = mall.floors;
let shopMap = {};
serverShopInfo.forEach(({ shopList }) => {
shopList.forEach((shop) => {
shop.floorName = floors[shop.floorOrder]
? floors[shop.floorOrder][1]
: "";
shopMap[shop.houseNum] = shop;
});
});
const dataHelperResponse = await dataHelper({
serverShopInfo,
mapData,
mall,
facilityTypeMap,
facilityCodeMap,
});
const pMap = {};
mapDataAndShop = {
...dataHelperResponse,
serverShopInfo,
mapData,
mall,
shopMap,
pMap,
poiMap,
config: { ...sdkConfig, map: sdkMap },
};
return mapDataAndShop;
};