7 lines
6.1 KiB
JavaScript
7 lines
6.1 KiB
JavaScript
import{e as E,j as V,r as p,f as $,g as B,c as o,a as e,h as d,b as n,d as f,u as r,F,i as I,k as N,t as c,l as S,v as C,m as P,o as l,U}from"#entry";import{u as q}from"./Qy3ajxTk.js";import{L as z}from"./CUq_0rkE.js";import{C as H}from"./YJHbYJtA.js";import{S as M,T as O}from"./CGpRzXRB.js";import{N as J}from"./DAACT36i.js";import{A as K}from"./C8kQt0fa.js";/**
|
|
* @license lucide-vue-next v0.344.0 - ISC
|
|
*
|
|
* This source code is licensed under the ISC license.
|
|
* See the LICENSE file in the root directory of this source tree.
|
|
*/const W=E("PlusIcon",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]),G={class:"min-h-full py-16 bg-gray-50"},Q={class:"max-w-4xl mx-auto px-4 sm:px-6 lg:px-8"},R={class:"flex justify-between items-center mb-6"},X={key:0,class:"flex items-center justify-center py-12"},Y={key:1,class:"space-y-6"},Z={class:"flex justify-between items-start mb-4"},ee={class:"flex-1"},te={class:"text-2xl font-display font-bold text-gray-900 mb-2"},se={class:"flex items-center text-sm text-gray-500 space-x-4"},ae={class:"flex items-center"},le={class:"flex items-center"},oe={key:0,class:"flex items-center"},re={key:0,class:"flex space-x-2 ml-4"},ne=["onClick"],ie=["onClick"],de={class:"prose prose-lg max-w-none text-gray-700 whitespace-pre-wrap"},ce={key:0,class:"text-center py-12"},ue={key:0,class:"text-gray-400 text-sm mt-2"},me={class:"bg-white rounded-xl shadow-2xl max-w-3xl w-full p-8 max-h-[90vh] overflow-y-auto"},pe={class:"text-2xl font-display font-bold text-gray-900 mb-6"},ve=["disabled"],fe=["disabled"],ye={key:0,class:"flex items-center p-3 rounded-md bg-red-50 text-red-700 text-sm"},xe={class:"flex justify-end space-x-4 pt-4"},he=["disabled"],be=["disabled"],Me={__name:"news",setup(ge){const _=V(),x=p(!0),i=p(!1),h=p([]),y=p(!1),v=p(null),u=p(""),m=p({title:"",content:""}),b=$(()=>_.role==="admin"||_.role==="vorstand"),g=async()=>{x.value=!0;try{const s=await $fetch("/api/news");h.value=s.news}catch(s){console.error("Fehler beim Laden der News:",s)}finally{x.value=!1}},D=()=>{v.value=null,m.value={title:"",content:""},y.value=!0,u.value=""},L=s=>{v.value=s,m.value={title:s.title,content:s.content},y.value=!0,u.value=""},w=()=>{y.value=!1,v.value=null,u.value=""},T=async()=>{i.value=!0,u.value="";try{await $fetch("/api/news",{method:"POST",body:{id:v.value?.id,...m.value}}),w(),await g()}catch(s){u.value=s.data?.message||"Fehler beim Speichern der News."}finally{i.value=!1}},j=async s=>{if(confirm(`Möchten Sie die News "${s.title}" wirklich löschen?`))try{await $fetch("/api/news",{method:"DELETE",body:JSON.stringify({id:s.id}),headers:{"Content-Type":"application/json"}}),await g()}catch(t){console.error("Delete error:",t),alert("Fehler beim Löschen der News: "+(t.data?.message||t.message))}},k=s=>s?new Date(s).toLocaleDateString("de-DE",{year:"numeric",month:"long",day:"numeric",hour:"2-digit",minute:"2-digit"}):"";return B(()=>{g()}),q({title:"Interne News - Harheimer TC"}),(s,t)=>(l(),o("div",G,[e("div",Q,[e("div",R,[t[3]||(t[3]=e("div",null,[e("h1",{class:"text-4xl sm:text-5xl font-display font-bold text-gray-900 mb-2"}," Interne News "),e("div",{class:"w-24 h-1 bg-primary-600 mb-4"})],-1)),b.value?(l(),o("button",{key:0,onClick:D,class:"flex items-center px-4 py-2 bg-primary-600 hover:bg-primary-700 text-white font-semibold rounded-lg transition-colors"},[n(r(W),{size:20,class:"mr-2"}),t[2]||(t[2]=f(" News erstellen ",-1))])):d("",!0)]),x.value?(l(),o("div",X,[n(r(z),{size:40,class:"animate-spin text-primary-600"})])):(l(),o("div",Y,[(l(!0),o(F,null,I(h.value,a=>(l(),o("article",{key:a.id,class:"bg-white rounded-xl shadow-lg p-6 border border-gray-100"},[e("div",Z,[e("div",ee,[e("h2",te,c(a.title),1),e("div",se,[e("div",ae,[n(r(U),{size:16,class:"mr-1"}),f(" "+c(a.author),1)]),e("div",le,[n(r(H),{size:16,class:"mr-1"}),f(" "+c(k(a.created)),1)]),a.updated!==a.created?(l(),o("div",oe,[n(r(M),{size:16,class:"mr-1"}),f(" Aktualisiert: "+c(k(a.updated)),1)])):d("",!0)])]),b.value?(l(),o("div",re,[e("button",{onClick:A=>L(a),class:"p-2 text-blue-600 hover:bg-blue-50 rounded-lg transition-colors",title:"Bearbeiten"},[n(r(M),{size:20})],8,ne),e("button",{onClick:A=>j(a),class:"p-2 text-red-600 hover:bg-red-50 rounded-lg transition-colors",title:"Löschen"},[n(r(O),{size:20})],8,ie)])):d("",!0)]),e("div",de,c(a.content),1)]))),128)),h.value.length===0?(l(),o("div",ce,[n(r(J),{size:48,class:"mx-auto text-gray-400 mb-4"}),t[4]||(t[4]=e("p",{class:"text-gray-500 text-lg"},"Noch keine internen News vorhanden.",-1)),b.value?(l(),o("p",ue,' Klicken Sie auf "News erstellen", um die erste News zu veröffentlichen. ')):d("",!0)])):d("",!0)])),y.value?(l(),o("div",{key:2,class:"fixed inset-0 z-50 bg-black/50 flex items-center justify-center p-4",onClick:N(w,["self"])},[e("div",me,[e("h2",pe,c(v.value?"News bearbeiten":"News erstellen"),1),e("form",{onSubmit:N(T,["prevent"]),class:"space-y-4"},[e("div",null,[t[5]||(t[5]=e("label",{class:"block text-sm font-medium text-gray-700 mb-2"},"Titel *",-1)),S(e("input",{"onUpdate:modelValue":t[0]||(t[0]=a=>m.value.title=a),type:"text",required:"",class:"w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500",disabled:i.value},null,8,ve),[[C,m.value.title]])]),e("div",null,[t[6]||(t[6]=e("label",{class:"block text-sm font-medium text-gray-700 mb-2"},"Inhalt *",-1)),S(e("textarea",{"onUpdate:modelValue":t[1]||(t[1]=a=>m.value.content=a),rows:"12",required:"",class:"w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500",disabled:i.value},null,8,fe),[[C,m.value.content]])]),u.value?(l(),o("div",ye,[n(r(K),{size:20,class:"mr-2"}),f(" "+c(u.value),1)])):d("",!0),e("div",xe,[e("button",{type:"button",onClick:w,class:"px-6 py-2 border border-gray-300 text-gray-700 rounded-lg hover:bg-gray-50 transition-colors",disabled:i.value}," Abbrechen ",8,he),e("button",{type:"submit",class:"px-6 py-2 bg-primary-600 hover:bg-primary-700 text-white font-semibold rounded-lg transition-colors flex items-center",disabled:i.value},[i.value?(l(),P(r(z),{key:0,size:20,class:"animate-spin mr-2"})):d("",!0),e("span",null,c(i.value?"Speichert...":"Speichern"),1)],8,be)])],32)])])):d("",!0)])]))}};export{Me as default};
|