成都SKPAR小程序
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.
 

183 lines
4.4 KiB

import { get } from "./pages/map2d/util";
import dataHelper from "./data-helper";
const baseUrl = "https://iot.1000my.com";
export const cdnUrl = "https://qianmu-iot.1000my.com";
export const code = "project-ey_fpaur6s6fkgvszywana";
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, "B3"],
[true, "B2"],
[true, "B1"],
[true, "1F"],
[true, "1MF"],
[true, "2F"],
[false, "景观层"],
],
};
const config = {
mapDataUrl: `${cdnUrl}/ar/${code}/Aeditor/Aeditor.json?t=${new Date().getTime()}`,
shopInfoUrl: `${cdnUrl}/ar/${code}/QueryShopListForMap/QueryShopListForMap.json?t=${new Date().getTime()}`,
};
export const getMapData = async () => {
if (mapDataAndShop) return mapDataAndShop;
try {
const { mapUrl, shopUrl } = await 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失败");
}
let [
mapData,
serverShopInfo,
{ data: facs },
{ data: sdkMapList },
{
data: { projectConfig: sdkConfig },
},
{ data: pois },
...rest
] = await Promise.all([
(async () => {
try {
const {
data: [{ mapData }],
} = await get(config.mapDataUrl);
return mapData;
} catch (error) {
console.error(error);
return {};
}
})(),
(async () => {
try {
const {
data: [serverShopInfo],
} = await get(config.shopInfoUrl);
return serverShopInfo;
} catch (error) {
console.error(error);
return {};
}
})(),
get(
`${baseUrl}/api/guidance/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/guidance/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 ? { 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.map(({ floorOrd: floorOrder, shopList }) => ({
floorOrder,
shopList: shopList.map((iot) => ({
...iot,
code: iot.shopCode,
houseNum: iot.houseNumber,
logoPath: cdnUrl + iot.logoUrl,
shopFormat: iot.industryFatherName,
intro: true,
formatColor: iot.color,
floorOrder,
})),
}));
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;
});
});
console.log(shopMap);
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;
};