2 lines
14 KiB
JavaScript
2 lines
14 KiB
JavaScript
import{e as q,f as D,g as E,c as r,a as e,t as a,i as t,d as S,y as m,C as H,A as P,F as w,r as J,x as R,z as v,j as g,l as u,h as I,J as G,o as d,k as K}from"./BIbQr1Hg.js";const Q={class:"mb-8 flex items-center justify-between"},W={class:"text-2xl font-bold text-white"},X={class:"text-slate-400 mt-1"},Y={class:"mb-6"},Z={class:"flex items-center gap-3 flex-wrap"},ee={class:"text-sm text-slate-400"},te={value:null},se=["value"],oe={key:0,class:"flex items-center justify-center py-20"},ie={class:"text-slate-400 flex items-center gap-3"},ne={key:1,class:"bg-rose-500/10 border border-rose-500/30 rounded-xl p-6 mb-8"},ae={class:"text-rose-400"},le={key:0,class:"bg-slate-800 rounded-xl border border-slate-700 p-12 text-center"},re={class:"text-slate-400"},de={key:1,class:"grid grid-cols-1 lg:grid-cols-2 gap-4"},ce={class:"flex items-start justify-between mb-3"},ue={class:"text-lg font-semibold text-white"},me={key:0,class:"text-sm text-slate-400 mt-1 line-clamp-2"},fe={class:"space-y-2 text-sm text-slate-400 mb-4"},pe={class:"flex items-center gap-2"},ge={class:"flex items-center gap-2"},_e={key:0,class:"mb-4"},be={class:"text-sm"},ve={class:"text-indigo-400 cursor-pointer hover:text-indigo-300"},xe={class:"mt-2 p-3 bg-slate-900 rounded-lg text-xs text-slate-300 overflow-x-auto"},he={class:"flex items-center gap-2 pt-2 border-t border-slate-700/50"},ke=["onClick"],we={key:3,class:"fixed inset-0 z-50 flex items-center justify-center p-4"},ye={class:"relative bg-slate-800 rounded-xl border border-slate-700 w-full max-w-lg p-6 shadow-2xl max-h-[90vh] overflow-y-auto"},Ce={class:"text-lg font-semibold text-white mb-6"},Me={class:"block text-sm font-medium text-slate-300 mb-1"},je=["placeholder"],Ve={class:"block text-sm font-medium text-slate-300 mb-1"},Se=["placeholder"],He={class:"block text-sm font-medium text-slate-300 mb-1"},Je={value:"",disabled:""},Be=["value"],Ue={class:"block text-sm font-medium text-slate-300 mb-1"},ze={class:"block text-sm font-medium text-slate-300 mb-1"},$e={class:"block text-sm font-medium text-slate-300 mb-1"},Ae={value:"draft"},Fe={value:"active"},Le={value:"completed"},Ne={value:"cancelled"},Oe={class:"block text-sm font-medium text-slate-300 mb-1"},Te=["placeholder"],qe={key:0,class:"text-xs text-rose-400 mt-1"},De={key:0,class:"bg-rose-500/10 border border-rose-500/30 rounded-lg p-3"},Ee={class:"text-sm text-rose-400"},Pe={class:"flex items-center justify-end gap-3 pt-2"},Re=["disabled"],Ie={key:0,class:"w-4 h-4 animate-spin",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Qe=q({__name:"competitions",setup(Ge){const{t:i}=D(),y=u(!0),C=u(!1),_=u(!1),x=u(!1),M=u([]),j=u([]),c=u(null),b=u(null),p=u(""),f=u(!1),o=G({name:"",description:"",season_id:"",start_date:"",end_date:"",status:"draft",rulesJson:""});function h(){const s=I("access_token").value;return s?{Authorization:`Bearer ${s}`}:{}}function B(l){return l?new Date(l).toLocaleDateString("hu-HU",{year:"numeric",month:"long",day:"numeric"}):""}function A(l){switch(l){case"active":return"bg-emerald-500/10 text-emerald-400 border border-emerald-500/30";case"draft":return"bg-slate-700 text-slate-400 border border-slate-600";case"completed":return"bg-blue-500/10 text-blue-400 border border-blue-500/30";case"cancelled":return"bg-rose-500/10 text-rose-400 border border-rose-500/30";default:return"bg-slate-700 text-slate-400 border border-slate-600"}}function F(l){switch(l){case"active":return i("gamification.competitions.status_active");case"draft":return i("gamification.competitions.status_draft");case"completed":return i("gamification.competitions.status_completed");case"cancelled":return i("gamification.competitions.status_cancelled");default:return l}}function U(){o.name="",o.description="",o.season_id="",o.start_date="",o.end_date="",o.status="draft",o.rulesJson="",p.value="",f.value=!1}function z(){c.value=null,U(),x.value=!0}function L(l){c.value=l,o.name=l.name,o.description=l.description||"",o.season_id=l.season_id,o.start_date=l.start_date,o.end_date=l.end_date,o.status=l.status,o.rulesJson=l.rules?JSON.stringify(l.rules,null,2):"",p.value="",f.value=!1,x.value=!0}function V(){x.value=!1,c.value=null,U()}function N(){if(!o.rulesJson.trim())return null;try{const l=JSON.parse(o.rulesJson);return f.value=!1,l}catch{return f.value=!0,null}}async function O(){try{const l=await $fetch("/api/v1/admin/gamification/seasons",{headers:h()});M.value=l}catch(l){console.error("Failed to fetch seasons:",l)}}async function k(){y.value=!0,C.value=!1;try{const l={};b.value&&(l.season_id=b.value);const s=new URLSearchParams(l).toString(),n=`/api/v1/admin/gamification/competitions${s?`?${s}`:""}`,$=await $fetch(n,{headers:h()});j.value=$}catch(l){console.error("Failed to fetch competitions:",l),C.value=!0}finally{y.value=!1}}async function T(){_.value=!0,p.value="";let l=null;if(o.rulesJson.trim()&&(l=N(),f.value)){_.value=!1;return}try{if(c.value){const s={};o.name!==c.value.name&&(s.name=o.name),o.description!==(c.value.description||"")&&(s.description=o.description||null),o.season_id!==c.value.season_id&&(s.season_id=o.season_id),o.start_date!==c.value.start_date&&(s.start_date=o.start_date),o.end_date!==c.value.end_date&&(s.end_date=o.end_date),o.status!==c.value.status&&(s.status=o.status),l!==null&&(s.rules=l),Object.keys(s).length>0&&await $fetch(`/api/v1/admin/gamification/competitions/${c.value.id}`,{method:"PUT",headers:{...h(),"Content-Type":"application/json"},body:s})}else await $fetch("/api/v1/admin/gamification/competitions",{method:"POST",headers:{...h(),"Content-Type":"application/json"},body:{name:o.name,description:o.description||null,season_id:o.season_id,start_date:o.start_date,end_date:o.end_date,status:o.status,rules:l}});V(),await k()}catch(s){console.error("Failed to save competition:",s),p.value=s?.data?.detail||s?.message||i("gamification.competitions.save_error")}finally{_.value=!1}}return E(async()=>{await O(),await k()}),(l,s)=>(d(),r("div",null,[e("div",Q,[e("div",null,[e("h1",W,a(t(i)("gamification.competitions.title")),1),e("p",X,a(t(i)("gamification.competitions.subtitle")),1)]),e("button",{class:"flex items-center gap-2 px-4 py-2 bg-indigo-600 hover:bg-indigo-500 text-white text-sm font-medium rounded-lg transition",onClick:z},[s[8]||(s[8]=e("svg",{class:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 4v16m8-8H4"})],-1)),S(" "+a(t(i)("gamification.competitions.create")),1)])]),e("div",Y,[e("div",Z,[e("label",ee,a(t(i)("gamification.competitions.season_filter")),1),m(e("select",{"onUpdate:modelValue":s[0]||(s[0]=n=>P(b)?b.value=n:null),class:"px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white text-sm focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:border-transparent",onChange:k},[e("option",te,a(t(i)("gamification.competitions.all_seasons")),1),(d(!0),r(w,null,J(t(M),n=>(d(),r("option",{key:n.id,value:n.id},a(n.name)+" "+a(n.is_active?t(i)("gamification.competitions.active_badge"):""),9,se))),128))],544),[[H,t(b)]])])]),t(y)?(d(),r("div",oe,[e("div",ie,[s[9]||(s[9]=e("svg",{class:"w-5 h-5 animate-spin",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"})],-1)),e("span",null,a(t(i)("gamification.competitions.loading")),1)])])):t(C)?(d(),r("div",ne,[e("p",ae,a(t(i)("gamification.competitions.error")),1),e("button",{class:"mt-2 text-sm text-rose-300 hover:text-rose-200 underline",onClick:k},a(t(i)("gamification.competitions.retry")),1)])):(d(),r(w,{key:2},[t(j).length===0?(d(),r("div",le,[s[10]||(s[10]=e("svg",{class:"w-12 h-12 mx-auto text-slate-600 mb-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 100 4 2 2 0 000-4z"})],-1)),e("p",re,a(t(i)("gamification.competitions.no_items")),1),e("button",{class:"mt-4 px-4 py-2 bg-indigo-600 hover:bg-indigo-500 text-white text-sm font-medium rounded-lg transition",onClick:z},a(t(i)("gamification.competitions.create_first")),1)])):(d(),r("div",de,[(d(!0),r(w,null,J(t(j),n=>(d(),r("div",{key:n.id,class:"bg-slate-800 rounded-xl border border-slate-700 p-6 hover:border-slate-600 transition"},[e("div",ce,[e("div",null,[e("h3",ue,a(n.name),1),n.description?(d(),r("p",me,a(n.description),1)):g("",!0)]),e("span",{class:K(["px-2.5 py-0.5 rounded-full text-xs font-medium flex-shrink-0 ml-2",A(n.status)])},a(F(n.status)),3)]),e("div",fe,[e("div",pe,[s[11]||(s[11]=e("svg",{class:"w-4 h-4 flex-shrink-0",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"})],-1)),e("span",null,a(B(n.start_date))+" → "+a(B(n.end_date)),1)]),e("div",ge,[s[12]||(s[12]=e("svg",{class:"w-4 h-4 flex-shrink-0",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z"})],-1)),e("span",null,a(t(i)("gamification.competitions.season_id_label"))+" "+a(n.season_id),1)])]),n.rules&&Object.keys(n.rules).length>0?(d(),r("div",_e,[e("details",be,[e("summary",ve,a(t(i)("gamification.competitions.view_rules")),1),e("pre",xe,a(JSON.stringify(n.rules,null,2)),1)])])):g("",!0),e("div",he,[e("button",{class:"flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-sm text-indigo-400 hover:bg-indigo-500/10 transition",onClick:$=>L(n)},[s[13]||(s[13]=e("svg",{class:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"})],-1)),S(" "+a(t(i)("gamification.competitions.edit")),1)],8,ke)])]))),128))]))],64)),t(x)?(d(),r("div",we,[e("div",{class:"fixed inset-0 bg-black/60",onClick:V}),e("div",ye,[e("h2",Ce,a(t(c)?t(i)("gamification.competitions.edit_title"):t(i)("gamification.competitions.create_title")),1),e("form",{onSubmit:R(T,["prevent"]),class:"space-y-4"},[e("div",null,[e("label",Me,a(t(i)("gamification.competitions.name")),1),m(e("input",{"onUpdate:modelValue":s[1]||(s[1]=n=>t(o).name=n),type:"text",required:"",class:"w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-400 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:border-transparent",placeholder:t(i)("gamification.competitions.name_placeholder")},null,8,je),[[v,t(o).name]])]),e("div",null,[e("label",Ve,a(t(i)("gamification.competitions.description")),1),m(e("textarea",{"onUpdate:modelValue":s[2]||(s[2]=n=>t(o).description=n),rows:"3",class:"w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-400 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:border-transparent",placeholder:t(i)("gamification.competitions.desc_placeholder")},null,8,Se),[[v,t(o).description]])]),e("div",null,[e("label",He,a(t(i)("gamification.competitions.season")),1),m(e("select",{"onUpdate:modelValue":s[3]||(s[3]=n=>t(o).season_id=n),required:"",class:"w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:border-transparent"},[e("option",Je,a(t(i)("gamification.competitions.select_season")),1),(d(!0),r(w,null,J(t(M),n=>(d(),r("option",{key:n.id,value:n.id},a(n.name)+" "+a(n.is_active?t(i)("gamification.competitions.active_badge"):""),9,Be))),128))],512),[[H,t(o).season_id]])]),e("div",null,[e("label",Ue,a(t(i)("gamification.competitions.start_date")),1),m(e("input",{"onUpdate:modelValue":s[4]||(s[4]=n=>t(o).start_date=n),type:"date",required:"",class:"w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:border-transparent"},null,512),[[v,t(o).start_date]])]),e("div",null,[e("label",ze,a(t(i)("gamification.competitions.end_date")),1),m(e("input",{"onUpdate:modelValue":s[5]||(s[5]=n=>t(o).end_date=n),type:"date",required:"",class:"w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:border-transparent"},null,512),[[v,t(o).end_date]])]),e("div",null,[e("label",$e,a(t(i)("gamification.competitions.status")),1),m(e("select",{"onUpdate:modelValue":s[6]||(s[6]=n=>t(o).status=n),class:"w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:border-transparent"},[e("option",Ae,a(t(i)("gamification.competitions.status_draft")),1),e("option",Fe,a(t(i)("gamification.competitions.status_active")),1),e("option",Le,a(t(i)("gamification.competitions.status_completed")),1),e("option",Ne,a(t(i)("gamification.competitions.status_cancelled")),1)],512),[[H,t(o).status]])]),e("div",null,[e("label",Oe,a(t(i)("gamification.competitions.rules")),1),m(e("textarea",{"onUpdate:modelValue":s[7]||(s[7]=n=>t(o).rulesJson=n),rows:"5",class:"w-full px-3 py-2 bg-slate-700 border border-slate-600 rounded-lg text-white placeholder-slate-400 font-mono text-xs focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:border-transparent",placeholder:t(i)("gamification.competitions.rules_placeholder")},null,8,Te),[[v,t(o).rulesJson]]),t(f)?(d(),r("p",qe,a(t(i)("gamification.competitions.invalid_json")),1)):g("",!0)]),t(p)?(d(),r("div",De,[e("p",Ee,a(t(p)),1)])):g("",!0),e("div",Pe,[e("button",{type:"button",class:"px-4 py-2 text-sm text-slate-400 hover:text-white transition",onClick:V},a(t(i)("gamification.competitions.cancel")),1),e("button",{type:"submit",disabled:t(_)||t(f),class:"px-4 py-2 bg-indigo-600 hover:bg-indigo-500 disabled:bg-indigo-600/50 text-white text-sm font-medium rounded-lg transition flex items-center gap-2"},[t(_)?(d(),r("svg",Ie,[...s[14]||(s[14]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"},null,-1)])])):g("",!0),S(" "+a(t(c)?t(i)("gamification.competitions.save"):t(i)("gamification.competitions.create_btn")),1)],8,Re)])],32)])])):g("",!0)]))}});export{Qe as default};
|