2 lines
17 KiB
JavaScript
2 lines
17 KiB
JavaScript
import{d as e,r as a,a as l,c as t,o as n,b as s,e as i,w as o,f as r,i as u,g as c,h as d,j as f,k as g,l as m,m as v,F as y,n as h,p as k,q as _,s as p,t as b,u as A,v as w,x as C,S as x,y as M,z as T,A as $,B as P,_ as S}from"./index-Cjnp88jU.js";import{B as j}from"./BottomNav.CvtDF44N.js";import{_ as D}from"./AvatarImage.vue_vue_type_script_setup_true_lang.CD0DRDxG.js";import{_ as q}from"./MediaImage.vue_vue_type_script_setup_true_lang.gGIxBCz7.js";import{A as I}from"./AppIcon.Br30CqQf.js";const B=S(e({__name:"index",setup(e){const S=globalThis.uni,B=a([{key:"recommend",label:"推荐",users:[],page:1,hasMore:!0,loading:!1,loadingMore:!1,refreshing:!1,loaded:!1,error:!1,requestVersion:0},{key:"nearby",label:"附近",users:[],page:1,hasMore:!0,loading:!1,loadingMore:!1,refreshing:!1,loaded:!1,error:!1,requestVersion:0},{key:"latest",label:"最新",users:[],page:1,hasMore:!0,loading:!1,loadingMore:!1,refreshing:!1,loaded:!1,error:!1,requestVersion:0},{key:"following",label:"关注",users:[],page:1,hasMore:!0,loading:!1,loadingMore:!1,refreshing:!1,loaded:!1,error:!1,requestVersion:0}]),N=l(0),V=l(Boolean(S.getStorageSync("locationUpdatedAt"))),F=l("list"),R=a({gender:0,online:"all",minAge:0,maxAge:0}),O=a({gender:0,online:"all",minAge:0,maxAge:0}),U=l(!1),z=t(()=>{const e=[];return R.gender&&e.push(1===R.gender?"男生":"女生"),"all"!==R.online&&e.push("online"===R.online?"在线":"离线"),(R.minAge||R.maxAge)&&e.push(R.maxAge?`${R.minAge}-${R.maxAge}岁`:`${R.minAge}岁以上`),e}),L=new Set,W=l(0),X=l(-1),Y=l(1),E=l(!1),G=l(!1),H=l(0);let J,K,Q,Z=!1,ee=!1,ae=!1,le="",te=0;const ne=t(()=>{if(X.value<0||!H.value)return N.value;const e=Math.max(-1,Math.min(1,-W.value/H.value));return N.value+e}),se=t(()=>`width: ${100/B.length}%; transform: translate3d(${100*ne.value}%, 0, 0);`);function ie(e){if(e===N.value)return W.value?`transform: translate3d(${W.value}px, 0, 0);`:"";return`transform: translate3d(${W.value+Y.value*H.value}px, 0, 0);`}async function oe(e,a=!1){if(!c())return;if(a)e.requestVersion+=1,e.page=1,e.hasMore=!0,e.error=!1,e.loadingMore=!1,e.loading=!e.users.length;else{if(!e.loaded||e.loading||e.loadingMore||!e.hasMore)return;e.loadingMore=!0}const l=e.requestVersion,t=e.page;try{const n=await function(e,a){const l=[`page=${a}`,"pageSize=20"];"latest"===e.key&&l.unshift("sort=latest"),"following"===e.key&&l.unshift("scope=following"),"nearby"===e.key&&(R.gender&&l.unshift(`gender=${R.gender}`),"all"!==R.online&&l.unshift("online="+("online"===R.online?1:0)),R.minAge&&l.unshift(`minAge=${R.minAge}`),R.maxAge&&l.unshift(`maxAge=${R.maxAge}`));const t=`?${l.join("&")}`;return"nearby"===e.key?r.nearby(t):r.discover(t)}(e,t);if(l!==e.requestVersion)return;const s=n.items||[];e.users=a?s:[...e.users,...s],e.page=t+1,e.hasMore=Boolean(n.hasMore),e.loaded=!0,e.error=!1,"recommend"===e.key&&1===t&&setTimeout(()=>d().catch(()=>{}),120)}catch{e.error=!0}finally{l===e.requestVersion&&(e.loading=!1,e.loadingMore=!1)}}function re(){clearTimeout(K),K=void 0,Q=void 0,E.value=!1,G.value=!1,W.value=0,X.value=-1}function ue(e){re(),N.value=e;const a=B[e];a.loaded||a.loading||oe(a,!0),"nearby"!==a.key||V.value||Ce(!1)}function ce(){var e,a;const l=(null==(e=S.getWindowInfo)?void 0:e.call(S))??(null==(a=S.getSystemInfoSync)?void 0:a.call(S))??{};return Number(l.windowWidth)||H.value||375}function de(e){var a,l;return(null==(a=null==e?void 0:e.touches)?void 0:a[0])??(null==(l=null==e?void 0:e.changedTouches)?void 0:l[0])}function fe(e){return Number((null==e?void 0:e.pageX)??(null==e?void 0:e.clientX)??0)}function ge(e){return Number((null==e?void 0:e.pageY)??(null==e?void 0:e.clientY)??0)}function me(e){var a;return Number((null==(a=null==e?void 0:e.touches)?void 0:a.length)??1)}function ve(e){const a=de(e);!a||me(e)>1||(_e(),le="",H.value=ce(),J={x:fe(a),y:ge(a),time:Date.now(),touchId:Number(a.identifier??0)})}function ye(e){const a=J;if(!a)return;if(me(e)>1)return void ke();const l=de(e);if(!l||Number(l.identifier??0)!==a.touchId)return;const t=fe(l)-a.x,n=ge(l)-a.y;if(!le){if(Math.abs(t)<12&&Math.abs(n)<12)return;return Math.abs(t)<=1.2*Math.abs(n)?void(J=void 0):(le="x",a.x=fe(l),a.time=Date.now(),E.value=!0,void(G.value=!1))}const s=N.value+(t<0?1:-1),i=s>=0&&s<B.length;Y.value=t<0?1:-1,X.value=i?s:-1,W.value=i?t:.3*t}function he(){const e=J,a="x"===le;if(J=void 0,le="",E.value=!1,!a)return;const l=W.value,t=H.value||ce(),n=Math.max(1,Date.now()-((null==e?void 0:e.time)??Date.now())),s=X.value,i=Math.abs(l),o=s>=0&&(i>.24*t||i>.08*t&&i/n>.5);te=Date.now()+260+60,G.value=!0,W.value=o?-Y.value*t:0,Q=o?s:-1,clearTimeout(K),K=setTimeout(_e,260)}function ke(){"x"===le?(J=void 0,le="",E.value=!1,G.value=!0,W.value=0,Q=-1,clearTimeout(K),K=setTimeout(_e,260)):J=void 0}function _e(){if(void 0===Q)return;const e=Q;e>=0&&e!==N.value?ue(e):re()}function pe(){U.value?U.value=!1:(Object.assign(O,R),U.value=!0)}function be(e,a){O.minAge=e,O.maxAge=a}function Ae(){Object.assign(R,O),U.value=!1,oe(B[1],!0)}function we(){Object.assign(O,{gender:0,online:"all",minAge:0,maxAge:0}),Object.assign(R,O),U.value=!1,oe(B[1],!0)}function Ce(e=!0){ee||ae&&!e||(ee=!0,ae=!0,S.getLocation({type:"gcj02",success:async({latitude:e,longitude:a})=>{try{await r.updateLocation(e,a),V.value=!0,S.setStorageSync("locationUpdatedAt",Date.now()),await oe(B[1],!0)}catch{}finally{ee=!1}},fail:()=>{ee=!1,e&&S.showModal({title:"需要位置权限",content:"请在系统设置中允许星遇访问位置,以显示附近用户的距离。",confirmText:"去设置",success:({confirm:e})=>{e&&S.openSetting({})}})}}))}function xe(e){Date.now()<te||Z||(Z=!0,S.navigateTo({url:`/pages/profile/index?id=${e.id}`,complete:()=>setTimeout(()=>{Z=!1},300)}))}function Me(e){return[e.city,e.distanceText].filter(Boolean).join(" · ")||"位置未知"}function Te(e){var a,l;if(e.latestPost)return String(e.latestPost.content||"分享了一张照片").trim();const t=String(e.bio||"").replace(/[。.]$/,"").trim(),n=null==(l=null==(a=t.match(/兴趣[::]\s*(.+)$/))?void 0:a[1])?void 0:l.trim();return n||(t||"还没有写下近况,去主页认识一下 TA")}function $e(e){if(!e)return"兴趣近况";const a=new Date(e).getTime();if(!Number.isFinite(a))return"最近分享";const l=Math.max(0,Math.floor((Date.now()-a)/6e4));if(l<1)return"刚刚分享";if(l<60)return`${l} 分钟前`;if(l<1440)return`${Math.floor(l/60)} 小时前`;if(l<10080)return`${Math.floor(l/1440)} 天前`;const t=new Date(a);return`${t.getMonth()+1} 月 ${t.getDate()} 日`}async function Pe(e){if(Date.now()<te)return;if(L.has(e.id))return;L.add(e.id);const a=Boolean(e.liked);e.liked=!a;try{a?await r.unlikeUser(e.id):await r.likeUser(e.id),S.showToast({title:e.liked?"已喜欢":"已取消",icon:"none"})}catch{e.liked=a}finally{L.delete(e.id)}}return n(()=>clearTimeout(K)),s(e=>{const a=B.findIndex(a=>a.key===(null==e?void 0:e.tab));ue(a>=0?a:0)}),(e,a)=>{const l=u,t=k,n=M,s=f("LoadFailure"),r=x;return g(),i(l,{class:"page-shell home"},{default:o(()=>[m(l,{class:"home-header"},{default:o(()=>[m(l,{class:"safe-top"}),m(l,{class:"top page-pad"},{default:o(()=>[m(l,{class:"tabs",role:"tablist"},{default:o(()=>[(g(!0),v(y,null,h(B,(e,a)=>(g(),i(t,{key:e.key,class:_(["tab",{active:N.value===a}]),"aria-selected":N.value===a,role:"tab",onClick:e=>ue(a)},{default:o(()=>[p(b(e.label),1)]),_:2},1032,["class","aria-selected","onClick"]))),128)),m(l,{class:_(["tab-indicator",{dragging:E.value}]),style:A(se.value)},{default:o(()=>[w("i")]),_:1},8,["class","style"])]),_:1}),m(t,{class:"search","aria-label":"搜索",onClick:a[0]||(a[0]=e=>S.navigateTo({url:"/pages/search/index"}))},{default:o(()=>[m(I,{name:"search"})]),_:1})]),_:1})]),_:1}),m(l,{class:_(["channel-panels",{dragging:E.value}]),onTouchstart:ve,onTouchmove:ye,onTouchend:he,onTouchcancel:ke},{default:o(()=>[(g(!0),v(y,null,h(B,(e,u)=>C((g(),i(r,{key:e.key,class:_(["channel-content",{incoming:u!==N.value,animating:G.value}]),style:A(ie(u)),"scroll-y":"","refresher-enabled":"","refresher-default-style":"white","refresher-background":"#1b1764","refresher-triggered":e.refreshing,onRefresherrefresh:a=>async function(e){if(!e.refreshing){e.refreshing=!0;try{await oe(e,!0)}finally{e.refreshing=!1}}}(e),onScrolltolower:a=>oe(e)},{default:o(()=>["nearby"===e.key?(g(),i(l,{key:0,class:"nearby-tools page-pad"},{default:o(()=>[m(t,{class:_(["filter-trigger",{active:z.value.length}]),onClick:pe},{default:o(()=>[m(I,{name:"filter"}),m(n,null,{default:o(()=>[p("筛选")]),_:1}),z.value.length?(g(),v("i",{key:0},b(z.value.length),1)):T("",!0)]),_:1},8,["class"]),m(l,{class:"layout-switch","aria-label":"排列方式"},{default:o(()=>[m(t,{class:_({active:"list"===F.value}),onClick:a[1]||(a[1]=e=>F.value="list")},{default:o(()=>[p("列表")]),_:1},8,["class"]),m(t,{class:_({active:"grid"===F.value}),onClick:a[2]||(a[2]=e=>F.value="grid")},{default:o(()=>[p("网格")]),_:1},8,["class"])]),_:1})]),_:1})):T("",!0),"nearby"===e.key&&z.value.length?(g(),i(l,{key:1,class:"active-filters page-pad"},{default:o(()=>[(g(!0),v(y,null,h(z.value,e=>(g(),i(n,{key:e},{default:o(()=>[p(b(e),1)]),_:2},1024))),128)),m(t,{onClick:we},{default:o(()=>[p("清除")]),_:1})]),_:1})):T("",!0),"nearby"===e.key&&U.value?(g(),i(l,{key:2,class:"filter-panel page-pad"},{default:o(()=>[m(l,{class:"filter-card glass"},{default:o(()=>[m(l,{class:"filter-group"},{default:o(()=>[w("strong",null,"性别"),m(l,null,{default:o(()=>[m(t,{class:_({active:0===O.gender}),onClick:a[3]||(a[3]=e=>O.gender=0)},{default:o(()=>[p("全部")]),_:1},8,["class"]),m(t,{class:_({active:1===O.gender}),onClick:a[4]||(a[4]=e=>O.gender=1)},{default:o(()=>[p("男生")]),_:1},8,["class"]),m(t,{class:_({active:2===O.gender}),onClick:a[5]||(a[5]=e=>O.gender=2)},{default:o(()=>[p("女生")]),_:1},8,["class"])]),_:1})]),_:1}),m(l,{class:"filter-group"},{default:o(()=>[w("strong",null,"状态"),m(l,null,{default:o(()=>[m(t,{class:_({active:"all"===O.online}),onClick:a[6]||(a[6]=e=>O.online="all")},{default:o(()=>[p("全部")]),_:1},8,["class"]),m(t,{class:_({active:"online"===O.online}),onClick:a[7]||(a[7]=e=>O.online="online")},{default:o(()=>[p("在线")]),_:1},8,["class"]),m(t,{class:_({active:"offline"===O.online}),onClick:a[8]||(a[8]=e=>O.online="offline")},{default:o(()=>[p("离线")]),_:1},8,["class"])]),_:1})]),_:1}),m(l,{class:"filter-group age-filter"},{default:o(()=>[w("strong",null,"年龄"),m(l,null,{default:o(()=>[m(t,{class:_({active:!O.minAge&&!O.maxAge}),onClick:a[9]||(a[9]=e=>be(0,0))},{default:o(()=>[p("全部")]),_:1},8,["class"]),m(t,{class:_({active:18===O.minAge&&25===O.maxAge}),onClick:a[10]||(a[10]=e=>be(18,25))},{default:o(()=>[p("18-25")]),_:1},8,["class"]),m(t,{class:_({active:26===O.minAge&&35===O.maxAge}),onClick:a[11]||(a[11]=e=>be(26,35))},{default:o(()=>[p("26-35")]),_:1},8,["class"]),m(t,{class:_({active:36===O.minAge&&45===O.maxAge}),onClick:a[12]||(a[12]=e=>be(36,45))},{default:o(()=>[p("36-45")]),_:1},8,["class"]),m(t,{class:_({active:46===O.minAge&&!O.maxAge}),onClick:a[13]||(a[13]=e=>be(46,0))},{default:o(()=>[p("46+")]),_:1},8,["class"])]),_:1})]),_:1}),m(l,{class:"filter-actions"},{default:o(()=>[m(t,{onClick:we},{default:o(()=>[p("重置")]),_:1}),m(t,{class:"apply",onClick:Ae},{default:o(()=>[p("查看结果")]),_:1})]),_:1})]),_:1})]),_:1})):T("",!0),"nearby"!==e.key||V.value?T("",!0):(g(),i(l,{key:3,class:"location-note page-pad"},{default:o(()=>[m(n,null,{default:o(()=>[p("开启位置权限,查看更准确的距离")]),_:1}),m(t,{onClick:a[14]||(a[14]=e=>Ce(!0))},{default:o(()=>[p("去开启")]),_:1})]),_:1})),e.loading&&"nearby"===e.key&&"list"===F.value?(g(),i(l,{key:4,class:"nearby-list loading-list page-pad"},{default:o(()=>[(g(),v(y,null,h(6,e=>m(l,{key:e,class:"loading-row"},{default:o(()=>[m(l,{class:"loading-avatar"}),m(l,{class:"loading-copy"})]),_:2},1024)),64))]),_:1})):e.loading?(g(),i(l,{key:5,class:"grid page-pad"},{default:o(()=>[(g(),v(y,null,h(6,e=>m(l,{key:e,class:"loading-card"})),64))]),_:1})):e.users.length&&"nearby"===e.key&&"list"===F.value?(g(),i(l,{key:6,class:"nearby-list page-pad"},{default:o(()=>[(g(!0),v(y,null,h(e.users,e=>(g(),i(l,{key:e.id,class:"nearby-row tap-target",onClick:a=>xe(e)},{default:o(()=>[m(l,{class:"nearby-head"},{default:o(()=>[m(l,{class:"nearby-portrait"},{default:o(()=>[m(n,{class:"portrait-initial"},{default:o(()=>[p(b((e.nickname||"?").slice(0,1)),1)]),_:2},1024),m(D,{class:"nearby-avatar",src:e.avatar,"thumbnail-src":e.avatarThumbnail},null,8,["src","thumbnail-src"]),e.online?(g(),i(l,{key:0,class:"portrait-online",role:"status","aria-label":"当前在线"},{default:o(()=>[w("i")]),_:1})):T("",!0)]),_:2},1024),m(l,{class:"nearby-copy"},{default:o(()=>[m(l,{class:"nearby-name"},{default:o(()=>[m(n,null,{default:o(()=>[p(b(e.nickname),1)]),_:2},1024),e.age?(g(),i(n,{key:0,class:_(["age-badge",1===e.gender?"male":2===e.gender?"female":""])},{default:o(()=>[p(b(1===e.gender?"♂":2===e.gender?"♀":"")+" "+b(e.age),1)]),_:2},1032,["class"])):T("",!0)]),_:2},1024),m(l,{class:"nearby-meta"},{default:o(()=>[m(n,{class:"meta-place"},{default:o(()=>[m(I,{name:"pin"}),p(" "+b(Me(e)),1)]),_:2},1024),e.online?(g(),i(n,{key:0,class:"meta-state is-online"},{default:o(()=>[w("i"),p("在线")]),_:1})):e.lastActiveAt?(g(),i(n,{key:1,class:"meta-state"},{default:o(()=>[p("最近活跃")]),_:1})):T("",!0)]),_:2},1024)]),_:2},1024),m(t,{class:_(["row-like",{liked:e.liked}]),"aria-label":"喜欢",onClick:$(a=>Pe(e),["stop"])},{default:o(()=>[m(I,{filled:e.liked,name:"heart"},null,8,["filled"])]),_:2},1032,["class","onClick"])]),_:2},1024),e.latestPost||e.bio?(g(),i(l,{key:0,class:"nearby-moment",onClick:$(a=>function(e){var a;if(!(Date.now()<te))return(null==(a=e.latestPost)?void 0:a.id)?void S.navigateTo({url:`/pages/post-detail/index?id=${e.latestPost.id}`}):xe(e)}(e),["stop"])},{default:o(()=>{var a,t;return[m(l,{class:"moment-line"},{default:o(()=>[m(n,{class:"moment-content"},{default:o(()=>[p(b(Te(e)),1)]),_:2},1024),e.latestPost?(g(),i(n,{key:0,class:"moment-time"},{default:o(()=>{var a;return[p(b($e(null==(a=e.latestPost)?void 0:a.createdAt)),1)]}),_:2},1024)):T("",!0),m(l,{class:"moment-arrow"},{default:o(()=>[m(I,{name:"chevronRight"})]),_:1})]),_:2},1024),(null==(t=null==(a=e.latestPost)?void 0:a.media)?void 0:t.length)?(g(),i(l,{key:0,class:_(["moment-gallery",`count-${Math.min(e.latestPost.media.length,9)}`])},{default:o(()=>[(g(!0),v(y,null,h(e.latestPost.media.slice(0,9),(a,t)=>(g(),i(l,{key:`${a}-${t}`,class:"moment-media-cell"},{default:o(()=>{var l;return[m(q,{class:"moment-media",src:a,"thumbnail-src":null==(l=e.latestPost.mediaThumbnails)?void 0:l[t],mode:1===e.latestPost.media.length?"aspectFit":"aspectFill"},null,8,["src","thumbnail-src","mode"]),8===t&&(e.latestPost.mediaCount||e.latestPost.media.length)>9?(g(),i(n,{key:0,class:"moment-media-more"},{default:o(()=>[p("+"+b((e.latestPost.mediaCount||e.latestPost.media.length)-9),1)]),_:2},1024)):T("",!0)]}),_:2},1024))),128))]),_:2},1032,["class"])):T("",!0)]}),_:2},1032,["onClick"])):T("",!0)]),_:2},1032,["onClick"]))),128))]),_:2},1024)):e.users.length?(g(),i(l,{key:7,class:"grid page-pad"},{default:o(()=>[(g(!0),v(y,null,h(e.users,e=>(g(),i(l,{key:e.id,class:"user-card","hover-class":"user-card-active","hover-stay-time":80,onClick:a=>xe(e)},{default:o(()=>[m(D,{class:"avatar-card-image",src:e.avatar,"thumbnail-src":e.avatarThumbnail},null,8,["src","thumbnail-src"]),e.online?(g(),i(l,{key:0,class:"online",role:"status","aria-label":"当前在线"},{default:o(()=>[w("i"),p("在线")]),_:1})):T("",!0),m(l,{class:"info"},{default:o(()=>[m(n,{class:"name"},{default:o(()=>[p(b(e.nickname),1)]),_:2},1024),e.latestPost?(g(),i(n,{key:0,class:"grid-moment"},{default:o(()=>[p(b(Te(e)),1)]),_:2},1024)):T("",!0),m(l,{class:"meta"},{default:o(()=>[m(n,null,{default:o(()=>[m(I,{name:"pin"}),p(" "+b(e.age)+" · "+b(e.distanceText||e.city||"未知距离"),1)]),_:2},1024),m(t,{class:_({liked:e.liked}),"aria-label":"喜欢",onClick:$(a=>Pe(e),["stop"])},{default:o(()=>[m(I,{filled:e.liked,name:"heart"},null,8,["filled"])]),_:2},1032,["class","onClick"])]),_:2},1024)]),_:2},1024)]),_:2},1032,["onClick"]))),128))]),_:2},1024)):e.error?(g(),i(s,{key:8,onRetry:a=>oe(e,!0)},null,8,["onRetry"])):e.loaded?(g(),i(l,{key:9,class:"empty-state"},{default:o(()=>[m(l,{class:"empty-icon"},{default:o(()=>[m(I,{name:"sparkles"})]),_:1}),w("strong",null,b("following"===e.key?"还没有关注的人":"nearby"===e.key&&z.value.length?"没有符合条件的附近用户":"暂时没有更多推荐"),1),m(n,null,{default:o(()=>[p(b("following"===e.key?"在推荐页关注感兴趣的人,他们会出现在这里":"nearby"===e.key&&z.value.length?"调整或清除筛选条件后再看看":"点击刷新或稍后再来看看"),1)]),_:2},1024),"following"===e.key?(g(),i(t,{key:0,onClick:a[15]||(a[15]=e=>ue(0))},{default:o(()=>[p("去推荐页")]),_:1})):"nearby"===e.key&&z.value.length?(g(),i(t,{key:1,onClick:we},{default:o(()=>[p("清除筛选")]),_:1})):(g(),i(t,{key:2,onClick:a=>oe(e,!0)},{default:o(()=>[p("刷新看看")]),_:2},1032,["onClick"]))]),_:2},1024)):T("",!0),e.loadingMore?(g(),i(l,{key:10,class:"loading-more"},{default:o(()=>[p("正在加载…")]),_:1})):T("",!0),m(l,{class:"scroll-bottom"})]),_:2},1032,["class","style","refresher-triggered","onRefresherrefresh","onScrolltolower"])),[[P,u===N.value||u===X.value]])),128))]),_:1},8,["class"]),m(j,{active:"home"})]),_:1})}}}),[["__scopeId","data-v-1b222a08"]]);export{B as default};
|