| 1 |
- import{d as e,C as a,c as t,U as n,aj as l,b as r,w as o,g as i,e as s,i as u,f as d,h as c,j as p,t as v,m}from"./index-2EqFvhN_.js";import{_ as w}from"./_plugin-vue_export-helper.BCo6x5W8.js";let f=null;const g=w(e({__name:"map",setup(e){const w=a(0),g=a(0),h=a("配送地址"),b=a([]),y=a(!1),_=a(!0),E=a("");let M=null;const A=t(()=>(y.value?b.value:[{point:[g.value,w.value],label:h.value}]).map((e,a)=>({id:a+1,latitude:e.point[1],longitude:e.point[0],title:e.label,callout:{content:y.value?0===a?"起点":`第${a}站`:e.label,display:"ALWAYS",padding:8,borderRadius:4}}))),j=t(()=>y.value?"配送路线":"位置"),C=t(()=>y.value?b.value.length-1+" 个配送站点":h.value);function N(e,a){const t=Number(e),n=Number(a);return!Number.isFinite(n)||!Number.isFinite(t)||Math.abs(n)>90||Math.abs(t)>180?null:[t,n]}async function P(){var e;const a=await function(){if("undefined"==typeof window)return Promise.reject(new Error("当前端不支持高德 Web 地图"));const e=window;if(e.AMap)return Promise.resolve(e.AMap);if(f)return f;const a=String("b36108977a301e7868f6ee57f00260a8").trim(),t=String("a8483da6ee5786de70d0a407a9e8ee0b").trim();return a?(t&&(e._AMapSecurityConfig={securityJsCode:t}),f=new Promise((t,n)=>{const l=document.createElement("script");l.async=!0,l.src=`https://webapi.amap.com/maps?v=2.0&key=${encodeURIComponent(a)}`;const r=window.setTimeout(()=>{l.remove(),n(new Error("高德地图加载超时,请检查网络或 Key 配置"))},15e3);l.onload=()=>{window.clearTimeout(r),e.AMap?t(e.AMap):n(new Error("高德地图初始化失败"))},l.onerror=()=>{window.clearTimeout(r),l.remove(),n(new Error("高德地图加载失败,请检查域名白名单"))},document.head.appendChild(l)}).catch(e=>{throw f=null,e}),f):Promise.reject(new Error("未配置高德地图 Key"))}();M=new a.Map("water-amap-container",{zoom:y.value?12:16,center:[g.value,w.value],resizeEnable:!0,viewMode:"2D"});for(const t of A.value)new a.Marker({position:[t.longitude,t.latitude],title:t.title,map:M});y.value&&await async function(e,a){await new Promise(a=>e.plugin(["AMap.Driving"],a));for(let t=0;t<a.length-1;t+=17){const n=a.slice(t,t+18);await new Promise((a,t)=>{new e.Driving({map:M,policy:0,hideMarkers:!0}).search(n[0],n[n.length-1],{waypoints:n.slice(1,-1)},(e,n)=>{var l;"complete"===e&&(null==(l=n.routes)?void 0:l.length)?a():t(new Error(n.info||"高德未能规划该配送路线"))})})}}(a,b.value.map(e=>e.point)),null==(e=M.setFitView)||e.call(M)}return n(async e=>{try{const t=Number(null==e?void 0:e.route_id);if(Number.isSafeInteger(t)&&t>0)await async function(e){const a=(await i(s("driver")+"/routes")).find(a=>a.id===e);if(!a)throw new Error("未找到该配送路线");const t=a.stops.map((e,a)=>{const t=N(e.longitude,e.latitude);return t?{point:t,label:e.address||`第${a+1}站`}:null}).filter(e=>null!==e),n=a.stops[0],l=n?N(n.origin_longitude,n.origin_latitude):null;if(t.length<1)throw new Error("该路线暂无可用站点坐标");if(b.value=l?[{point:l,label:"配送起点"},...t]:t,b.value.length<2)throw new Error("该路线缺少起点或多个站点,暂无法规划道路路线");y.value=!0,h.value=a.region||a.code||"配送路线",g.value=b.value[0].point[0],w.value=b.value[0].point[1]}(t);else{const t=N(null==e?void 0:e.longitude,null==e?void 0:e.latitude);if(!t)throw new Error("地图坐标无效,请返回后重试");g.value=t[0],w.value=t[1],h.value=("string"==typeof(a=null==e?void 0:e.address)?decodeURIComponent(a):"")||"配送地址"}await P()}catch(t){E.value=t instanceof Error?t.message:"地图加载失败"}finally{_.value=!1}var a}),l(()=>{var e;return null==(e=null==M?void 0:M.destroy)?void 0:e.call(M)}),(e,a)=>{const t=u;return d(),r(t,{class:"map-page"},{default:o(()=>[c(t,{id:"water-amap-container",class:"amap-container"}),_.value?(d(),r(t,{key:0,class:"map-state"},{default:o(()=>[p("地图加载中…")]),_:1})):E.value?(d(),r(t,{key:1,class:"map-state error-state"},{default:o(()=>[p(v(E.value),1)]),_:1})):m("",!0),c(t,{class:"map-card"},{default:o(()=>[c(t,{class:"map-title"},{default:o(()=>[p(v(j.value),1)]),_:1}),c(t,{class:"map-address"},{default:o(()=>[p(v(C.value),1)]),_:1}),c(t,{class:"map-coordinates"},{default:o(()=>[p(v(w.value.toFixed(6))+", "+v(g.value.toFixed(6)),1)]),_:1})]),_:1})]),_:1})}}}),[["__scopeId","data-v-23a9f432"]]);export{g as default};
|