PageSourceSearch

https://app.pickiddo.com/assets/AdminRewardsView-CG1hHvlb.js

js pickiddo.com collected 2026-09-24 14:17:26 UTC 10,464 bytes, 1 lines download raw bytes

1import{ax as V,o as P,c as i,b as e,k as D,s as L,F as $,i as E,e as w,t as r,w as j,l as A,x as m,y as p,ag as z,G as _,ba as B,r as d,A as F,bb as K,M as x,bc as O,bd as Y,a as o,L as q,n as H,I as J,be as Q,J as W}from"./index-BhxUyacp.js";const X={class:"page-root"},Z={class:"canvas"},ee={class:"outer"},te={class:"main"},ae={key:1,class:"rounded-2xl bg-white shadow-sm border border-slate-100 overflow-hidden"},se={class:"overflow-x-auto"},le={class:"w-full text-xs"},oe={class:"divide-y divide-slate-50"},ne={class:"px-4 py-3"},ie=["src"],re={key:1,class:"inline-flex h-12 w-12 items-center justify-center rounded-lg bg-slate-100 text-slate-400"},de={class:"px-4 py-3 font-semibold text-slate-800"},ue={class:"px-4 py-3 text-slate-500 max-w-[220px] truncate"},ce={class:"px-4 py-3 text-right font-bold text-amber-600"},me={class:"px-4 py-3 text-center text-slate-500"},be={class:"px-4 py-3 text-slate-500"},pe={class:"px-4 py-3 text-center"},xe={class:"px-4 py-3 text-center"},ve=["onClick"],fe=["onClick"],ge={key:0},we={key:2,class:"rounded-2xl bg-rose-50 p-5 text-sm text-rose-600"},ye={class:"w-full max-w-lg rounded-2xl bg-white p-6 shadow-xl max-h-[90vh] overflow-y-auto"},he={class:"text-lg font-bold text-slate-800"},ke={class:"mt-4 flex items-center gap-4"},_e={class:"h-20 w-20 shrink-0 overflow-hidden rounded-xl border border-slate-200 bg-slate-50"},Ce=["src"],De={key:1,class:"flex h-full w-full items-center justify-center text-slate-300"},Ae={class:"cursor-pointer rounded-xl border border-dashed border-slate-300 bg-slate-50 px-4 py-2.5 text-sm font-semibold text-slate-600 hover:bg-slate-100"},Me={class:"mt-3 grid grid-cols-2 gap-3"},Ue={class:"mt-3 grid grid-cols-2 gap-3"},Re={class:"flex items-end pb-3"},Se={class:"flex items-center gap-2 text-sm font-semibold text-slate-700"},Ie={key:0,class:"mt-3 text-sm text-rose-500"},Te={class:"mt-5 flex gap-3"},Ge=["disabled"],Pe={__name:"AdminRewardsView",setup(Ne){V();const C=[{label:"Home",to:"/",icon:"home"},{label:"Class",to:"/class",icon:"class"},{label:"Tutor",to:"/tutor",icon:"tutor"},{label:"Profile",to:"/profile",icon:"profile"},{label:"Pickuiz",to:"/quiz/utama",icon:"pickuiz"},{label:"Games",to:"/games",icon:"games"}],v=d(null),y=d(!0),b=d(""),c=d(!1),u=d(null),l=d({name:"",description:"",pointsCost:0,imageUrl:"",isActive:!0,maxClaim:null,dueDate:""}),f=d(!1),h=d(!1),n=d(""),k=s=>s?/^https?:\/\//i.test(s)?s:`${F}kiddo/Aws/S3File?key=${encodeURIComponent(s)}`:"",M=s=>s==null?"0":Number(s).toLocaleString("en-MY"),U=s=>s?new Date(s).toLocaleDateString("en-MY",{day:"2-digit",month:"short",year:"numeric"}):"—";async function g(){y.value=!0,b.value="";try{const s=_();if(!s?.userId){b.value="Sila log masuk.";return}v.value=await B(s.userId)}catch(s){b.value=s?.message||"Gagal memuatkan reward."}finally{y.value=!1}}function R(){u.value=null,l.value={name:"",description:"",pointsCost:0,imageUrl:"",isActive:!0,maxClaim:null,dueDate:""},n.value="",c.value=!0}function S(s){u.value=s.id,l.value={name:s.name,description:s.description||"",pointsCost:s.pointsCost||0,imageUrl:s.imageUrl||"",isActive:!!s.isActive,maxClaim:s.maxClaim??null,dueDate:s.dueDate?String(s.dueDate).slice(0,10):""},n.value="",c.value=!0}async function I(s){const t=s.target.files?.[0];if(t){h.value=!0,n.value="";try{const a=await K(t);a?.success&&a?.key?(l.value.imageUrl=a.key,x("Gambar dimuat naik.")):n.value=a?.message||"Gagal muat naik gambar."}catch(a){n.value=a?.message||"Gagal muat naik gambar."}finally{h.value=!1,s.target.value=""}}}async function T(){if(!l.value.name?.trim()){n.value="Nama reward diperlukan.";return}if(!(l.value.pointsCost>0)){n.value="Mata diperlukan (lebih dari 0).";return}f.value=!0,n.value="";try{const s=_(),t={...l.value,dueDate:l.value.dueDate?new Date(l.value.dueDate).toISOString():null},a=u.value?await O(s.userId,{id:u.value,...t}):await Y(s.userId,t);a?.success?(x(u.value?"Reward dikemaskini.":"Reward ditambah."),c.value=!1,await g()):n.value=a?.message||"Gagal menyimpan reward."}catch(s){n.value=s?.message||"Gagal menyimpan reward."}finally{f.value=!1}}async function G(s){if(window.confirm(`Padam reward "${s.name}"?`))try{const t=_(),a=await Q(t.userId,s.id);a?.success?(x("Reward dipadam."),await g()):x(a?.message||"Gagal memadam reward.")}catch(t){x(t?.message||"Gagal memadam reward.")}}return P(g),(s,t)=>(o(),i("div",X,[e("div",Z,[e("div",ee,[D(q,{links:C}),e("div",te,[e("div",{class:"mb-6 flex items-center justify-between flex-wrap gap-3"},[t[8]||(t[8]=e("div",null,[e("h1",{class:"text-2xl font-bold text-slate-800"},"Reward Management"),e("p",{class:"mt-1 text-sm text-slate-500"}
1,"Urus senarai reward yang boleh di-claim user (points)")],-1)),e("div",{class:"flex gap-2"},[e("button",{type:"button",class:"rounded-xl border border-slate-200 bg-white px-4 py-2 text-sm font-semibold text-slate-600 hover:bg-slate-50",onClick:g},"Muat Semula"),e("button",{type:"button",class:"rounded-xl bg-amber-500 px-4 py-2 text-sm font-semibold text-white shadow-sm hover:bg-amber-600",onClick:R},"+ Tambah Reward")])]),y.value?(o(),L(W,{key:0,label:"Memuatkan reward...",size:"lg"})):v.value?(o(),i("div",ae,[e("div",se,[e("table",le,[t[10]||(t[10]=e("thead",null,[e("tr",{class:"bg-slate-50 text-left"},[e("th",{class:"px-4 py-3 font-semibold text-slate-500"},"Gambar"),e("th",{class:"px-4 py-3 font-semibold text-slate-500"},"Nama"),e("th",{class:"px-4 py-3 font-semibold text-slate-500"},"Keterangan"),e("th",{class:"px-4 py-3 font-semibold text-slate-500 text-right"},"Mata"),e("th",{class:"px-4 py-3 font-semibold text-slate-500 text-center"},"Max Claim"),e("th",{class:"px-4 py-3 font-semibold text-slate-500"},"Tamat"),e("th",{class:"px-4 py-3 font-semibold text-slate-500 text-center"},"Aktif"),e("th",{class:"px-4 py-3 font-semibold text-slate-500 text-center"},"Tindakan")])],-1)),e("tbody",oe,[(o(!0),i($,null,E(v.value.list,a=>(o(),i("tr",{key:a.id,class:"hover:bg-slate-50 transition"},[e("td",ne,[k(a.imageUrl)?(o(),i("img",{key:0,src:k(a.imageUrl),class:"h-12 w-12 rounded-lg object-cover border border-slate-100",alt:"reward"},null,8,ie)):(o(),i("span",re,"—"))]),e("td",de,r(a.name),1),e("td",ue,r(a.description||"—"),1),e("td",ce,r(M(a.pointsCost)),1),e("td",me,r(a.maxClaim??"∞"),1),e("td",be,r(a.dueDate?U(a.dueDate):"—"),1),e("td",pe,[e("span",{class:H(["inline-block rounded-full px-2.5 py-0.5 text-[10px] font-bold",a.isActive?"bg-emerald-100 text-emerald-700":"bg-slate-200 text-slate-500"])},r(a.isActive?"Aktif":"Nonaktif"),3)]),e("td",xe,[e("button",{type:"button",class:"mr-1 rounded-lg bg-blue-500 px-3 py-1.5 text-[11px] font-semibold text-white hover:bg-blue-600",onClick:N=>S(a)},"Edit",8,ve),e("button",{type:"button",class:"rounded-lg bg-rose-500 px-3 py-1.5 text-[11px] font-semibold text-white hover:bg-rose-600",onClick:N=>G(a)},"Padam",8,fe)])]))),128)),v.value.list.length?w("",!0):(o(),i("tr",ge,[...t[9]||(t[9]=[e("td",{colspan:"8",class:"px-4 py-8 text-center text-sm text-slate-400"},'Tiada reward. Klik "Tambah Reward".',-1)])]))])])])])):b.value?(o(),i("div",we,r(b.value),1)):w("",!0),D(J,{links:C})]),c.value?(o(),i("div",{key:0,class:"fixed inset-0 z-[80] flex items-center justify-center px-4 bg-black/40",onClick:t[7]||(t[7]=j(a=>c.value=!1,["self"]))},[e("div",ye,[e("p",he,r(u.value?"Edit Reward":"Tambah Reward"),1),e("div",ke,[e("div",_e,[l.value.imageUrl?(o(),i("img",{key:0,src:k(l.value.imageUrl),class:"h-full w-full object-cover",alt:"preview"},null,8,Ce)):(o(),i("span",De,"No img"))]),e("label",Ae,[e("input",{type:"file",accept:"image/*",class:"hidden",onChange:I},null,32),A(" "+r(h.value?"Memuat naik...":"Muat naik gambar"),1)])]),t[15]||(t[15]=e("label",{class:"mt-4 block text-xs font-bold uppercase tracking-wide text-slate-400"},"Nama *",-1)),m(e("input",{"onUpdate:modelValue":t[0]||(t[0]=a=>l.value.name=a),class:"mt-1 w-full rounded-xl border border-slate-200 bg-slate-50 p-3 text-sm text-slate-700 focus:outline-none focus:border-amber-400",placeholder:"cth: Kipas angin mudah alih"},null,512),[[p,l.value.name]]),t[16]||(t[16]=e("label",{class:"mt-3 block text-xs font-bold uppercase tracking-wide text-slate-400"},"Keterangan",-1)),m(e("textarea",{"onUpdate:modelValue":t[1]||(t[1]=a=>l.value.description=a),rows:"2",class:"mt-1 w-full rounded-xl border border-slate-200 bg-slate-50 p-3 text-sm text-slate-700 focus:outline-none focus:border-amber-400",placeholder:"Penerangan reward"},null,512),[[p,l.value.description]]),e("div",Me,[e("div",null,[t[11]||(t[11]=e("label",{class:"block text-xs font-bold uppercase tracking-wide text-slate-400"},"Mata Diperlukan *",-1)),m(e("input",{"onUpdate:modelValue":t[2]||(t[2]=a=>l.value.pointsCost=a),type:"number",min:"0",class:"mt-1 w-full rounded-xl border border-slate-200 bg-slate-50 p-3 text-sm text-slate-700 focus:outline-none focus:border-amber-400"},null,512),[[p,l.value.pointsCost,void 0,{number:!0}]])]),e("div",null,[t[12]||(t[12]=e("label",{class:"block text-xs font-bold uppercase tracking-wide text-slate-400"},"Max Claim (kosong = ∞)",-1)),m(e("input",{"onUpdate:modelValue":t[3]||(t[3]=a=>l.value.maxClaim=a),type:"number",min:"0",class:"mt-1 w-full rounded-xl border border-slate-200 bg-slate-50 p-3 text-sm text-slate-700 focus:outline-none focus:border-amber-400"},null,512),[[p,l.value.maxClaim,void 0,{number:!0}]])])]),e("div",Ue,[e("div",null,[t[13]||(t[13]=e("label",{class:"block text-xs font-bold uppercase tracking-wide text-slate-400"},"Tarikh Tamat",-1)),m(e("input",{"onUpdate:modelValue":t[4]||(t[4]=a=>l.value.dueDate=a),type:"date",class:"mt-1 w-full rounded-xl border border-slate-200 bg-slate-50 p-3 text-sm text-slate-700 focus:outline-none focus:border-amber-400"},null,512),[[p,l.value.dueDate]])]),e("div",Re,[e("label",Se,[m(e("input",{"onUpdate:modelValue":t[5]||(t[5]=a=>
1l.value.isActive=a),type:"checkbox",class:"h-4 w-4 rounded border-slate-300 text-amber-500 focus:ring-amber-400"},null,512),[[z,l.value.isActive]]),t[14]||(t[14]=A(" Aktif ",-1))])])]),n.value?(o(),i("p",Ie,r(n.value),1)):w("",!0),e("div",Te,[e("button",{type:"button",class:"flex-1 rounded-xl border border-slate-200 py-2.5 text-sm font-semibold text-slate-600 hover:bg-slate-50",onClick:t[6]||(t[6]=a=>c.value=!1)},"Batal"),e("button",{type:"button",class:"flex-1 rounded-xl bg-amber-500 py-2.5 text-sm font-semibold text-white hover:bg-amber-600 disabled:opacity-50",disabled:f.value,onClick:T},r(f.value?"Menyimpan...":u.value?"Simpan":"Tambah"),9,Ge)])])])):w("",!0)])])]))}};export{Pe 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.