PageSourceSearch

https://www.etfinfo.tw/_nuxt/BelQ3pQV.js

js etfinfo.tw collected 2026-09-25 03:40:03 UTC 21,007 bytes, 1 lines download raw bytes

1import{d as G,T as K,R as Y,Y as j,x as L,w,k as n,_ as J,o as s,f as e,e as a,F as R,j as V,t as i,G as N,n as b,h as C,y as S,p as y,Z as H,q as z,u as Q,g as D,$ as ee,a0 as te,a1 as ne,m as X,v as se,a2 as oe,l as le,a3 as Z,P as ae,b as ie,i as re,r as ue,a4 as de}from"./DgKpLXVQ.js";import{u as ce}from"./CfTZUfdY.js";import{d as pe,f as W,a as ve,b as me,r as fe}from"./DCKqD10M.js";function ye(p=new Date){return p.toLocaleDateString("sv-SE",{timeZone:"Asia/Taipei"}).slice(0,7)}const be={key:0,class:"entry-onboarding"},ge={class:"calendar-example",role:"img","aria-label":"日曆示意:用日曆查看每日漲跌與每月累積,非實際損益"},_e={class:"example-week","aria-hidden":"true"},ke={key:1,class:"entry-results"},he={class:"month-result"},we={class:"profit-line"},$e={key:0},Te={class:"market-result"},Se={key:0},Ee={key:1},xe={key:2,class:"entry-description"},De={key:3,class:"entry-description"},Ae={class:"entry-footer"},Fe={key:0},Pe={key:1},Ce=G({__name:"InvestmentDashboardCard",props:{userId:{},sessionRevision:{},previewEmpty:{type:Boolean}},setup(p){const o=p,u=S(null),$=S(!0),d=S(!1);let m=0,g=null,h=null,f=0,_=!1;const k=y(()=>o.previewEmpty||u.value?.state==="empty"),A=y(()=>!o.previewEmpty&&u.value?.state==="ready"),F=y(()=>k.value?"加入第一檔持股":"查看持股與損益"),T=y(()=>A.value?u.value:null);function O(l,t=!1){return l==null||!Number.isFinite(l)?"—":`${t&&l>0?"+":""}${l.toLocaleString("zh-TW",{maximumFractionDigits:0})}`}function B(l){return l==null||!Number.isFinite(l)?"—":`${l>0?"+":""}${(l*100).toFixed(2)}%`}function E(l){return l==null||l===0?"":l>0?"positive":"negative"}function P(){h!=null&&clearTimeout(h),h=null}function U(){if(P(),_||!o.userId||typeof document>"u"||document.visibilityState!=="visible")return;const l=u.value?.refreshing&&f++<20?3e3:6e4;h=setTimeout(()=>{c(!1)},l)}async function c(l=!0){if(_)return;P();const t=++m;if(g&&H(g),g=new AbortController,(l||u.value?.month!==ye())&&(u.value=null),d.value=!1,$.value=!u.value,!o.userId){$.value=!1;return}const v=g,x=setTimeout(()=>{v.abort(new DOMException("The summary request timed out","TimeoutError"))},1e4),I=()=>clearTimeout(x);v.signal.addEventListener("abort",I,{once:!0});try{const q=await $fetch("/api/user/investments/summary",{signal:v.signal,retry:0});t===m&&(u.value=q,q.refreshing||(f=0))}catch{t===m&&(d.value=!0,u.value?.state==="empty"&&(u.value=null))}finally{I(),v.signal.removeEventListener("abort",I),t===m&&($.value=!1,U())}}function M(){document.visibilityState==="visible"?c(!1):P()}return K([()=>o.userId,()=>o.sessionRevision],()=>{f=0,c()},{immediate:!0}),Y(()=>document.addEventListener("visibilitychange",M)),j(()=>{_=!0,m+=1,g&&H(g),P(),document.removeEventListener("visibilitychange",M)}),(l,t)=>{const v=J;return s(),L(v,{to:n(k)?"/my/holdings?start=holding":"/my/holdings",class:"holdings-entry","aria-label":n(F),"aria-describedby":n(k)?"investment-start-note":void 0},{default:w(()=>[t[6]||(t[6]=e("div",{class:"entry-heading"},[e("div",{class:"entry-title"},[e("h2",null,"我的持股")]),e("span",{class:"entry-arrow","aria-hidden":"true"},"›")],-1)),n(k)?(s(),a("div",be,[t[2]||(t[2]=e("div",{class:"onboarding-copy"},[e("strong",null,"讓每一天的投資表現,看得見"),e("p",{id:"investment-start-note"},"先加入一檔就能開始,不用補齊過去每筆交易。"),e("small",null,"填入目前股數,成本可以稍後補。")],-1)),e("div",ge,[t[0]||(t[0]=e("span",{class:"example-caption"},"損益日曆示意",-1)),e("div",_e,[(s(),a(R,null,V(["一","二","三","四","五"],x=>e("span",{key:x},i(x),1)),64)),(s(),a(R,null,V(["↗","↘","↗","↗","↘"],(x,I)=>e("span",{key:I,class:N(["example-day",x==="↗"?"example-up":"example-down"])},i(x),3)),64))]),t[1]||(t[1]=e("small",null,"每日漲跌 · 每月累積",-1))])])):n(T)?(s(),a("div",ke,[e("div",he,[t[3]||(t[3]=e("span",null,"本月累積損益",-1)),e("div",we,[e("strong",{class:N(E(n(T).profitLoss))},i(O(n(T).profitLoss,!0)),3),e("span",{class:N(E(n(T).returnRate))},i(B(n(T).returnRate)),3)]),n(k)?b("",!0):(s(),a("small",$e,i(n(u)?.asOfDate?`統計至 ${n(u).asOfDate}`:"本月損益尚未更新"),1))]),e("div",Te,[t[4]||(t[4]=e("span",null,"參考市值",-1)),e("strong",null,i(O(n(T).marketValue)),1),n(k)?b("",!0):(s(),a(R,{key:0},[n(u)?.marketDate?(s(),a("small",Se,i(n(u).marketDate)+" 收盤價",1)):(s(),a("small",Ee,i(n(T).marketValue==null?"等待適用的收盤價":"依各標的最新可用收盤價"),1))],64))])])):n(d)?(s(),a("p",xe,"摘要暫時無法顯示,仍可前往查看與記錄持股。")):(s(),a("p",De,i(n($)?"正在讀取持股摘要…":"查看你的持股、買賣紀錄與損益日曆。"),1)),e("div",Ae,[!n(k)&&n(u)?.refreshing?(s(),a("small",Fe,"正在更新最新盤後資料")):n(A)?(s(),a("small",Pe,"盤後資料・參考試算")):b("",!0),e("span",{class:N(["entry-cta",{"entry-cta-primary":n(k)}])},[C(i(n(F))+" ",1),t[5]||(t[5]=e("span",{"aria-hidden":"true"},"→",-1))],2)])]),_:1},8,["to","aria-label","aria-describedby"])}}}
1),Re=z(Ce,[["__scopeId","data-v-3a889b3c"]]),Ie=new Set(["active","trialing","grace_period"]),Le=new Set(["revenuecat_ios","revenuecat_android"]);function Ne(p){if(!p)return null;try{const o=new URL(p);return o.protocol==="https:"||o.protocol==="http:"?o.toString():null}catch{return null}}function Oe(p){return!p||!Le.has(p.source??"")?"none":Ie.has(p.status)?"renewing":p.status==="canceled"?"canceled":"none"}function Ue(p){if(!p)return null;const o=Ne(p.managementUrl);return o||(p.source==="revenuecat_ios"?"https://apps.apple.com/account/subscriptions":p.source==="revenuecat_android"?"https://play.google.com/store/account/subscriptions":null)}function Me(p){if(!p)return null;const o=p instanceof Date?p:new Date(p);return Number.isFinite(o.getTime())?new Intl.DateTimeFormat("zh-TW",{year:"numeric",month:"numeric",day:"numeric",timeZone:"Asia/Taipei"}).format(o):null}const Be={class:"account-management","aria-labelledby":"account-management-title"},Ve={class:"account-delete-dialog",role:"dialog","aria-modal":"true","aria-label":"確認刪除帳號"},qe={key:0,class:"account-delete-subscription-check","aria-live":"polite"},We={key:1,class:"account-delete-subscription-warning"},Ge={key:2,class:"account-delete-subscription-canceled"},ze={key:0},He={key:1},Ze={key:3,class:"account-delete-subscription-warning"},Ke=["href"],Ye={key:5,class:"account-delete-acknowledgement"},je={key:6,class:"account-delete-error",role:"alert"},Je={class:"account-delete-actions"},Qe=["disabled"],Xe=["disabled"],et=G({__name:"AccountDeletionPanel",setup(p){const o=Q(),u=ce(),$=S(!1),d=S(!1),m=S(!1),g=S(null),h=S(null),f=y(()=>Oe(u.data.value)),_=y(()=>Ue(u.data.value)),k=y(()=>Me(u.data.value?.expiresAt)),A=y(()=>!u.pending.value&&(u.data.value===null||u.providerSyncSucceeded.value===!1||u.error.value!==null)),F=y(()=>f.value==="renewing"||A.value),T=y(()=>!u.pending.value&&(!F.value||m.value)),O=y(()=>u.data.value?.status==="trialing"?"Pro 試用仍會自動續訂":u.data.value?.status==="grace_period"?"Pro 訂閱目前在寬限期":"Pro 訂閱仍會自動續訂");async function B(){d.value=!1,m.value=!1,$.value=!0,u.refresh({syncProvider:!0,forceProviderSync:!0}),await Z(),h.value?.focus()}async function E(){o.pending.value||($.value=!1,await Z(),g.value?.focus())}async function P(){T.value&&(d.value=!0,await o.deleteAccount({acknowledgeActiveSubscription:m.value}),o.user.value?u.refresh({syncProvider:!0,forceProviderSync:!0}):$.value=!1)}return(U,c)=>{const M=le;return s(),a("section",Be,[c[8]||(c[8]=e("div",null,[e("h2",{id:"account-management-title"},"帳號管理"),e("p",null,"永久移除帳號與跨裝置同步資料。")],-1)),e("button",{ref_key:"triggerButton",ref:g,type:"button",class:"delete-account-link",onClick:B}," 刪除帳號 ",512),D(M,null,{default:w(()=>[(s(),L(ee,{to:"body"},[n($)?(s(),a("div",{key:0,class:"account-delete-backdrop",role:"presentation",onClick:ne(E,["self"]),onKeydown:te(E,["esc"])},[e("section",Ve,[c[5]||(c[5]=e("p",{class:"account-delete-kicker"},"帳號設定",-1)),c[6]||(c[6]=e("h2",null,"永久刪除帳號?",-1)),c[7]||(c[7]=e("p",null," 這會刪除 ETF資訊網帳號,以及網站與 App 同步的追蹤清單、投資組合與其他會員資料。此動作無法復原。 ",-1)),n(u).pending.value?(s(),a("p",qe," 正在確認目前的訂閱狀態… ")):n(f)==="renewing"?(s(),a("div",We,[e("strong",null,i(n(O)),1),c[1]||(c[1]=e("span",null,"刪除帳號不會取消 App Store 或 Google Play 訂閱,之後仍可能續訂扣款。建議先前往原購買平台取消訂閱。",-1))])):n(f)==="canceled"?(s(),a("div",Ge,[c[2]||(c[2]=e("strong",null,"Pro 已取消自動續訂",-1)),n(k)?(s(),a("span",ze,"目前可使用至 "+i(n(k))+";刪除帳號後 Pro 會立即失效。",1)):(s(),a("span",He,"刪除帳號後,剩餘的 Pro 使用權會立即失效。"))])):n(A)?(s(),a("div",Ze,[...c[3]||(c[3]=[e("strong",null,"目前無法確認訂閱狀態",-1),e("span",null,"若仍有 App Store 或 Google Play 訂閱,刪除帳號不會停止後續扣款。",-1)])])):b("",!0),n(f)!=="none"&&n(_)?(s(),a("a",{key:4,class:"account-delete-manage-link",href:n(_),target:"_blank",rel:"noopener noreferrer"}," 前往管理訂閱 ",8,Ke)):b("",!0),n(F)?(s(),a("label",Ye,[X(e("input",{"onUpdate:modelValue":c[0]||(c[0]=l=>se(m)?m.value=l:null),type:"checkbox"},null,512),[[oe,n(m)]]),c[4]||(c[4]=e("span",null,"我了解刪除 ETF資訊網帳號不會取消商店訂閱,且刪除後會立即失去 Pro 使用權。",-1))])):b("",!0),n(d)&&n(o).error.value?(s(),a("p",je,i(n(o).error.value),1)):b("",!0),e("div",Je,[e("button",{ref_key:"cancelButton",ref:h,type:"button",class:"account-delete-cancel",disabled:n(o).pending.value,onClick:E}," 取消 ",8,Qe),e("button",{type:"button",class:"account-delete-confirm",disabled:n(o).pending.value||!n(T),onClick:P},i(n(o).pending.value?"刪除中…":"永久刪除帳號"),9,Xe)])])],32)):b("",!0)]))]),_:1})])}}}),tt=z(et,[["__scopeId","data-v-1b7e8760"]]),nt=["data-app-promo-ready"],st={key:0,class:"muted"},ot={key:2,class:"state-panel","aria-live":"polite"},lt={class:"login-panel"},at={class:"login-actions"},it=["disabled"],rt=["disabled"],ut={key:0,class:"inline-error"},dt={key:4,class:"state-panel","aria-live":"polite"},ct={key:5,class:"state-panel error-state",role:"alert"},pt=["disabled"],vt={key:6,class:"state-panel","aria-live":"polite"},mt={key:7,class:"state-panel error-state",role:"alert"},ft={class:"summary-strip","aria-label":"我的資料摘要"},yt={class:"summary-item"},bt={class:"summary-item"},gt={class:"summary-item"},_t={class:"summary-item"},kt={key:0,class:"notice-bar"},ht={class:"section-block"},wt={key:0,class:"data-list"},$t={class:"security-label"},Tt={class:"row-detail"},St={key:1,class:"empty-row"},Et={key:2,class:"subsection"},xt={class:"subsection-heading"},Dt={class:"schedule-list"},At={key:0},Ft={class:"section-block"},Pt={class:"section-heading"},Ct={key:0,class:"data-list"},Rt={class:"security-label"},It={class:"row-detail"},Lt={key:1,class:"empty-row"},Nt={class:"section-block portfolio-section"},Ot={class:"section-heading"},Ut={class:"portfolio-summary"},Mt={key:0},Bt={key:1},Vt={class:"section-block"},qt={class:"tool-grid"},Wt=G({__name:"index",setup(p){const o=Q();ae();const u=y(()=>!1),$=S(!1),d=S(null),m=S(!1),g=S(null);let h=0,f=null;const _=y(()=>fe({mounted:$.value,authReady:o.ready.value,userId:o.user.value?.uid??null,sessionReady:o.sessionReady.value,authPending:o.pending.value})),k=y(()=>d.value?.attention.slice(0,5)??[]),A=y(()=>d.value?.upcomingDividends.slice(0,3)??[]),F=y(()=>d.value?.watchlistPreview??[]),T=y(()=>_.value==="signed-out"||!!d.value);Y(()=>{$.value=!0});function O(l){return typeof l=="number"&&Number.isFinite(l)?l.toFixed(2):"—"}function B(l){return typeof l!="number"||!Number.isFinite(l)?"—":`${l>=0?"+":""}${l.toFixed(2)}%`}function E(l){return l.amount==null||!Number.isFinite(l.amount)?null:`$${l.amount.toFixed(4).replace(/0+$/,"").replace(/\.$/,"")}`}function P(l){return l.type==="price_move"?l.changePct>=0?"up":"down":l.type==="active_change"&&l.netAmount!=null?l.netAmount>=0?"up":"down":"neutral"}async function U(){const l=o.user.value?.uid;if(!l)return;const t=++h;m.value=!0,g.value=null;try{const v=await $fetch("/api/user/dashboard");t===h&&o.user.value?.uid===l&&(d.value=v,de("my_dashboard"))}catch{t===h&&o.user.value?.uid===l&&(d.value=null,g.value="目前無法取得你的資料,請稍後重試。")}finally{t===h&&(m.value=!1)}}function c(){f&&clearTimeout(f),d.value||(m.value=!0),f=setTimeout(()=>{f=null,U()},80)}async function M(){await o.refreshSession()&&c()}
1return K([()=>o.ready.value,()=>o.user.value?.uid??null,()=>o.sessionReady.value,()=>o.sessionRevision.value],([l,t,v])=>{if((!l||!t||!v)&&f&&(clearTimeout(f),f=null),!t){h+=1,d.value=null,g.value=null,m.value=!1;return}!l||!v||c()},{immediate:!0}),j(()=>{f&&clearTimeout(f)}),ie({title:"我的|ETF資訊網",description:"記錄個股與 ETF 持股,查看投資損益、追蹤異動與近期配息。",robots:"noindex,nofollow"}),(l,t)=>{const v=J,x=Re,I=tt,q=ue("login-source");return s(),a("section",{class:"shell my-page","data-app-promo-ready":n(T)?"my":void 0},[t[31]||(t[31]=e("header",{class:"page-header"},[e("p",{class:"eyebrow"},"MEMBER"),e("h1",null,"我的"),e("p",{class:"lead"},"把追蹤異動、近期行程與投資工具收在同一個地方。")],-1)),n(u)&&n(_)==="ready"?(s(),a("p",st,[t[3]||(t[3]=C(" 目前預覽未加入持股的引導畫面,不會更動你的資料。 ",-1)),D(v,{to:"/my"},{default:w(()=>[...t[2]||(t[2]=[C("回到實際資料 →",-1)])]),_:1})])):b("",!0),n(_)==="ready"?(s(),L(x,{key:1,"user-id":n(o).user.value?.uid??"","session-revision":n(o).sessionRevision.value,"preview-empty":n(u)},null,8,["user-id","session-revision","preview-empty"])):b("",!0),n(_)==="auth-loading"?(s(),a("div",ot,[...t[4]||(t[4]=[e("span",{class:"loading-dot"},null,-1),e("p",null,"正在確認登入狀態",-1)])])):n(_)==="signed-out"?(s(),a(R,{key:3},[X((s(),a("section",lt,[t[5]||(t[5]=e("div",null,[e("p",{class:"section-kicker"},"跨裝置同步"),e("h2",null,"登入後查看你的 ETF 總覽"),e("p",null,"網站與 App 使用同一份追蹤清單,也能載入已儲存的投資組合。")],-1)),e("div",at,[e("button",{class:"btn btn-primary",type:"button",disabled:n(o).pending.value,onClick:t[0]||(t[0]=(...r)=>n(o).signInWithGoogle&&n(o).signInWithGoogle(...r))},"使用 Google 登入",8,it),e("button",{class:"btn btn-outline",type:"button",disabled:n(o).pending.value,onClick:t[1]||(t[1]=(...r)=>n(o).signInWithApple&&n(o).signInWithApple(...r))},"使用 Apple 登入",8,rt)]),n(o).error.value?(s(),a("p",ut,i(n(o).error.value),1)):b("",!0)])),[[q,"my_dashboard"]]),t[6]||(t[6]=re('<section class="section-block" data-v-7b77c54d><div class="section-heading" data-v-7b77c54d><div data-v-7b77c54d><p class="section-kicker" data-v-7b77c54d>登入後可用</p><h2 data-v-7b77c54d>你的分析工具</h2></div></div><div class="tool-grid" data-v-7b77c54d><article class="tool-item" data-v-7b77c54d><div data-v-7b77c54d><h3 data-v-7b77c54d>我的持股</h3><p data-v-7b77c54d>記錄個股與 ETF 持股,用日曆查看每日、每月的投資表現。</p></div><span data-v-7b77c54d>登入後使用</span></article><article class="tool-item" data-v-7b77c54d><div data-v-7b77c54d><h3 data-v-7b77c54d>ETF 多檔比較</h3><p data-v-7b77c54d>一次比較最多 5 檔 ETF 的報酬、風險與配息。</p></div><span data-v-7b77c54d>登入後使用</span></article><article class="tool-item" data-v-7b77c54d><div data-v-7b77c54d><h3 data-v-7b77c54d>投組分析</h3><p data-v-7b77c54d>儲存多組投資組合,查看配置、回測與配息現金流。</p></div><span data-v-7b77c54d>登入後使用</span></article></div></section>',1))],64)):n(_)==="session-loading"?(s(),a("div",dt,[...t[7]||(t[7]=[e("span",{class:"loading-dot"},null,-1),e("p",null,"正在連接雲端資料",-1)])])):n(_)==="session-error"?(s(),a("div",ct,[e("p",null,i(n(o).error.value||"登入已完成,但雲端同步連線暫時失敗。"),1),e("button",{class:"btn btn-outline btn-sm",type:"button",disabled:n(o).pending.value,onClick:M},"重新連線",8,pt)])):n(m)&&!n(d)?(s(),a("div",vt,[...t[8]||(t[8]=[e("span",{class:"loading-dot"},null,-1),e("p",null,"正在整理你的資料",-1)])])):n(g)?(s(),a("div",mt,[e("p",null,i(n(g)),1),e("button",{class:"btn btn-outline btn-sm",type:"button",onClick:U},"重新載入")])):n(d)?(s(),a(R,{key:8},[e("div",ft,[e("div",yt,[e("strong",null,i(n(d).summary.trackedEtfCount),1),t[9]||(t[9]=e("span",null,"追蹤 ETF",-1))]),e("div",bt,[e("strong",null,i(n(d).summary.changedEtfCount),1),t[10]||(t[10]=e("span",null,"今日異動",-1))]),e("div",gt,[e("strong",null,i(n(d).summary.upcomingDividendCount),1),t[11]||(t[11]=e("span",null,"7 日配息",-1))]),e("div",_t,[e("strong",null,i(n(d).portfolioSummary.count),1),t[12]||(t[12]=e("span",null,"儲存投組",-1))])]),n(d).partialErrors.length?(s(),a("div",kt,[t[13]||(t[13]=e("span",null,"部分資料暫時無法更新",-1)),e("button",{type:"button",onClick:U},"重試")])):b("",!0),e("section",ht,[t[18]||(t[18]=e("div",{class:"section-heading"},[e("div",null,[e("p",{class:"section-kicker"},"TODAY"),e("h2",null,"需要注意")])],-1)),n(k).length?(s(),a("div",wt,[(s(!0),a(R,null,V(n(k),r=>(s(),L(v,{key:`${r.type}-${r.code}-${r.date}`,to:n(ve)(r),class:"data-row"},{default:w(()=>[e("div",$t,[e("strong",null,i(r.code),1),e("span",null,i(r.name||"ETF"),1)]),e("div",Tt,[e("strong",{class:N(P(r))},i(n(pe)(r)),3),e("span",null,i(n(W)(r.date)),1)]),t[14]||(t[14]=e("span",{class:"row-arrow","aria-hidden":"true"},"›",-1))]),_:2},1032,["to"]))),128))])):(s(),a("div",St,[...t[15]||(t[15]=[e("strong",null,"目前沒有需要特別注意的異動",-1),e("span",null,"追蹤 ETF 有新的持股變化或近期事件時會顯示在這裡。",-1)])])),n(A).length?(s(),a("div",Et,[e("div",xt,[t[17]||(t[17]=e("h3",null,"近期行程",-1)),D(v,{to:"/calendar"},{default:w(()=>[...t[16]||(t[16]=[C("查看配息日曆",-1)])]),_:1})]),e("div",Dt,[(s(!0),a(R,null,V(n(A),r=>(s(),L(v,{key:`${r.type}-${r.code}-${r.date}`,to:r.route,class:"schedule-item"},{default:w(()=>[e("span",{class:N(["event-tag",r.type])},i(n(me)(r.type)),3),e("strong",null,i(r.code),1),e("span",null,i(n(W)(r.date)),1),E(r)?(s(),a("b",At,i(E(r)),1)):b("",!0)]),_:2},1032,["to"]))),128))])])):b("",!0)]),e("section",Ft,[e("div",Pt,[t[20]||(t[20]=e("div",null,[e("p",{class:"section-kicker"},"WATCHLIST"),e("h2",null,"我的追蹤")],-1)),D(v,{to:"/watchlist",class:"section-link"},{default:w(()=>[...t[19]||(t[19]=[C("全部追蹤",-1)])]),_:1}
1)]),n(F).length?(s(),a("div",Ct,[(s(!0),a(R,null,V(n(F),r=>(s(),L(v,{key:r.code,to:r.route,class:"data-row watchlist-row"},{default:w(()=>[e("div",Rt,[e("strong",null,i(r.code),1),e("span",null,i(r.name||"ETF"),1)]),e("div",It,[e("strong",null,i(O(r.price)),1),e("span",{class:N({up:(r.changePct??0)>0,down:(r.changePct??0)<0})},i(B(r.changePct)),3)]),t[21]||(t[21]=e("span",{class:"row-arrow","aria-hidden":"true"},"›",-1))]),_:2},1032,["to"]))),128))])):(s(),a("div",Lt,[t[23]||(t[23]=e("strong",null,"還沒有追蹤 ETF",-1)),t[24]||(t[24]=e("span",null,"加入追蹤後,這裡會整理價格、異動與近期配息。",-1)),D(v,{to:"/etf",class:"btn btn-primary btn-sm"},{default:w(()=>[...t[22]||(t[22]=[C("搜尋 ETF",-1)])]),_:1})]))]),e("section",Nt,[e("div",Ot,[t[26]||(t[26]=e("div",null,[e("p",{class:"section-kicker"},"PORTFOLIO"),e("h2",null,"投組分析")],-1)),D(v,{to:"/portfolio",class:"section-link"},{default:w(()=>[...t[25]||(t[25]=[C("管理投組",-1)])]),_:1})]),e("div",Ut,[e("div",null,[e("strong",null,i(n(d).portfolioSummary.count),1),t[27]||(t[27]=e("span",null,"組已儲存",-1))]),n(d).portfolioSummary.latestUpdatedAt?(s(),a("p",Mt,"最近更新 "+i(n(W)(n(d).portfolioSummary.latestUpdatedAt)),1)):(s(),a("p",Bt,"建立投資組合後,可查看配置、回測與配息現金流。")),D(v,{to:"/portfolio",class:"btn btn-outline btn-sm"},{default:w(()=>[C(i(n(d).portfolioSummary.count?"開啟投組":"建立第一組投組"),1)]),_:1})])]),e("section",Vt,[t[30]||(t[30]=e("div",{class:"section-heading"},[e("div",null,[e("p",{class:"section-kicker"},"TOOLS"),e("h2",null,"分析工具")])],-1)),e("div",qt,[D(v,{to:"/compare/multi",class:"tool-item tool-link"},{default:w(()=>[...t[28]||(t[28]=[e("div",null,[e("h3",null,"ETF 多檔比較"),e("p",null,"比較最多 5 檔 ETF 的報酬、風險與配息表現。")],-1),e("span",{"aria-hidden":"true"},"›",-1)])]),_:1}),D(v,{to:"/portfolio",class:"tool-item tool-link"},{default:w(()=>[...t[29]||(t[29]=[e("div",null,[e("h3",null,"投組分析"),e("p",null,"調整權重、查看回測,並儲存不同的配置方案。")],-1),e("span",{"aria-hidden":"true"},"›",-1)])]),_:1})])])],64)):b("",!0),n(_)==="ready"?(s(),L(I,{key:9})):b("",!0)],8,nt)}}}),Zt=z(Wt,[["__scopeId","data-v-7b77c54d"]]);export{Zt as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.