1import{_ as V,r as N,f as s,b as e,A as k,F as h,L as P,G as B,M as R,E as H,x as O,h as g,z as u,e as z,u as y,w as d,t as n,m as x,l as $,k as F,s as G}from"../chunks/chunk-D6Oav43O.js";import{n as _}from"../chunks/chunk-lzWkO0SH.js";import"../chunks/chunk-D1JYe4Qp.js";import{a as S}from"../chunks/chunk-pJ2yq5Pf.js";/* empty css *//* empty css *//* empty css *//* empty css */import"../chunks/chunk-BwNI8fUT.js";const q={class:"blog-admin"},I={class:"md3-card blog-card"},K={key:0,class:"md3-loading"},J=["innerHTML"],Q={class:"md3-toolbar"},W={class:"tools"},X={class:"md3-search",style:{flex:"1 1 280px"}},Y={class:"md3-pgsize"},Z={class:"content"},ee={key:0,class:"md3-loading"},te=["innerHTML"],ae={key:0,class:"empty"},oe={key:1,class:"md3-list"},ie={class:"info"},se={class:"name"},ne={key:0,class:"tag-pinned"},le={class:"meta"},de={class:"md3-ops"},re=["onClick"],ue=["onClick"],ce={key:0,class:"md3-pager"},pe=["disabled"],ve={class:"md3-page-info"},me=["disabled"],fe={__name:"+Page",setup(ye){const b=d(!0),m=d(!1),p=d(""),i=d(1),v=d(10),T=d(0),c=d(1),f=d([]);async function C(){const a=await S("/api/user/info",{method:"GET"}),t=await a.json().catch(()=>({}));return!a.ok||!t?.data?.users?.admin?(await _("/admin/login"),!1):(b.value=!1,!0)}function D(a){try{return new Date(a).toLocaleString()}catch{return a}}async function r(){m.value=!0;try{const a=new URLSearchParams({page:String(i.value),pageSize:String(v.value)});p.value&&a.set("q",p.value);const t=await S(`/api/blog?${a.toString()}`,{method:"GET"}),o=await t.json().catch(()=>({}));if(!t.ok)throw new Error(o?.message||"Load failed");const l=o?.data||{};f.value=l.items||[],i.value=l.page||1,v.value=l.pageSize||10,T.value=l.total||0,c.value=l.totalPages||1}catch(a){await y({type:"alert",title:"Error",content:String(a?.message||a)})}finally{m.value=!1}}function w(){i.value=1,r()}function A(){i.value=1,r()}function E(){i.value>1&&(i.value-=1,r())}function U(){i.value<c.value&&(i.value+=1,r())}function j(){_("/admin/blog/new")}function L(a){_(`/admin/blog/${a.id}`)}async function M(a){if(await y({type:"confirm",title:"Confirm",content:`Delete post "${a.title}"?`,cancelText:"Cancel",okText:"Delete"})!=="ok")return;const o=await S("/api/blog/delete",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:a.id})}),l=await o.json().catch(()=>({}));if(!o.ok){await y({type:"alert",title:"Error",content:l?.message||"Delete failed"});return}await r()}return N(async()=>{await C()&&await r()}),(a,t)=>(n(),s("div",q,[e("div",I,[b.value?(n(),s("div",K,[e("div",{class:"spinner",innerHTML:k(x)},null,8,J)])):(n(),s(h,{key:1},[e("header",Q,[t[5]||(t[5]=e("div",{class:"titles"},[e("h1",{class:"md3-title"},"Blogs"),e("p",{class:"md3-subtitle"},"Search, create, edit and delete posts")],-1)),e("div",W,[e("div",X,[t[2]||(t[2]=e("span",{class:"material-icons-round"},"search",-1)),P(e("input",{"onUpdate:modelValue":t[0]||(t[0]=o=>p.value=o),type:"search",placeholder:"Search title or content",onKeyup:R(w,["enter"])},null,544),[[B,p.value,void 0,{trim:!0}]]),e("button",{class:"md3-btn md3-btn--filled",onClick:w},"Search")]),e("div",Y,[t[4]||(t[4]=e("label",null,"Page size",-1)),P(e("select",{"onUpdate:modelValue":t[1]||(t[1]=o=>v.value=o),onChange:A},[...t[3]||(t[3]=[e("option",{value:10},"10",-1),e("option",{value:20},"20",-1),e("option",{value:30},"30",-1),e("option",{value:50},"50",-1)])],544),[[H,v.value,void 0,{number:!0}]])]),e("button",{class:"md3-btn md3-btn--tonal add",onClick:j},"New Post")])]),e("div",Z,[m.value?(n(),s("div",ee,[e("div",{class:"spinner",innerHTML:k(x)},null,8,te)])):(n(),s(h,{key:1},[f.value.length===0?(n(),s("div",ae,"No posts.")):(n(),s("div",oe,[(n(!0),s(h,null,O(f.value,o=>(n(),s("div",{class:"md3-row",key:o.id},[e("div",ie,[e("div",se,[g(u(o.title)+" ",1),o.pinned?(n(),s("span",ne,"Pinned")):z("v-if",!0)]),e("div",le,"#"+u(o.id)+" · "+u(D(o.createdAt)),1)]),e("div",de,[e("button",{class:"md3-btn md3-btn--outlined",onClick:l=>L(o)},"Edit",8,re),e("button",{class:"md3-btn md3-btn--outlined",onClick:l=>M(o)},"Delete",8,ue)])]))),128))]))],64))]),c.value>1?(n(),s("footer",ce,[e("button",{class:"md3-btn md3-btn--outlined",disabled:i.value<=1,onClick:E},[...t[6]||(t[6]=[e("span",{class:"material-icons-round"},"chevron_left",-1),g(" Prev ",-1)])],8,pe),e("div",ve,"Page "+u(i.value)+" / "+u(c.value)+" · "+u(T.value)+" items",1),e("button",{class:"md3-btn md3-btn--outlined",disabled:i.value>=c.value,onClick:U},[...t[7]||(t[7]=[g(" Next ",-1),e("span",{class:"material-icons-round"},"chevron_right",-1)])],8,me)])):z("v-if",!0)],64))])]))}},he=V(fe,[["__scopeId","data-v-35ec7f25"]]),ge=Object.freeze(Object.defineProperty({__proto__:null,default:he},Symbol.toStringTag,{value:"Module"})),Ce={hasServerOnlyHook:{type:"computed",definedAtData:null,valueSerialized:{type:"js-serialized",value:!1}},isClientRuntimeLoaded:{type:"computed",definedAtData:null,valueSerialized:{type:"js-serialized",value:!0}},onBeforeRenderEnv:{type:"computed",definedAtData:null,valueSerialized:{type:"js-serialized",value:null}},dataEnv:{type:"computed",definedAtData:null,valueSerialized:{type:"js-serialized",value:null}},guardEnv:{type:"computed",definedAtData:null,valueSerialized:{type:"js-serialized",value:null}},onRenderClient:{type:"standard",definedAtData:{filePathToShowToUser:"vike-vue/__internal/integration/onRenderClient",fileExportPathToShowToUser:[]},valueSerialized:{type:"pointer-import",value:G}},Page:{type:"standard",definedAtData:{filePathToShowToUser:"/src/pages/admin/blog/+Page.vue",f
1ileExportPathToShowToUser:[]},valueSerialized:{type:"plus-file",exportValues:ge}},hydrationCanBeAborted:{type:"standard",definedAtData:{filePathToShowToUser:"vike-vue/config",fileExportPathToShowToUser:["default","hydrationCanBeAborted"]},valueSerialized:{type:"js-serialized",value:!0}},Layout:{type:"cumulative",definedAtData:[{filePathToShowToUser:"/src/pages/+Layout.vue",fileExportPathToShowToUser:[]}],valueSerialized:[{type:"plus-file",exportValues:F}]},title:{type:"standard",definedAtData:{filePathToShowToUser:"/src/pages/+config.js",fileExportPathToShowToUser:["default","title"]},valueSerialized:{type:"js-serialized",value:"AviumUI"}},onCreateApp:{type:"cumulative",definedAtData:[{filePathToShowToUser:"/src/pages/+onCreateApp.js",fileExportPathToShowToUser:[]}],valueSerialized:[{type:"plus-file",exportValues:$}]}};export{Ce as configValuesSerialized};
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.