1import{_ as ne}from"./0mk-4s_S.js";import{e as le,f as re,h as oe,B as ie,i as de,j as ue,c as l,a as s,k as a,t as o,l as u,F as f,r as N,x as S,b as ce,w as me,p as Y,q as i,s as B,o as r,d as C,n as $,A as pe,y as be,z as xe,v as q,E as ye}from"./95xz6Sip.js";import{u as ke}from"./DqYlBbyW.js";const ge={class:"animate-fade-in space-y-4"},fe={key:0,class:"text-sm text-red-600"},ve={key:1,class:"text-sm text-green-600"},_e={key:2,class:"card flex flex-col items-center gap-3 py-14 text-center"},he={key:0,class:"flex flex-wrap gap-2"},we=["onClick"],Te={class:"ml-1 text-xs opacity-60"},Ae={key:1,class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},Ne={class:"card"},Se={class:"mt-1 text-2xl font-bold text-red-600"},Be={class:"card"},Ce={class:"mt-1 text-2xl font-bold text-primary-600"},Ie={class:"card"},Ue={class:"mb-3 flex gap-2"},Re={key:0},Me={key:0,class:"py-10 text-center text-sm text-slate-400"},$e={key:1,class:"space-y-2"},Le={class:"font-medium text-slate-800 dark:text-slate-100"},Ve={class:"text-xs text-slate-500"},je={class:"text-right"},De={class:"font-semibold"},Oe={key:1},Pe={key:0,class:"py-10 text-center text-sm text-slate-400"},Ee={key:1,class:"space-y-2"},Fe={class:"font-medium"},ze={class:"text-xs text-slate-500"},Ke={key:0,class:"text-xs text-red-500"},Je={class:"text-right"},Ye=["onClick"],qe={class:"space-y-4"},Ze={class:"max-h-40 space-y-1 overflow-y-auto rounded-lg border border-slate-200 p-2 dark:border-slate-700"},Ge={class:"flex items-center gap-2"},He=["value"],Qe={class:"text-slate-500"},We={class:"mt-1 text-right text-sm font-semibold"},Xe={key:0},et=["value"],tt={key:0,class:"mt-2 rounded-lg bg-primary-50 p-3 text-sm dark:bg-primary-500/10"},at={class:"font-mono"},st={key:0,class:"mt-1 flex items-center gap-2"},nt={class:"font-mono font-semibold"},lt={key:1,class:"text-xs text-slate-500"},rt=["disabled"],ct=le({__name:"tagihan-wali",setup(ot){const Z={unpaid:"Belum Bayar",partial:"Sebagian",paid:"Lunas",waived:"Dibebaskan",cancelled:"Dibatalkan"},G={unpaid:"bg-red-100 text-red-700 dark:bg-red-500/10 dark:text-red-400",partial:"bg-amber-100 text-amber-700 dark:bg-amber-500/10 dark:text-amber-400",paid:"bg-green-100 text-green-700 dark:bg-green-500/10 dark:text-green-400",waived:"bg-slate-100 text-slate-500 dark:bg-slate-800",cancelled:"bg-slate-100 text-slate-400 line-through dark:bg-slate-800"},H={pending:"Menunggu Verifikasi",verified:"Terverifikasi",rejected:"Ditolak"},Q={pending:"bg-amber-100 text-amber-700 dark:bg-amber-500/10 dark:text-amber-400",verified:"bg-green-100 text-green-700 dark:bg-green-500/10 dark:text-green-400",rejected:"bg-red-100 text-red-700 dark:bg-red-500/10 dark:text-red-400"},{token:O,user:P,apiFetch:b,fetchMe:W}=re(),{formatRupiah:y}=ke(),E=oe(),v=i([]),m=i(""),_=i("tagihan"),I=i([]),F=i(0),h=i([]),L=i(null),V=i([]),j=i(!0),c=i(""),w=i(""),T=i(!1),x=i([]),d=ie({bankAccountId:"",referenceNumber:"",paidAt:new Date().toISOString().slice(0,10)}),U=i(null),R=i(!1),z=B(()=>v.value.find(n=>n.student_id===m.value)),k=B(()=>I.value.filter(n=>n.status==="unpaid"||n.status==="partial")),X=B(()=>k.value.reduce((n,t)=>n+(Number(t.total_amount)-Number(t.paid_amount)),0)),K=B(()=>k.value.filter(n=>x.value.includes(n.id)).reduce((n,t)=>n+(Number(t.total_amount)-Number(t.paid_amount)),0)),p=B(()=>h.value.find(n=>n.id===d.bankAccountId));function M(n){const t=n;return t?.data?.error?.message??t?.message??"Terjadi kesalahan, silakan coba lagi"}function J(n){return new Date(n).toLocaleDateString("id-ID",{day:"numeric",month:"short",year:"numeric",timeZone:"Asia/Jakarta"})}async function D(n){const[t,g,e,A]=await Promise.all([b(`/me/children/${n}/bills`),b(`/me/children/${n}/balance`),b(`/me/children/${n}/payment-info`),b(`/me/student-payments?studentId=${n}`)]);I.value=t.bills,F.value=g.balance,h.value=e.bankAccounts,L.value=e.paymentInstructionText,V.value=A.payments}function ee(){x.value=k.value.length>0?[k.value[0].id]:[],d.bankAccountId=h.value[0]?.id??"",d.referenceNumber="",d.paidAt=new Date().toISOString().slice(0,10),c.value="",T.value=!0}function te(n){navigator.clipboard?.writeText(n).then(()=>w.value="Nomor disalin ke clipboard.")}async function ae(){c.value="",w.value="";const n=U.value?.files?.[0];if(!n){c.value="Bukti transfer wajib diupload.";return}R.value=!0;try{const t=await b("/me/uploads/presign",{method:"POST",body:{fileName:n.name,contentType:n.type||"application/octet-stream",category:"payment-proofs"}});await $fetch(t.uploadUrl,{method:"PUT",body:n,headers:{"Content-Type":n.type||"application/octet-stream"}}),await b("/me/student-payments",{method:"POST",body:{studentId:m.value,amount:K.value,method:p.value?.virtualAccountNumber?"virtual_account":"transfer_bank",bankAccountId:d.bankAccountId||void 0,referenceNumber:d.referenceNumber||void 0,proofKey:t.key,paidAt:new Date(d.paidAt).toISOString(),targetBillIds:x.value}}),w.value="Bukti transfer berhasil dikirim, menunggu verifikasi bendahara sekolah.",T.value=!1,U.value&&(U.value.value=""),await D(m.value)}catch(t){c.value=M(t)}finally{R.value=!1}}async function se(n){try{const t=await $fetch(`${ye().public.apiBaseUrl}/me/student-payments/${n.id}/receipt`,{headers:{Authorization:`Bearer ${O.value}`},responseType:"blob"}),g=URL.createObjectURL(t),e=document.createElement("a");e.href=g,e.download=`${n.receipt_number?.replace(/\//g,"-")??"kwitansi"}.pdf`,e.click(),URL.revokeObjectURL(g)}catch(t){c.value=M(t)}}return de(m,n=>{n&&(c.value="",D(n).catch(t=>c.value=M(t)))}),ue(async()=>
1{if(!O.value)return E.push("/masuk-sekolah");try{if(P.value||await W(),P.value?.userType!=="guardian"){E.push("/");return}const n=await b("/me/children");v.value=n.children,n.children.length>0&&(m.value=n.children[0].student_id,await D(m.value))}catch(n){c.value=M(n)}finally{j.value=!1}}),(n,t)=>{const g=ne;return r(),l("div",ge,[t[15]||(t[15]=s("div",{class:"card"},[s("h1",{class:"text-xl font-bold text-slate-900 dark:text-slate-50"},"Tagihan & Pembayaran"),s("p",{class:"mt-1 text-sm text-slate-500 dark:text-slate-400"},"Lihat tagihan anak dan kirim bukti transfer.")],-1)),a(c)?(r(),l("p",fe,o(a(c)),1)):u("",!0),a(w)?(r(),l("p",ve,o(a(w)),1)):u("",!0),a(v).length===0&&!a(j)?(r(),l("div",_e,[...t[8]||(t[8]=[s("span",{class:"text-5xl"},"ð§¾",-1),s("p",{class:"text-sm text-slate-400"},"Belum ada anak yang terhubung ke akun ini.",-1)])])):a(j)?u("",!0):(r(),l(f,{key:3},[a(v).length>1?(r(),l("div",he,[(r(!0),l(f,null,N(a(v),e=>(r(),l("button",{key:e.student_id,type:"button",class:S(["rounded-xl border px-4 py-2 text-sm font-medium transition-all",a(m)===e.student_id?"border-primary-400 bg-primary-50 text-primary-700 shadow-sm dark:bg-primary-500/15 dark:text-primary-300 dark:border-primary-500/50":"border-slate-200 bg-white text-slate-600 hover:border-primary-300 hover:bg-primary-50/50 dark:bg-slate-900 dark:border-slate-700 dark:text-slate-300"]),onClick:A=>m.value=e.student_id},[C(o(e.full_name)+" ",1),s("span",Te,o(e.class_name??"-"),1)],10,we))),128))])):u("",!0),a(z)?(r(),l("div",Ae,[s("div",Ne,[t[9]||(t[9]=s("p",{class:"text-xs text-slate-500"},"Total Tunggakan",-1)),s("p",Se,o(a(y)(a(X))),1)]),s("div",Be,[t[10]||(t[10]=s("p",{class:"text-xs text-slate-500"},"Saldo Tersimpan",-1)),s("p",Ce,o(a(y)(a(F))),1)])])):u("",!0),s("div",Ie,[s("div",Ue,[s("button",{type:"button",class:S(["rounded-full px-3 py-1 text-xs font-medium transition-all",a(_)==="tagihan"?"bg-primary-500 text-white":"bg-slate-100 text-slate-600 dark:bg-slate-800 dark:text-slate-300"]),onClick:t[0]||(t[0]=e=>_.value="tagihan")},"Tagihan",2),s("button",{type:"button",class:S(["rounded-full px-3 py-1 text-xs font-medium transition-all",a(_)==="riwayat"?"bg-primary-500 text-white":"bg-slate-100 text-slate-600 dark:bg-slate-800 dark:text-slate-300"]),onClick:t[1]||(t[1]=e=>_.value="riwayat")},"Riwayat Pembayaran",2)]),a(_)==="tagihan"?(r(),l("div",Re,[a(I).length?(r(),l("div",$e,[(r(!0),l(f,null,N(a(I),e=>(r(),l("div",{key:e.id,class:"flex items-center justify-between rounded-xl border border-slate-200 p-3 dark:border-slate-700"},[s("div",null,[s("p",Le,o(e.fee_type_name)+" â "+o(e.period_label),1),s("p",Ve,"Jatuh tempo "+o(J(e.due_date)),1)]),s("div",je,[s("p",De,o(a(y)(e.total_amount)),1),s("span",{class:S(["rounded-full px-2 py-0.5 text-xs",G[e.status]])},o(Z[e.status]??e.status),3)])]))),128))])):(r(),l("div",Me,"Belum ada tagihan.")),a(k).length?(r(),l("button",{key:2,type:"button",class:"btn-primary btn-shine mt-4 w-full",onClick:ee},"ð³ Bayar Sekarang")):u("",!0)])):(r(),l("div",Oe,[a(V).length?(r(),l("div",Ee,[(r(!0),l(f,null,N(a(V),e=>(r(),l("div",{key:e.id,class:"flex items-center justify-between rounded-xl border border-slate-200 p-3 dark:border-slate-700"},[s("div",null,[s("p",Fe,o(a(y)(e.amount)),1),s("p",ze,o(J(e.paid_at)),1),e.rejected_reason?(r(),l("p",Ke,o(e.rejected_reason),1)):u("",!0)]),s("div",Je,[s("span",{class:S(["rounded-full px-2 py-0.5 text-xs",Q[e.status]])},o(H[e.status]??e.status),3),e.receipt_number?(r(),l("button",{key:0,type:"button",class:"mt-1 block text-xs text-primary-600 hover:underline",onClick:A=>se(e)},"Unduh Kwitansi",8,Ye)):u("",!0)])]))),128))])):(r(),l("div",Pe,"Belum ada riwayat pembayaran."))]))])],64)),ce(g,{modelValue:a(T),"onUpdate:modelValue":t[7]||(t[7]=e=>Y(T)?T.value=e:null),title:"Bayar Tagihan",subtitle:a(z)?.full_name,"max-width":"max-w-lg"},{default:me(()=>[s("div",qe,[s("div",null,[t[11]||(t[11]=s("p",{class:"mb-1 text-sm font-medium text-slate-600 dark:text-slate-300"},"Pilih Tagihan",-1)),s("div",Ze,[(r(!0),l(f,null,N(a(k),e=>(r(),l("label",{key:e.id,class:"flex items-center justify-between gap-2 rounded-lg px-2 py-1.5 text-sm hover:bg-slate-50 dark:hover:bg-slate-800"},[s("span",Ge,[$(s("input",{"onUpdate:modelValue":t[2]||(t[2]=A=>Y(x)?x.value=A:null),type:"checkbox",value:e.id,class:"h-4 w-4 roun
1ded border-slate-300"},null,8,He),[[pe,a(x)]]),C(" "+o(e.fee_type_name)+" â "+o(e.period_label),1)]),s("span",Qe,o(a(y)(Number(e.total_amount)-Number(e.paid_amount))),1)]))),128))]),s("p",We,"Total: "+o(a(y)(a(K))),1)]),a(h).length?(r(),l("div",Xe,[t[13]||(t[13]=s("p",{class:"mb-1 text-sm font-medium text-slate-600 dark:text-slate-300"},"Transfer ke",-1)),$(s("select",{"onUpdate:modelValue":t[3]||(t[3]=e=>a(d).bankAccountId=e),class:"w-full rounded-lg border border-slate-300 px-3 py-2 text-sm dark:border-slate-700 dark:bg-slate-800"},[(r(!0),l(f,null,N(a(h),e=>(r(),l("option",{key:e.id,value:e.id},o(e.bank_name)+" â "+o(e.account_number)+" a.n. "+o(e.account_holder),9,et))),128))],512),[[be,a(d).bankAccountId]]),a(p)?(r(),l("div",tt,[s("p",null,[C(o(a(p).bank_name)+" â ",1),s("span",at,o(a(p).account_number),1),C(" a.n. "+o(a(p).account_holder),1)]),a(p).virtualAccountNumber?(r(),l("div",st,[s("span",null,[t[12]||(t[12]=C("No. Virtual Account: ",-1)),s("span",nt,o(a(p).virtualAccountNumber),1)]),s("button",{type:"button",class:"text-xs text-primary-600 hover:underline",onClick:t[4]||(t[4]=e=>te(a(p).virtualAccountNumber))},"Salin")])):u("",!0)])):u("",!0)])):u("",!0),a(L)?(r(),l("p",lt,o(a(L)),1)):u("",!0),s("form",{class:"flex flex-col gap-3",onSubmit:xe(ae,["prevent"])},[$(s("input",{"onUpdate:modelValue":t[5]||(t[5]=e=>a(d).paidAt=e),type:"date",class:"rounded-lg border border-slate-300 px-3 py-2 text-sm dark:border-slate-700 dark:bg-slate-800"},null,512),[[q,a(d).paidAt]]),$(s("input",{"onUpdate:modelValue":t[6]||(t[6]=e=>a(d).referenceNumber=e),placeholder:"No. Referensi Transfer (opsional)",class:"rounded-lg border border-slate-300 px-3 py-2 text-sm dark:border-slate-700 dark:bg-slate-800"},null,512),[[q,a(d).referenceNumber]]),s("div",null,[t[14]||(t[14]=s("label",{class:"text-sm text-slate-500"},"Bukti Transfer",-1)),s("input",{ref_key:"fileInput",ref:U,type:"file",accept:"image/*,application/pdf",class:"mt-1 block w-full text-sm"},null,512)]),s("button",{type:"submit",class:"btn-primary",disabled:a(R)||a(x).length===0},o(a(R)?"Mengirim...":"Kirim Bukti Transfer"),9,rt)],32)])]),_:1},8,["modelValue","subtitle"])])}}});export{ct 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.