Files
sbnews/server/public/mobile/assets/pages-crypto-crypto.C57iQDQZ.js
T

2 lines
9.7 KiB
JavaScript

import{d as e,u as a,r as l,c as s,o as t,L as r,a as o,ay as c,aw as i,f as u,w as _,k as n,P as v,l as d,m,p as f,t as g,v as y,S as b,y as w,F as p,z as k,x as h,A as $,ax as x,B as C,Q as F,q as L,a9 as S,a4 as N,a5 as U,n as z,_ as D}from"./index-CtL4_Q40.js";import{A}from"./ai-assistant-entry.wuaBbkH4.js";import{g as B,a as T,c as j,b as I}from"./crypto.DjG_jD5S.js";const M=D(e({__name:"crypto",setup(e){const D=a(),M=l(0),P=l([]),V=l([]),E=l([]),K=l([]),q=l(""),Q=l(!1),R=l(!1),G=l(0),H=l(!1),J=l(!1),O=l(!1),W=l("--:--"),X=l(0),Y=l(0);let Z=!1;const ee=[{label:"热门",key:"hot"},{label:"自选",key:"favorite"},{label:"涨幅榜",key:"gainers"},{label:"跌幅榜",key:"losers"},{label:"成交额",key:"volume"}],ae=s(()=>{const e=q.value.trim().toLowerCase();let a=P.value.filter(a=>!e||(a.symbol.toLowerCase().includes(e)||a.name.toLowerCase().includes(e)||a.name_zh.toLowerCase().includes(e)));return 1===G.value?a=D.isLogin?a.filter(e=>V.value.includes(e.symbol)):[]:2===G.value?a=[...a].sort((e,a)=>a.price_change_percentage_24h-e.price_change_percentage_24h):3===G.value?a=[...a].sort((e,a)=>e.price_change_percentage_24h-a.price_change_percentage_24h):4===G.value&&(a=[...a].sort((e,a)=>a.total_volume-e.total_volume)),a}),le=s(()=>`${X.value.toFixed(1)}%`),se=s(()=>fe(Y.value)),te=s(()=>q.value?"没有匹配的币种":"暂无自选币种"),re=s(()=>q.value?"换个关键词试试":"点击行情右侧星标即可加入自选"),oe=async()=>{var e,a;H.value=!0,O.value=!1;try{const l=await B();P.value=Array.isArray(null==l?void 0:l.coins)?l.coins:[],W.value=(null==l?void 0:l.updated_time)||"--:--",X.value=Number((null==(e=null==l?void 0:l.overview)?void 0:e.btc_market_cap_percentage)||0),Y.value=Number((null==(a=null==l?void 0:l.overview)?void 0:a.total_volume_usd)||0),K.value=[],O.value=0===P.value.length}catch(l){console.error("[CryptoMarket] load failed:",l),O.value=!0}finally{H.value=!1,J.value=!1}},ce=async()=>{if(D.isLogin)try{const e=await T();V.value=Array.isArray(null==e?void 0:e.symbols)?e.symbols.map(e=>String(e).toUpperCase()):[]}catch(e){console.error("[CryptoFavorite] load failed:",e)}else V.value=[]},ie=()=>{J.value=!0,Promise.all([oe(),ce()]).finally(()=>{J.value=!1})},ue=()=>{Q.value=!0,setTimeout(()=>{R.value=!0},80)},_e=()=>{q.value="",R.value=!1,Q.value=!1},ne=e=>V.value.includes(e),ve=()=>{N.set(U,"/pages/crypto/crypto"),z({url:"/pages/login/login"})},de=e=>{const a=Number(e||0),l=a>=100||a>=1?2:a>=.01?4:6;return`$${a.toLocaleString("en-US",{minimumFractionDigits:l,maximumFractionDigits:l})}`},me=e=>{const a=Number(e||0);return a>=1e12?`$${(a/1e12).toFixed(2)}T`:a>=1e9?`$${(a/1e9).toFixed(2)}B`:a>=1e6?`$${(a/1e6).toFixed(2)}M`:a>=1e3?`$${(a/1e3).toFixed(2)}K`:`$${a.toFixed(2)}`},fe=e=>{const a=Number(e||0);return a>=1e12?`$${(a/1e12).toLocaleString("en-US",{maximumFractionDigits:2})}T`:a>=1e9?`$${(a/1e9).toLocaleString("en-US",{maximumFractionDigits:2})}B`:a>=1e6?`$${(a/1e6).toLocaleString("en-US",{maximumFractionDigits:2})}M`:a>=1e3?`$${(a/1e3).toLocaleString("en-US",{maximumFractionDigits:2})}K`:`$${a.toLocaleString("en-US",{maximumFractionDigits:2})}`},ge=e=>{const a=Number(e||0);return`${a>0?"+":""}${a.toFixed(2)}%`},ye=e=>Number(e||0)>0?"▲":Number(e||0)<0?"▼":"—";let be=null;const we=()=>{be&&(clearInterval(be),be=null)};return t(()=>{r(),M.value=0,Z=!0,Promise.all([oe(),ce()])}),o(()=>{Z&&ce(),we(),be=setInterval(oe,6e4)}),c(we),i(we),(e,a)=>{const l=n,s=g,t=b,r=v("u-icon"),o=x,c=L;return d(),u(l,{class:"crypto-page"},{default:_(()=>[m(l,{class:"status-bar",style:f({height:M.value+"px"})},null,8,["style"]),m(l,{class:"navbar"},{default:_(()=>[m(s,{class:"navbar__title"},{default:_(()=>[y("加密行情")]),_:1}),m(A,{size:"compact",variant:"orb"})]),_:1}),Q.value?(d(),u(l,{key:1,class:"market-search"},{default:_(()=>[m(l,{class:"market-search__field"},{default:_(()=>[m(r,{name:"search",size:"32",color:"#98a2b3"}),m(o,{modelValue:q.value,"onUpdate:modelValue":a[0]||(a[0]=e=>q.value=e),class:"market-search__input",focus:R.value,placeholder:"搜索币种","placeholder-style":"color:#b5bdc9","confirm-type":"search"},null,8,["modelValue","focus"]),q.value?(d(),u(l,{key:0,class:"market-search__clear",onClick:a[1]||(a[1]=e=>q.value="")},{default:_(()=>[m(r,{name:"close-circle-fill",size:"28",color:"#b5bdc9"})]),_:1})):C("",!0)]),_:1}),m(s,{class:"market-search__cancel",onClick:_e},{default:_(()=>[y("取消")]),_:1})]),_:1})):(d(),u(l,{key:0,class:"market-tabs"},{default:_(()=>[m(t,{"scroll-x":"",class:"market-tabs__scroll","show-scrollbar":!1},{default:_(()=>[m(l,{class:"market-tabs__inner"},{default:_(()=>[(d(),w(p,null,k(ee,(e,a)=>m(l,{key:e.key,class:h(["market-tab",{"market-tab--active":G.value===a}]),onClick:e=>(e=>{G.value=e,1===e&&D.isLogin&&ce()})(a)},{default:_(()=>[m(s,null,{default:_(()=>[y($(e.label),1)]),_:2},1024)]),_:2},1032,["class","onClick"])),64))]),_:1})]),_:1}),m(l,{class:"market-tabs__search-trigger",onClick:ue},{default:_(()=>[m(r,{name:"search",size:"42",color:"#101828"})]),_:1})]),_:1})),m(l,{class:"market-overview"},{default:_(()=>[m(l,{class:"market-overview__headline"},{default:_(()=>[m(s,{class:"market-overview__headline-text"},{default:_(()=>[y("市场概览 · 数据更新于 "+$(W.value),1)]),_:1})]),_:1}),m(l,{class:"market-overview__metric market-overview__metric--share"},{default:_(()=>[m(s,{class:"market-overview__label"},{default:_(()=>[y("BTC 市值占比")]),_:1}),m(s,{class:"market-overview__value"},{default:_(()=>[y($(le.value),1)]),_:1})]),_:1}),m(l,{class:"market-overview__divider"}),m(l,{class:"market-overview__metric market-overview__metric--volume"},{default:_(()=>[m(s,{class:"market-overview__label"},{default:_(()=>[y("24h 总成交额")]),_:1}),m(s,{class:"market-overview__value"},{default:_(()=>[y($(se.value),1)]),_:1})]),_:1})]),_:1}),m(l,{class:"list-header"},{default:_(()=>[m(s,{class:"list-header__name"},{default:_(()=>[y("名称")]),_:1}),m(s,{class:"list-header__price"},{default:_(()=>[y("最新价")]),_:1}),m(s,{class:"list-header__change"},{default:_(()=>[y("24h涨跌")]),_:1}),m(l,{class:"list-header__favorite"})]),_:1}),m(t,{"scroll-y":"",class:"coin-list","refresher-enabled":"","refresher-triggered":J.value,onRefresherrefresh:ie},{default:_(()=>[H.value&&!P.value.length?(d(),u(l,{key:0,class:"state-view"},{default:_(()=>[m(l,{class:"state-view__loader"}),m(s,{class:"state-view__title"},{default:_(()=>[y("正在获取实时行情")]),_:1})]),_:1})):O.value&&!P.value.length?(d(),u(l,{key:1,class:"state-view"},{default:_(()=>[m(s,{class:"state-view__icon"},{default:_(()=>[y("!")]),_:1}),m(s,{class:"state-view__title"},{default:_(()=>[y("行情加载失败")]),_:1}),m(s,{class:"state-view__desc"},{default:_(()=>[y("请检查网络后重试")]),_:1}),m(l,{class:"state-view__button",onClick:oe},{default:_(()=>[m(s,null,{default:_(()=>[y("重新加载")]),_:1})]),_:1})]),_:1})):1!==G.value||F(D).isLogin?ae.value.length?(d(),u(l,{key:4},{default:_(()=>[(d(!0),w(p,null,k(ae.value,e=>(d(),u(l,{key:e.symbol,class:"coin-row",onClick:a=>(e=>{z({url:`/pages/crypto/crypto_detail?symbol=${e.symbol}`})})(e)},{default:_(()=>{return[m(l,{class:"coin-row__left"},{default:_(()=>[m(l,{class:"coin-row__logo"},{default:_(()=>[e.image&&!K.value.includes(e.symbol)?(d(),u(c,{key:0,class:"coin-row__logo-image",src:e.image,mode:"aspectFit",onError:a=>{return l=e.symbol,void(K.value.includes(l)||(K.value=[...K.value,l]));var l}},null,8,["src","onError"])):(d(),u(s,{key:1,class:"coin-row__logo-fallback"},{default:_(()=>[y($(e.symbol.slice(0,1)),1)]),_:2},1024))]),_:2},1024),m(l,{class:"coin-row__name"},{default:_(()=>[m(s,{class:"coin-row__symbol"},{default:_(()=>[y($(e.symbol),1)]),_:2},1024),m(s,{class:"coin-row__subtitle"},{default:_(()=>[y($(e.name_zh||e.name),1)]),_:2},1024)]),_:2},1024)]),_:2},1024),m(l,{class:"coin-row__price"},{default:_(()=>[m(s,{class:"coin-row__price-value"},{default:_(()=>[y($(de(e.current_price)),1)]),_:2},1024),m(s,{class:"coin-row__market-cap"},{default:_(()=>[y($(me(e.market_cap)),1)]),_:2},1024)]),_:2},1024),m(l,{class:h(["coin-row__badge",(a=e.price_change_percentage_24h,Number(a||0)>0?"coin-row__badge--up":Number(a||0)<0?"coin-row__badge--down":"coin-row__badge--flat")])},{default:_(()=>[m(s,{class:"coin-row__badge-value"},{default:_(()=>[y($(ge(e.price_change_percentage_24h)),1)]),_:2},1024),m(s,{class:"coin-row__badge-arrow"},{default:_(()=>[y($(ye(e.price_change_percentage_24h)),1)]),_:2},1024)]),_:2},1032,["class"]),m(l,{class:h(["coin-row__favorite",{"coin-row__favorite--active":ne(e.symbol)}]),onClick:S(a=>(async e=>{if(!D.isLogin)return void ve();if(E.value.includes(e))return;const a=ne(e);E.value=[...E.value,e],V.value=a?V.value.filter(a=>a!==e):[...V.value,e];try{a?await j(e):await I(e)}catch(l){V.value=a?[...V.value,e]:V.value.filter(a=>a!==e),console.error("[CryptoFavorite] update failed:",l)}finally{E.value=E.value.filter(a=>a!==e)}})(e.symbol),["stop"])},{default:_(()=>[m(s,null,{default:_(()=>[y($(ne(e.symbol)?"★":"☆"),1)]),_:2},1024)]),_:2},1032,["class","onClick"])];var a}),_:2},1032,["onClick"]))),128))]),_:1})):(d(),u(l,{key:3,class:"state-view"},{default:_(()=>[m(s,{class:"state-view__star"},{default:_(()=>[y("☆")]),_:1}),m(s,{class:"state-view__title"},{default:_(()=>[y($(te.value),1)]),_:1}),m(s,{class:"state-view__desc"},{default:_(()=>[y($(re.value),1)]),_:1})]),_:1})):(d(),u(l,{key:2,class:"state-view"},{default:_(()=>[m(s,{class:"state-view__star"},{default:_(()=>[y("☆")]),_:1}),m(s,{class:"state-view__title"},{default:_(()=>[y("登录后查看自选")]),_:1}),m(s,{class:"state-view__desc"},{default:_(()=>[y("收藏币种将自动同步到你的账号")]),_:1}),m(l,{class:"state-view__button",onClick:ve},{default:_(()=>[m(s,null,{default:_(()=>[y("去登录")]),_:1})]),_:1})]),_:1})),m(l,{class:"coin-list__bottom-space"})]),_:1},8,["refresher-triggered"])]),_:1})}}}),[["__scopeId","data-v-80d2d15c"]]);export{M as default};