1import{d as b,u as w,b as I,w as P,c as l,a as e,t as a,n as S,v as B,F as C,r as L,g as D,i as c,l as x,x as U,o as i,_ as E}from"./index-DthK1Gxf.js";import{a as R}from"./articles-ClKIg7IZ.js";import{A as T}from"./AdaptiveImage-BUJCfJai.js";const W={class:"articles-list-page"},z={class:"container"},F={class:"page-header"},N={class:"page-title"},V={class:"page-description"},M={class:"articles-filters"},Q={class:"search-box"},j=["placeholder"],q={key:0,class:"loading"},G={key:1,class:"empty-state"},H={key:2,class:"articles-list"},J=["onClick"],K={class:"article-item-image"},O=["alt"],X={class:"article-item-content"},Y={class:"article-item-title"},Z={class:"article-item-excerpt"},tt={class:"article-item-meta"},et={class:"article-date"},st={class:"article-views"},at={key:3,class:"pagination"},it=["disabled"],ot={class:"pagination-info"},lt=["disabled"],nt=b({__name:"ArticlesList",setup(ct){const v="/api".replace("/api","")||"",m=t=>t?t.startsWith("http://")||t.startsWith("https://")?t:t.startsWith("/api/")?`${v}${t}`:t.startsWith("/")?`${v}${t}`:t:"",f=U(),{locale:_}=w(),r=c([]),u=c(!0),p=c(""),o=c(1),$=c(10),d=c(1),h=async()=>{u.value=!0;try{const t=await R({page:o.value,pageSize:$.value,search:p.value||void 0,lang:_.value});r.value=t.articles,d.value=t.totalPages}catch(t){console.error("Failed to fetch articles:",t),r.value=[]}finally{u.value=!1}},y=()=>{o.value=1,h()},g=t=>{o.value=t,h(),window.scrollTo({top:0,behavior:"smooth"})},A=t=>{f.push(`/articles/${t}`)},k=t=>new Date(t).toLocaleDateString("zh-CN",{year:"numeric",month:"long",day:"numeric"});return I(()=>{h()}),P(_,()=>{h()}),(t,n)=>(i(),l("div",W,[e("div",z,[e("div",F,[e("h1",N,a(t.$t("articles.listTitle")),1),e("p",V,a(t.$t("articles.listDescription")),1)]),e("div",M,[e("div",Q,[S(e("input",{"onUpdate:modelValue":n[0]||(n[0]=s=>p.value=s),type:"text",placeholder:t.$t("articles.searchPlaceholder"),class:"search-input",onInput:y},null,40,j),[[B,p.value]])])]),u.value?(i(),l("div",q,a(t.$t("articles.loading")),1)):r.value.length===0?(i(),l("div",G,[e("p",null,a(t.$t("articles.noArticles")),1)])):(i(),l("div",H,[(i(!0),l(C,null,L(r.value,s=>(i(),l("article",{key:s.id,class:"article-item",onClick:dt=>A(s.id)},[e("div",K,[s.coverImage?(i(),x(T,{key:0,src:m(s.coverImage),alt:s.title,"max-width":200,"max-height":120},null,8,["src","alt"])):(i(),l("img",{key:1,src:"https://via.placeholder.com/200x120?text=Article",alt:s.title},null,8,O))]),e("div",X,[e("h3",Y,a(s.title),1),e("p",Z,a(s.excerpt),1),e("div",tt,[e("span",et,a(k(s.createdAt)),1),e("span",st,a(t.$t("articles.views",{count:s.views||0})),1)])])],8,J))),128))])),d.value>1?(i(),l("div",at,[e("button",{disabled:o.value===1,onClick:n[1]||(n[1]=s=>g(o.value-1)),class:"pagination-btn"},a(t.$t("articles.prevPage")),9,it),e("span",ot,a(t.$t("articles.pageInfo",{current:o.value,total:d.value})),1),e("button",{disabled:o.value===d.value,onClick:n[2]||(n[2]=s=>g(o.value+1)),class:"pagination-btn"},a(t.$t("articles.nextPage")),9,lt)])):D("",!0)])]))}}),vt=E(nt,[["__scopeId","data-v-73b1a997"]]);export{vt 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.