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.

2 lines
18 KiB

import{h as e,S as t,r as a,i as l,g as s,s as n,a as u,b as c,c as o,A as i,d as r,e as d,f as v,w as f,o as _,j as m,k as p,l as h,m as y,n as g,p as w,q as k,t as b,u as S,v as C,x,y as I,z as $,B as P,F as j,C as F,D as T,E as L,G as z,I as A,H as U,J as q,M,K as R,L as V,N as B}from"./index-BGcsYrai.js";import{s as D}from"./search.BJnl3YRK.js";import{d as N}from"./down.BCKq9i8s.js";import{f as E}from"./activity.k1jR9V-B.js";import{h as G,f as H}from"./geo.BHVFNtB7.js";import{g as J}from"./markerPin.DdplcbG_.js";import{_ as K}from"./_plugin-vue_export-helper.BCo6x5W8.js";const O="szkp_force_loc_prompt",Q="szkp_wechat_oauth_denied",W="szkp_h5_oauth_state_ss";let X=null;function Y(){return X||(X=async function(){var r,d;if(!l())return!0;const v=new URL(window.location.href),f=v.searchParams.get("code"),_=v.searchParams.get("state");if(v.searchParams.get("err")){try{window.sessionStorage.setItem(Q,"1")}catch{}return v.searchParams.delete("code"),v.searchParams.delete("state"),v.searchParams.delete("err"),window.history.replaceState({},"",v.pathname+v.search+v.hash),!0}if(f){let l="";try{l=window.sessionStorage.getItem(W)||""}catch{}l||(l=s(t.oauthState)||"");if(Boolean(_&&l&&String(_)!==String(l))){n({title:"授权状态异常,请关闭页面后重试",icon:"none"});try{window.sessionStorage.removeItem(W)}catch{}a(t.oauthState)}else{u({title:"授权登录中…",mask:!0});try{const a=await e.post("/h5/wechat/oauth",{code:f},{withAuth:!1});if(null==a?void 0:a.token){c(t.accessToken,a.token);try{window.sessionStorage.setItem(O,"1")}catch{}}}catch(h){const e=(null==h?void 0:h.message)||(null==(d=null==(r=null==h?void 0:h.errors)?void 0:r.code)?void 0:d[0])||"微信登录失败";n({title:e,icon:"none"})}finally{o()}}try{window.sessionStorage.removeItem(W)}catch{}return a(t.oauthState),v.searchParams.delete("code"),v.searchParams.delete("state"),window.history.replaceState({},"",v.pathname+v.search+v.hash),!0}if(s(t.accessToken))return!0;try{if("1"===window.sessionStorage.getItem(Q))return!0}catch{}const m=encodeURIComponent(function(){if("undefined"==typeof window)return"";const e=new URL(window.location.href);return e.hash="",e.search="",e.toString()}()),p=`${Date.now()}-${Math.random().toString(36).slice(2,10)}`;try{window.sessionStorage.setItem(W,p)}catch{}return c(t.oauthState,p),window.location.href=`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${i.wechatAppId}&redirect_uri=${m}&response_type=code&scope=snsapi_userinfo&state=${p}#wechat_redirect`,!1}().finally(()=>{X=null})),X}const Z=K(r({__name:"index",setup(s){const u=d(!1),c=d(null),o=d({latitude:31.2989,longitude:120.5853}),i=d("map"),r=d(""),K=d("全部区域"),Q=d(""),W=d("全部类型"),X=d(""),Z=d("收费类型"),ee=d(""),te=d(null),ae=d(!1),le=d(null),se=v(()=>{var e,t;const a={};for(const l of(null==(t=null==(e=c.value)?void 0:e.venue_dicts)?void 0:t.venue_type)??[])a[l.value]=l.label;return a}),ne=v(()=>{var e,t;const a={};for(const l of(null==(t=null==(e=c.value)?void 0:e.venue_dicts)?void 0:t.ticket_type)??[])a[l.value]=l.label;return a});function ue(e){return e?se.value[e]||e:""}function ce(e){return e?ne.value[e]||e:""}function oe(e){try{"undefined"!=typeof window&&window.sessionStorage&&window.sessionStorage.setItem(t.locConsent,e)}catch{}}const ie=v(()=>{var e,t;return((null==(t=null==(e=c.value)?void 0:e.stats)?void 0:t.reservation_total)??0).toLocaleString()}),re=v(()=>{var e;const t=(null==(e=c.value)?void 0:e.top_live_venues)??[],a=[];for(let l=0;l<3;l++){const e=t[l];e?a.push({id:e.id,name:e.name,people_count:e.people_count,empty:!1}):a.push({id:0,name:"",people_count:0,empty:!0})}return a}),de=v(()=>{var e,t;return[{label:"全部区域",value:""},...((null==(t=null==(e=c.value)?void 0:e.venue_dicts)?void 0:t.district)??[]).map(e=>({label:e.label,value:e.value}))]}),ve=v(()=>{var e,t;return[{label:"全部类型",value:""},...((null==(t=null==(e=c.value)?void 0:e.venue_dicts)?void 0:t.venue_type)??[]).map(e=>({label:e.label,value:e.value}))]}),fe=v(()=>{var e,t;return[{label:"收费类型",value:""},...((null==(t=null==(e=c.value)?void 0:e.venue_dicts)?void 0:t.ticket_type)??[]).map(e=>({label:e.label,value:e.value}))]}),_e=v(()=>{var e;const t=r.value.trim();return((null==(e=c.value)?void 0:e.map_venues)??[]).filter(e=>{if(Q.value&&(e.district||"")!==Q.value)return!1;if(X.value&&(e.venue_type||"")!==X.value)return!1;if("free"===ee.value&&"free"!==(e.ticket_type||""))return!1;if("paid"===ee.value&&"paid"!==(e.ticket_type||""))return!1;if(t){if(!`${e.name||""}${e.address||""}`.includes(t))return!1}return!0})}),me=v(()=>{const e=[..._e.value],t=te.value;return t?e.sort((e,a)=>G(t.lat,t.lng,e.lat,e.lng)-G(t.lat,t.lng,a.lat,a.lng)):e}),pe=v(()=>null==le.value?null:_e.value.find(e=>e.id===le.value)??null),he=v(()=>{const e=pe.value,t=te.value;if(!e||!t)return"定位后可显示距离";const a=G(t.lat,t.lng,e.lat,e.lng);return`距您 ${H(a)}`});f(_e,e=>{null==le.value||e.some(e=>e.id===le.value)||(le.value=null)}),f(i,e=>{"list"===e&&(le.value=null)});const ye=v(()=>_e.value.map(e=>{const t=J(e.venue_type_color);return{id:e.id,latitude:e.lat,longitude:e.lng,width:32,height:38,iconPath:t||void 0,anchor:{x:.5,y:1}}}));function ge(e){const t=te.value;if(!t)return"距离 --";const a=G(t.lat,t.lng,e.lat,e.lng);return`距您 ${H(a)}`}function we(e){if("district"===e){const e=de.value;R({itemList:e.map(e=>e.label),success:t=>{const a=e[t.tapIndex];K.value=a.label,Q.value=a.value}})}else if("type"===e){const e=ve.value;R({itemList:e.map(e=>e.label),success:t=>{const a=e[t.tapIndex];W.value=a.label,X.value=a.value}})}else{const e=fe.value;R({itemList:e.map(e=>e.label),success:t=>{const a=e[t.tapIndex];Z.value=a.label,ee.value=a.value}})}}let ke=!1;function be(e){var t;const a=null==(t=null==e?void 0:e.detail)?void 0:t.markerId;null!=a&&(le.value=Number(a),ke=!0,setTimeout(()=>{ke=!1},400))}function Se(){ke||(le.value=null)}function Ce(){le.value=null}function xe(e){e&&V({url:`/pages/venue/detail?id=${e}`})}function Ie(){V({url:"/pages/stats/index"})}function $e(){B({url:"/pages/activity/index"})}function Pe(){V({url:"/pages/discover/index"})}function je(e){return 0===(e.registered_count??0)&&!0===e.is_bookable}function Fe(e){const t=e.registered_count??0;return je(e)?"可预约":t>0?`${t}人已预约`:"敬请期待"}function Te(){var e;if(te.value)return void(o.value={latitude:te.value.lat,longitude:te.value.lng});const t=(null==(e=c.value)?void 0:e.map_venues)??[];t.length?o.value={latitude:t[0].lat,longitude:t[0].lng}:o.value={latitude:31.2989,longitude:120.5853}}async function Le(){u.value=!0;try{const t=await e.get("/h5/home",{},{withAuth:!1});c.value=t,Te(),await h({title:"苏州科普地图",desc:"热门活动、研学线路与场馆导览"}).catch(()=>{})}catch(t){n({title:(null==t?void 0:t.message)||"加载首页失败",icon:"none"})}finally{u.value=!1}}async function ze(){if(ae.value=!1,l())try{const e=await w();return te.value={lat:e.lat,lng:e.lng},void Te()}catch{}k({type:"gcj02",success:e=>{te.value={lat:e.latitude,lng:e.longitude},Te()},fail:()=>{te.value=null,Te();try{"undefined"!=typeof window&&window.sessionStorage&&window.sessionStorage.removeItem(t.locConsent)}catch{}try{a(t.locConsent)}catch{}ae.value=!0}})}function Ae(){ae.value=!1,Ue()}function Ue(){return new Promise(e=>{(function(){if("undefined"==typeof window)return!1;try{if("1"===window.sessionStorage.getItem(O))return window.sessionStorage.removeItem(O),!0}catch{}return!1})()&&function(){try{"undefined"!=typeof window&&window.sessionStorage&&window.sessionStorage.removeItem(t.locConsent)}catch{}try{a(t.locConsent)}catch{}}();const s=function(){try{if("undefined"!=typeof window&&window.sessionStorage){const e=window.sessionStorage.getItem(t.locConsent);if("granted"===e||"denied"===e)return e}}catch{}return null}();if("denied"!==s)return"granted"===s?l()?void y({title:"需要获取您的位置",content:"用于展示「距您」距离与列表排序。在微信中需您确认后才会调起定位;拒绝后仍可浏览场馆。",confirmText:"允许",cancelText:"暂不",success:t=>{t.confirm?(oe("granted"),ze().finally(()=>e())):(oe("denied"),e())}}):void ze().finally(()=>e()):void y({title:"需要获取您的位置",content:"用于展示「距您」距离、列表排序与地图中心。拒绝后仍可浏览场馆,但无法显示距离。",confirmText:"允许",cancelText:"暂不",success:t=>{t.confirm?(oe("granted"),ze().finally(()=>e())):(oe("denied"),e())}});e()})}return _(async()=>{await Y()&&(await Le(),await Ue())}),(e,t)=>{const a=C,l=x,s=A,n=U,d=M,v=g;return b(),m(v,{"scroll-y":"",class:"page"},{default:p(()=>[S(a,{class:"hero"},{default:p(()=>[S(a,{class:"hero-brand"}),S(a,{class:"hero-content"},{default:p(()=>[S(a,{class:"stat-card"},{default:p(()=>[S(a,{class:"stat-main"},{default:p(()=>[S(a,{class:"stat-left"},{default:p(()=>[S(l,{class:"stat-label"},{default:p(()=>[I("全市实时总人数")]),_:1}),S(l,{class:"stat-num"},{default:p(()=>[I($(ie.value)+" 人",1)]),_:1}),S(l,{class:"stat-desc"},{default:p(()=>[I("正在参观科普场馆")]),_:1})]),_:1}),S(a,{class:"stat-right"},{default:p(()=>[S(a,{class:"live-list"},{default:p(()=>[(b(!0),P(j,null,F(re.value,(e,t)=>(b(),m(a,{key:"live-"+t,class:L(["live-venue-row",{"is-empty":e.empty}]),onClick:T(t=>{var a;(a=e).empty||xe(a.id)},["stop"])},{default:p(()=>[S(a,{class:"live-row-one"},{default:p(()=>[S(l,{class:"live-top"},{default:p(()=>[I("Top "+$(t+1),1)]),_:2},1024),S(l,{class:"live-name"},{default:p(()=>[I($(e.empty?"—":e.name),1)]),_:2},1024),S(l,{class:"live-count"},{default:p(()=>[I($(e.empty?"—":e.people_count+" 人"),1)]),_:2},1024)]),_:2},1024)]),_:2},1032,["class","onClick"]))),128))]),_:1}),S(a,{class:"stat-foot",onClick:T(Ie,["stop"])},{default:p(()=>[S(l,{class:"stat-foot-link"},{default:p(()=>[I("客流量统计 >")]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})]),_:1}),ae.value?(b(),m(a,{key:0,class:"loc-retry-bar",onClick:Ae},{default:p(()=>[S(l,{class:"loc-retry-text"},{default:p(()=>[I("定位未成功,点击此处重新授权并获取位置")]),_:1})]),_:1})):z("",!0),S(a,{class:"map-section"},{default:p(()=>[S(a,{class:"toolbar"},{default:p(()=>[S(a,{class:"tabs"},{default:p(()=>[S(l,{class:L(["tab",{on:"map"===i.value}]),onClick:t[0]||(t[0]=e=>i.value="map")},{default:p(()=>[I("地图")]),_:1},8,["class"]),S(l,{class:L(["tab",{on:"list"===i.value}]),onClick:t[1]||(t[1]=e=>i.value="list")},{default:p(()=>[I("列表")]),_:1},8,["class"])]),_:1}),S(a,{class:"search-wrap"},{default:p(()=>[S(s,{modelValue:r.value,"onUpdate:modelValue":t[2]||(t[2]=e=>r.value=e),class:"search-input",placeholder:"请输入你要搜索的内容","placeholder-class":"ph"},null,8,["modelValue"]),S(n,{class:"search-icon-img",src:q(D),mode:"aspectFit"},null,8,["src"])]),_:1})]),_:1}),S(a,{class:"filters"},{default:p(()=>[S(a,{class:"f-item",onClick:t[3]||(t[3]=e=>we("district"))},{default:p(()=>[S(l,{class:"f-item-text"},{default:p(()=>[I($(K.value),1)]),_:1}),S(n,{class:"f-item-arrow",src:q(N),mode:"aspectFit"},null,8,["src"])]),_:1}),S(a,{class:"f-item",onClick:t[4]||(t[4]=e=>we("type"))},{default:p(()=>[S(l,{class:"f-item-text"},{default:p(()=>[I($(W.value),1)]),_:1}),S(n,{class:"f-item-arrow",src:q(N),mode:"aspectFit"},null,8,["src"])]),_:1}),S(a,{class:"f-item",onClick:t[5]||(t[5]=e=>we("ticket"))},{default:p(()=>[S(l,{class:"f-item-text"},{default:p(()=>[I($(Z.value),1)]),_:1}),S(n,{class:"f-item-arrow",src:q(N),mode:"aspectFit"},null,8,["src"])]),_:1})]),_:1}),"map"===i.value?(b(),m(a,{key:0,class:"map-wrap"},{default:p(()=>[S(d,{class:"main-map",latitude:o.value.latitude,longitude:o.value.longitude,markers:ye.value,scale:11,"show-location":"",onMarkertap:be,onTap:Se},null,8,["latitude","longitude","markers"]),pe.value?(b(),m(a,{key:0,class:"venue-sheet",onClick:t[7]||(t[7]=T(()=>{},["stop"]))},{default:p(()=>[S(a,{class:"venue-sheet-inner"},{default:p(()=>[S(a,{class:"sheet-bar"}),S(a,{class:"sheet-row"},{default:p(()=>[pe.value.image?(b(),m(n,{key:0,class:"sheet-cover",src:pe.value.image,mode:"aspectFill"},null,8,["src"])):(b(),m(a,{key:1,class:"sheet-cover sheet-cover-ph"})),S(a,{class:"sheet-main"},{default:p(()=>[S(l,{class:"sheet-name"},{default:p(()=>[I($(pe.value.name),1)]),_:1}),pe.value.venue_type||pe.value.ticket_type?(b(),m(a,{key:0,class:"sheet-meta"},{default:p(()=>[pe.value.venue_type?(b(),m(l,{key:0,class:"sheet-type"},{default:p(()=>[I($(ue(pe.value.venue_type)||pe.value.venue_type),1)]),_:1})):z("",!0),pe.value.venue_type&&pe.value.ticket_type?(b(),m(l,{key:1,class:"sheet-meta-sep"},{default:p(()=>[I("·")]),_:1})):z("",!0),pe.value.ticket_type?(b(),m(l,{key:2,class:L(["sheet-ticket","paid"===pe.value.ticket_type?"paid":"free"])},{default:p(()=>[I($(ce(pe.value.ticket_type)),1)]),_:1},8,["class"])):z("",!0)]),_:1})):z("",!0),S(l,{class:"sheet-addr"},{default:p(()=>[I($(pe.value.address||"地址待定"),1)]),_:1}),S(l,{class:"sheet-dist"},{default:p(()=>[I($(he.value),1)]),_:1})]),_:1})]),_:1}),S(a,{class:"sheet-actions"},{default:p(()=>[S(a,{class:"sheet-btn ghost",onClick:Ce},{default:p(()=>[I("关闭")]),_:1}),S(a,{class:"sheet-btn primary",onClick:t[6]||(t[6]=e=>xe(pe.value.id))},{default:p(()=>[I("查看详情")]),_:1})]),_:1})]),_:1})]),_:1})):z("",!0)]),_:1})):(b(),m(v,{key:1,"scroll-y":"",class:"venue-list-scroll"},{default:p(()=>[(b(!0),P(j,null,F(me.value,e=>(b(),m(a,{key:e.id,class:"venue-row",onClick:t=>xe(e.id)},{default:p(()=>[e.image?(b(),m(n,{key:0,class:"venue-thumb",src:e.image,mode:"aspectFill"},null,8,["src"])):(b(),m(a,{key:1,class:"venue-thumb ph-img"})),S(a,{class:"venue-info"},{default:p(()=>[S(l,{class:"venue-name"},{default:p(()=>[I($(e.name),1)]),_:2},1024),e.venue_type||e.ticket_type?(b(),m(a,{key:0,class:"venue-meta"},{default:p(()=>[e.venue_type?(b(),m(l,{key:0,class:"venue-type-pill"},{default:p(()=>[I($(ue(e.venue_type)||e.venue_type),1)]),_:2},1024)):z("",!0),e.ticket_type?(b(),m(l,{key:1,class:L(["venue-ticket-pill","paid"===e.ticket_type?"paid":"free"])},{default:p(()=>[I($(ce(e.ticket_type)),1)]),_:2},1032,["class"])):z("",!0)]),_:2},1024)):z("",!0),S(l,{class:"venue-addr"},{default:p(()=>[I($(e.address||"-"),1)]),_:2},1024),S(l,{class:"venue-dist"},{default:p(()=>[I($(ge(e)),1)]),_:2},1024)]),_:2},1024)]),_:2},1032,["onClick"]))),128)),me.value.length?z("",!0):(b(),m(a,{key:0,class:"empty-tip"},{default:p(()=>[I("暂无符合条件的场馆")]),_:1}))]),_:1}))]),_:1}),S(a,{class:"section"},{default:p(()=>[S(a,{class:"sec-head"},{default:p(()=>[S(a,{class:"sec-bar"}),S(l,{class:"sec-title"},{default:p(()=>[I("热门活动")]),_:1}),S(l,{class:"sec-more",onClick:$e},{default:p(()=>[I("更多 >")]),_:1})]),_:1}),S(v,{"scroll-x":"",class:"act-scroll","show-scrollbar":!1,"enable-flex":!0},{default:p(()=>[S(a,{class:"act-scroll-row"},{default:p(()=>{var e;return[(b(!0),P(j,null,F((null==(e=c.value)?void 0:e.hot_activities)??[],e=>(b(),m(a,{key:e.id,class:"act-card",onClick:t=>{return a=e.id,void V({url:`/pages/activity/detail?id=${a}`});var a}},{default:p(()=>[S(a,{class:"act-img-wrap"},{default:p(()=>[e.image?(b(),m(n,{key:0,class:"act-img",src:e.image,mode:"aspectFill"},null,8,["src"])):(b(),m(a,{key:1,class:"act-img-ph"})),S(a,{class:L(["act-book-badge",{"is-bookable":je(e)}])},{default:p(()=>[S(l,{class:L(["act-book-text",{"is-bookable":je(e)}])},{default:p(()=>[I($(Fe(e)),1)]),_:2},1032,["class"])]),_:2},1032,["class"])]),_:2},1024),S(a,{class:"act-body"},{default:p(()=>[S(l,{class:"act-title"},{default:p(()=>[I($(e.title),1)]),_:2},1024),S(a,{class:"act-tags"},{default:p(()=>[(b(!0),P(j,null,F((e.tags||[]).slice(0,4),(t,a)=>(b(),m(l,{key:"tag-"+e.id+"-"+a,class:"act-tag-chip"},{default:p(()=>[I($(t),1)]),_:2},1024))),128))]),_:2},1024),S(l,{class:"act-meta"},{default:p(()=>[I($(q(E)(e.start_at,e.end_at)),1)]),_:2},1024),S(l,{class:"act-meta"},{default:p(()=>[I($(e.venue_name||e.address||"苏州"),1)]),_:2},1024)]),_:2},1024)]),_:2},1032,["onClick"]))),128))]}),_:1})]),_:1})]),_:1}),S(a,{class:"section"},{default:p(()=>{var e;return[S(a,{class:"sec-head"},{default:p(()=>[S(a,{class:"sec-bar"}),S(l,{class:"sec-title"},{default:p(()=>[I("苏州市科普研学线路")]),_:1}),S(l,{class:"sec-more",onClick:Pe},{default:p(()=>[I("更多 >")]),_:1})]),_:1}),(b(!0),P(j,null,F((null==(e=c.value)?void 0:e.study_tours)??[],e=>(b(),m(a,{key:e.id,class:"tour-card",onClick:t=>{return a=e.id,void V({url:`/pages/study-tour/detail?id=${a}`});var a}},{default:p(()=>[S(a,{class:"tour-img-wrap"},{default:p(()=>[e.cover_image?(b(),m(n,{key:0,class:"tour-img",src:e.cover_image,mode:"aspectFill"},null,8,["src"])):(b(),m(a,{key:1,class:"tour-img tour-ph"})),S(a,{class:"tour-overlay-title-wrap"},{default:p(()=>[S(l,{class:"tour-overlay-title"},{default:p(()=>[I($(e.name),1)]),_:2},1024)]),_:2},1024)]),_:2},1024),S(a,{class:"tour-body"},{default:p(()=>{var t;return[S(l,{class:"tour-title"},{default:p(()=>[I($(e.name),1)]),_:2},1024),S(a,{class:"tour-stops-timeline"},{default:p(()=>[(b(!0),P(j,null,F(e.venue_names,(t,s)=>(b(),m(a,{key:"v-"+e.id+"-"+s,class:"tour-stop-row"},{default:p(()=>[S(a,{class:"tour-timeline-axis"},{default:p(()=>[S(a,{class:"tour-dot-cell"},{default:p(()=>[S(a,{class:"tour-tl-dot"})]),_:1}),s<e.venue_names.length-1?(b(),m(a,{key:0,class:"tour-tl-line"})):z("",!0)]),_:2},1024),S(l,{class:"tour-stop-name"},{default:p(()=>[I($(t),1)]),_:2},1024)]),_:2},1024))),128))]),_:2},1024),(null==(t=e.tags)?void 0:t.length)?(b(),m(a,{key:0,class:"tour-tags-row"},{default:p(()=>[(b(!0),P(j,null,F(e.tags,(t,a)=>(b(),m(l,{key:"t-"+e.id+"-"+a,class:"tour-tag"},{default:p(()=>[I($(t),1)]),_:2},1024))),128))]),_:2},1024)):z("",!0)]}),_:2},1024)]),_:2},1032,["onClick"]))),128))]}),_:1}),S(a,{class:"bottom-safe"}),u.value?(b(),m(a,{key:1,class:"loading-mask"},{default:p(()=>[I("加载中...")]),_:1})):z("",!0)]),_:1})}}}),[["__scopeId","data-v-2ee5baef"]]);export{Z as default};