import { axios } from "./libs"; let cities = []; const cityIndexMap = { 广州市: "G", 南京市: "N" }; const init = async () => { const [malls] = await Promise.all([axios.get("/Api/Coupon/MallList")]); cities = Object.values( malls.reduce((acc, nxt) => { const mall = { name: nxt.name, code: nxt.mallCode, }; if (acc[nxt.areaName]) { acc[nxt.areaName].malls.push(mall); } else acc[nxt.areaName] = { name: nxt.areaName, malls: [mall], index: cityIndexMap[nxt.areaName], }; return acc; }, {}) ); cities.sort((a, b) => a.index.charCodeAt(0) - b.index.charCodeAt(0)); }; export const getCities = async () => { if (!cities.length) { await init(); return cities; } else return cities; }; const toRadians = (lonlat) => (lonlat / 180) * Math.PI; const ToDigits = (radian) => (radian / Math.PI) * 180; const R = 6371; const r = 50; const offset = Math.asin(r / 2 / R) * 2; const getRestrict = (lon, lat) => { const lonR = toRadians(lon); const latR = toRadians(lat); return [lonR - offset, lonR + offset, latR - offset, latR + offset].map( ToDigits ); }; const getMall = ([minLon, maxLon, minLat, maxLat]) => new Promise((resolve) => {}); export const getNearMall = async ({ longitude, latitude }) => { const restrict = getRestrict(longitude, latitude); return (await getCities())[0]; };