PageSourceSearch

https://smartedu.id/_nuxt/DDsGUxXn.js

js smartedu.id collected 2026-10-05 10:33:27 UTC 25,327 bytes, 1 lines download raw bytes

1import{r as G}from"./C0kddc6v.js";import{O as N,T as ce,o as p,y as C,g as l,f as a,G as S,i as u,b as c,t as f,M as $,C as v,A as me,d as h,c as y,F as E,r as R,V as M,k as L,E as B,z as F,$ as O,_ as pe}from"./uvAhuIur.js";import{u as W}from"./ChjPqFQW.js";import{u as he}from"./CiI3sTgO.js";import{V as P,c as Z,a as H,e as J,d as fe,b as be}from"./Gks5CwcN.js";import{V as U}from"./UsT5uc4w.js";import{V as ge}from"./Dwd5LYtA.js";import{V as ye,a as _}from"./BYBH2yHL.js";import{V as D}from"./COegyCyW.js";import{V as A}from"./DZZSCpO6.js";import{V as K}from"./Bo-vs1TI.js";import{V as Y}from"./Cv9_T1oF.js";import{d as ke}from"./DP_rg1iP.js";import{u as ve}from"./C3K7LxE2.js";import{u as Ve}from"./DyaGD1mf.js";import{u as Ce}from"./zmS_JOlA.js";import{u as we}from"./C4bYc5ib.js";import{u as Se}from"./6aXO1ZlP.js";import{u as xe}from"./D3oHxIOb.js";import{V as q}from"./DZBKKjcz.js";import{V as _e}from"./Dizi0T-h.js";import{V as Fe}from"./BeGVSf4z.js";import"./cDhjtOJI.js";import"./341m0VgB.js";import"./Bicl13ia.js";import"./CUtIMaYp.js";import"./7anWDyXf.js";import"./D8Sd4i1q.js";import"./CvM0jvSz.js";import"./CvI2kPXL.js";import"./DtQ7vVyi.js";import"./d2CMLXrK.js";import"./Biei4wBS.js";import"./Bb2qHwiR.js";import"./CZHI34jm.js";import"./FoGSNAd6.js";import"./B2uCT5eU.js";import"./CgAvMOP-.js";const De={class:"d-flex align-center justify-space-between mb-3"},Ie={class:"text-subtitle-2 font-weight-bold d-flex align-center gap-1"},Te={key:0,class:"text-center py-4 text-medium-emphasis text-body-2"},Be={key:1,class:"d-flex flex-column gap-3"},Ge={class:"d-flex align-center justify-start gap-4"},Ae={key:1,class:"text-h4"},Q={__name:"ClassFormDialog",props:{modelValue:{type:Boolean,required:!0},klass:{type:Object,default:null},loading:{type:Boolean,default:!1},branches:{type:Array,default:()=>[]},classGroups:{type:Array,default:()=>[]},academicSessions:{type:Array,default:()=>[]},teachers:{type:Array,default:()=>[]}},emits:["update:modelValue","submit"],setup(e,{emit:s}){const d=e,g=s,b=B(()=>!!d.klass?.id),w=L(null),I=W(),m=B(()=>I.branchIdOrNull.value!=null),n=()=>({branch:null,class_group:null,academic_session:null,homeroom_teacher:null,teachers_data:[],code:"",name:"",capacity:20,room:"",icon:""}),t=L(n()),ee=[{title:"Wali Kelas (Utama)",value:"homeroom"},{title:"Guru Pendamping (Co-Teacher)",value:"co_teacher"},{title:"Asisten Guru",value:"assistant"}];function ae(r="co_teacher"){t.value.teachers_data.push({teacher:null,role:t.value.teachers_data.length===0?"homeroom":r})}function se(r){t.value.teachers_data.splice(r,1)}N(()=>d.modelValue,r=>{if(r){if(d.klass){let o=[];Array.isArray(d.klass.teachers)&&d.klass.teachers.length>0?o=d.klass.teachers.map(i=>({teacher:i.teacher,role:i.role||"homeroom"})):d.klass.homeroom_teacher&&(o=[{teacher:V(d.klass.homeroom_teacher),role:"homeroom"}]),t.value={branch:V(d.klass.branch),class_group:V(d.klass.class_group),academic_session:V(d.klass.academic_session),homeroom_teacher:V(d.klass.homeroom_teacher),teachers_data:o,code:d.klass.code??"",name:d.klass.name??"",capacity:d.klass.capacity??20,room:d.klass.room??"",icon:d.klass.icon??""}}else t.value=n();if(m.value&&(t.value.branch=I.branchIdOrNull.value),!d.klass&&t.value.branch){const o=(d.academicSessions||[]).find(i=>V(i.branch)===t.value.branch&&i.is_active);o&&(t.value.academic_session=o.id)}ce(()=>w.value?.resetValidation())}});function V(r){return r==null?null:typeof r=="object"?r?.id:r}const te=B(()=>(d.branches||[]).map(r=>({title:`${r.code} — ${r.name}`,value:r.id}))),le=B(()=>{const r=d.classGroups||[];return(t.value.branch?r.filter(i=>V(i.branch)===t.value.branch):r).map(i=>({title:i.name,value:i.id}))}),ie=B(()=>{const r=d.academicSessions||[];return(t.value.branch?r.filter(i=>V(i.branch)===t.value.branch):r).map(i=>({title:i.is_active?`${i.name} • aktif`:i.name,value:i.id,props:{subtitle:i.code}}))}),ne=B(()=>{const r=d.teachers||[];return(t.value.branch?r.filter(i=>i.branch_id==null||i.branch_id===t.value.branch):r).map(i=>({title:i.full_name||i.username,value:i.id,props:{subtitle:i.email}}))});N(()=>t.value.branch,(r,o)=>{if(o!==void 0&&r!==o){const i=(d.classGroups||[]).find(k=>k.id===t.value.class_group);i&&V(i.branch)!==r&&(t.value.class_group=null);const x=(d.academicSessions||[]).find(k=>k.id===t.value.academic_session);if(x&&V(x.branch)!==r&&(t.value.academic_session=null),r&&(t.value.teachers_data=t.value.teachers_data.filter(k=>{const T=(d.teachers||[]).find(ue=>ue.id===k.teacher);return!T||T.branch_id==null||T.branch_id===r})),!b.value&&!t.value.academic_session&&r){const k=(d.academicSessions||[]).find(T=>V(T.branch)===r&&T.is_active);k&&(t.value.academic_session=k.id)}}});const{uploadPhoto:oe}=he(),z=L(!1);async function re(r){const o=r.target.files[0];if(o){z.value=!0;try{const i=await oe(o);t.value.icon=i.photo_url}catch(i){console.error("Failed to upload icon",i),alert("Gagal mengunggah icon.")}finally{z.value=!1}}}const j=()=>g("update:modelValue",!1);async function de(){if(!(await w.value?.validate())?.valid)return;const o=(t.value.teachers_data||[]).filter(x=>x.teacher!=null),i=o.find(x=>x.role==="homeroom")||o[0];g("submit",{...t.value,homeroom_teacher:i?i.teacher:null,teachers_data:o,capacity:Number(t.value.capacity||0)})}return(r,o)=>(p(),C(Y,{"model-value":e.modelValue,"max-width":"780",persistent:"","onUpdate:modelValue":j},{default:l(()=>[a(P,null,{default:l(()=>[a(Z,{class:"d-flex align-center pa-5 pb-3"},{default:l(()=>[a(S,{icon:u(b)?"ri-edit-line":"ri-add-line",class:"me-2",color:"primary"},null,8,["icon"]),c("span",null,f(u(b)?"Edit Kelas":"Tambah Kelas"),1),a($),a(v,{icon:"",variant:"text",size:"small",disabled:e.loading,onClick:j},{default:l(()=>[a(S,{icon:"ri-close-line"})]),_:1},8,["disabled"])]),_:1}),a(U),a(u(ge),{ref_key:"refForm",ref:w,onSubmit:me(de,["prevent"])},{default:l(()=>[a(H,{class:"pa-5"},{default:l(()=>[a(ye,null,{default:l(()=>[a(_,{cols:"12"},{default:l(()=>[a(D,{modelValue:u(t).branch,"onUpdate:modelValue":o[0]||(o[0]=i=>u(t).branch=i),label:"Cabang",items:u(te),rules:["requiredValidator"in r?r.requiredValidator:u(G)],disabled:u(b)||u(m),hint:u(b)?"Cabang tidak bisa dipindah setelah dibuat.":u(m)?"Mengikuti cabang yang dipilih di topbar.":"","persistent-hint":u(b)||u(m)},null,8,["modelValue","items","rules","disabled","hint","persistent-hint"])]),_:1}),a(_,{cols:"12",md:"6"},{default:l(()=>[a(D,{modelValue:u(t).class_group,"onUpdate:modelValue":o[1]||(o[1]=i=>u(t).class_group=i),label:"Jenjang Kelas",items:u(le),rules:["requiredValidator"in r?r.requiredValidator:u(G)],disabled:!u(t).branch,"no-data-text":"Pilih cabang dulu, atau belum ada kelompok di cabang ini."},null,8,["modelValue","items","rules","disabled"])]),_:1}),a(_,{cols:"12",md:"6"},{default:l(()=>[a(D,{modelValue:u(t).academic_session,"onUpdate:modelValue":o[2]||(o[2]=i=>u(t).academic_session=i),label:"Tahun Ajaran",items:u(ie),rules:["requiredValidator"in r?r.requiredValidator:u(G)],disabled:!u(t).branch,"no-data-text":"Pilih cabang dulu, atau belum ada tahun ajaran."},null,8,["modelValue","items","rules","disabled"])]),_:1}),a(_,{cols:"12",md:"4"},{default:l(()=>[a(A,{modelValue:u(t).code,"onUpdate:modelValue":o[3]||(o[3]=i=>
1u(t).code=i),label:"Kode Kelas",placeholder:"STR-A",rules:["requiredValidator"in r?r.requiredValidator:u(G)],hint:"Unik global.","persistent-hint":""},null,8,["modelValue","rules"])]),_:1}),a(_,{cols:"12",md:"8"},{default:l(()=>[a(A,{modelValue:u(t).name,"onUpdate:modelValue":o[4]||(o[4]=i=>u(t).name=i),label:"Nama Kelas",placeholder:"Strawberry",rules:["requiredValidator"in r?r.requiredValidator:u(G)]},null,8,["modelValue","rules"])]),_:1}),a(_,{cols:"6",md:"6"},{default:l(()=>[a(A,{modelValue:u(t).capacity,"onUpdate:modelValue":o[5]||(o[5]=i=>u(t).capacity=i),modelModifiers:{number:!0},type:"number",label:"Kapasitas Siswa",min:"0"},null,8,["modelValue"])]),_:1}),a(_,{cols:"6",md:"6"},{default:l(()=>[a(A,{modelValue:u(t).room,"onUpdate:modelValue":o[6]||(o[6]=i=>u(t).room=i),label:"Ruangan",placeholder:"R. 101"},null,8,["modelValue"])]),_:1}),a(_,{cols:"12"},{default:l(()=>[a(P,{variant:"outlined",class:"pa-4 bg-var-theme-background border-dashed"},{default:l(()=>[c("div",De,[c("div",null,[c("div",Ie,[a(S,{icon:"ri-user-star-line",size:"18",color:"primary"}),o[9]||(o[9]=c("span",null,"Staf Pengajar & Wali Kelas",-1))]),o[10]||(o[10]=c("div",{class:"text-caption text-medium-emphasis"}," Bisa menugaskan lebih dari 1 guru (Wali Kelas, Guru Pendamping, Asisten). ",-1))]),a(v,{size:"small",variant:"tonal",color:"primary","prepend-icon":"ri-add-line",disabled:!u(t).branch,onClick:o[7]||(o[7]=i=>ae("co_teacher"))},{default:l(()=>[...o[11]||(o[11]=[h(" Tambah Guru ",-1)])]),_:1},8,["disabled"])]),u(t).teachers_data.length===0?(p(),y("div",Te,[...o[12]||(o[12]=[h(" Belum ada staf pengajar yang ditugaskan. Klik ",-1),c("strong",null,'"Tambah Guru"',-1),h(" di atas. ",-1)])])):(p(),y("div",Be,[(p(!0),y(E,null,R(u(t).teachers_data,(i,x)=>(p(),y("div",{key:x,class:"d-flex align-center gap-2 flex-wrap flex-sm-nowrap"},[a(D,{modelValue:i.teacher,"onUpdate:modelValue":k=>i.teacher=k,items:u(ne),label:"Pilih Guru",density:"compact",class:"flex-grow-1","no-data-text":"Tidak ada guru di cabang ini",disabled:!u(t).branch,"hide-details":""},null,8,["modelValue","onUpdate:modelValue","items","disabled"]),a(D,{modelValue:i.role,"onUpdate:modelValue":k=>i.role=k,items:ee,label:"Peran",density:"compact",style:{"max-width":"220px","min-width":"170px"},"hide-details":""},null,8,["modelValue","onUpdate:modelValue"]),a(v,{icon:"",variant:"text",color:"error",size:"small",onClick:k=>se(x)},{default:l(()=>[a(S,{icon:"ri-delete-bin-line",size:"18"})]),_:1},8,["onClick"])]))),128))]))]),_:1})]),_:1}),a(_,{cols:"12"},{default:l(()=>[c("div",Ge,[a(K,{size:"64",class:"rounded-lg border",variant:"tonal",color:"primary"},{default:l(()=>[u(t).icon?(p(),C(M,{key:0,src:u(t).icon,cover:""},null,8,["src"])):(p(),y("span",Ae,"🐰"))]),_:1}),c("div",null,[a(v,{size:"small",variant:"tonal",color:"primary","prepend-icon":"ri-image-line",loading:u(z),onClick:o[8]||(o[8]=i=>r.$refs.iconInput.click()),type:"button"},{default:l(()=>[...o[13]||(o[13]=[h(" Pilih Icon Kelas ",-1)])]),_:1},8,["loading"]),c("input",{type:"file",ref:"iconInput",class:"d-none",accept:"image/*",onChange:re},null,544),o[14]||(o[14]=c("div",{class:"text-caption text-medium-emphasis mt-1"}," Bisa berupa gambar/icon berformat PNG, JPG, atau WebP. ",-1))])])]),_:1})]),_:1})]),_:1}),a(U),a(J,{class:"pa-5"},{default:l(()=>[a($),a(v,{variant:"tonal",color:"secondary",disabled:e.loading,onClick:j},{default:l(()=>[...o[15]||(o[15]=[h(" Batal ",-1)])]),_:1},8,["disabled"]),a(v,{color:"primary",type:"submit",loading:e.loading},{default:l(()=>[h(f(u(b)?"Simpan Perubahan":"Tambah Kelas"),1)]),_:1},8,["loading"])]),_:1})]),_:1},512)]),_:1})]),_:1},8,["model-value"]))}},$e={class:"mb-1"},Pe={key:0,class:"text-body-2 text-warning mt-2"},X={__name:"ClassDeleteDialog",props:{modelValue:{type:Boolean,required:!0},klass:{type:Object,default:null},loading:{type:Boolean,default:!1}},emits:["update:modelValue","confirm"],setup(e,{emit:s}){const d=e,g=s,b=()=>g("update:modelValue",!1),w=()=>{d.klass&&g("confirm",d.klass)};return(I,m)=>(p(),C(Y,{"model-value":e.modelValue,"max-width":"480",persistent:"","onUpdate:modelValue":b},{default:l(()=>[a(P,null,{default:l(()=>[a(H,{class:"pa-6 text-center"},{default:l(()=>[a(K,{color:"error",variant:"tonal",size:"64",class:"mb-4"},{default:l(()=>[a(S,{icon:"ri-error-warning-line",size:"32"})]),_:1}),m[4]||(m[4]=c("h5",{class:"text-h5 mb-2"}," Hapus kelas? ",-1)),c("p",$e,[m[0]||(m[0]=h(" Anda akan menghapus kelas ",-1)),c("strong",null,f(e.klass?.name),1),m[1]||(m[1]=h(" (kode ",-1)),c("code",null,f(e.klass?.code),1),m[2]||(m[2]=h(") di cabang ",-1)),c("strong",null,f(e.klass?.branch_name||e.klass?.branch_code),1),m[3]||(m[3]=h(". ",-1))]),(e.klass?.students_count??0)>0?(p(),y("p",Pe," ⚠️ Kelas ini masih punya "+f(e.klass?.students_count)+" siswa. Pindahkan dulu sebelum menghapus. ",1)):F("",!0),m[5]||(m[5]=c("p",{class:"text-body-2 text-medium-emphasis mt-3"}," Beberapa data lain (absensi, jadwal, rapor) juga merujuk ke kelas ini dan akan menolak penghapusan. ",-1))]),_:1}),a(J,{class:"pa-5 pt-0"},{default:l(()=>[a($),a(v,{variant:"tonal",color:"secondary",disabled:e.loading,onClick:b},{default:l(()=>[...m[6]||(m[6]=[h(" Batal ",-1)])]),_:1},8,["disabled"]),a(v,{color:"error",loading:e.loading,onClick:w},{default:l(()=>[...m[7]||(m[7]=[h(" Ya, hapus ",-1)])]),_:1},8,["loading"]),a($)]),_:1})]),_:1})]),_:1},8,["model-value"]))}},Ue={class:"d-flex flex-wrap align-center gap-3 pa-4"},Ke={class:"text-caption text-medium-emphasis"},ze={class:"d-flex flex-column"},je={class:"text-primary"},Le={class:"text-caption text-medium-emphasis"},Oe=["onClick"],qe={class:"d-flex align-center gap-3"},Ne={key:1,class:"text-caption"},Ee={class:"d-flex flex-column"},Re={class:"text-high-emphasis"},Me={key:0,class:"text-caption text-medium-emphasis"},We={class:"d-flex flex-column"},Ze={key:0,class:"text-caption text-medium-emphasis"},He={class:"d-flex flex-column gap-1 py-1"},Je={key:0,class:"d-flex align-center gap-1 flex-wrap"},Ye={key:1},Qe={key:2,class:"text-caption text-medium-emphasis"},Xe={class:"d-flex justify-end gap-1"},ea={key:2,class:"text-caption text-medium-emphasis"},aa={class:"text-center pa-6"};function sa(e,s,d,g,b,w){const I=Q,m=X;return p(),C(P,null,{default:l(()=>[a(be,{class:"pb-2"},{prepend:l(()=>[a(K,{color:"primary",variant:"tonal",rounded:"lg",size:"40"},{default:l(()=>[a(S,{icon:"ri-presentation-line"})]),_:1})]),append:l(()=>[e.can("create-class","all")?(p(),C(v,{key:0,color:"primary","prepe
1nd-icon":"ri-add-line",onClick:e.openCreate},{default:l(()=>[...s[12]||(s[12]=[h("Tambah Kelas",-1)])]),_:1},8,["onClick"])):F("",!0)]),default:l(()=>[a(Z,null,{default:l(()=>[...s[10]||(s[10]=[h("Master Kelas",-1)])]),_:1}),a(fe,null,{default:l(()=>[...s[11]||(s[11]=[h("Kelas spesifik (Strawberry, Apple, dll.) di bawah kelompok kelas, terikat ke tahun ajaran tertentu.",-1)])]),_:1})]),_:1}),a(U),c("div",Ue,[a(A,{modelValue:e.search,"onUpdate:modelValue":s[0]||(s[0]=n=>e.search=n),"prepend-inner-icon":"ri-search-line",placeholder:"Cari kode / nama / ruangan ...",density:"compact",variant:"outlined",clearable:"","hide-details":"",style:{"max-inline-size":"260px"}},null,8,["modelValue"]),e.ctxBranchId==null?(p(),C(D,{key:0,modelValue:e.branchFilter,"onUpdate:modelValue":s[1]||(s[1]=n=>e.branchFilter=n),items:e.branchFilterItems,density:"compact",variant:"outlined","hide-details":"",style:{"max-inline-size":"220px"}},null,8,["modelValue","items"])):F("",!0),a(D,{modelValue:e.classGroupFilter,"onUpdate:modelValue":s[2]||(s[2]=n=>e.classGroupFilter=n),items:e.classGroupFilterItems,density:"compact",variant:"outlined","hide-details":"",style:{"max-inline-size":"200px"}},null,8,["modelValue","items"]),a(D,{modelValue:e.academicSessionFilter,"onUpdate:modelValue":s[3]||(s[3]=n=>e.academicSessionFilter=n),items:e.academicSessionFilterItems,density:"compact",variant:"outlined","hide-details":"",style:{"max-inline-size":"220px"}},null,8,["modelValue","items"]),a(D,{modelValue:e.ordering,"onUpdate:modelValue":s[4]||(s[4]=n=>e.ordering=n),items:e.orderingItems,density:"compact",variant:"outlined","hide-details":"",style:{"max-inline-size":"200px"}},null,8,["modelValue","items"]),a($),c("span",Ke,"Total: "+f(e.totalCount),1)]),a(U),a(_e,{class:"text-no-wrap","items-per-page":e.itemsPerPage,"onUpdate:itemsPerPage":s[5]||(s[5]=n=>e.itemsPerPage=n),page:e.page,"onUpdate:page":s[6]||(s[6]=n=>e.page=n),headers:e.headers,items:e.classes,"items-length":e.totalCount,loading:e.loading,"item-value":"id"},{"item.branch_name":l(({item:n})=>[c("div",ze,[c("code",je,f(n.branch_code),1),c("span",Le,f(n.branch_name),1)])]),"item.code":l(({item:n})=>[c("span",{class:"text-primary font-weight-semibold cursor-pointer",style:{"text-decoration":"underline","text-underline-offset":"2px"},onClick:t=>e.openView(n)},f(n.code),9,Oe)]),"item.name":l(({item:n})=>[c("div",qe,[a(K,{class:"rounded-lg border",size:"32",variant:"tonal",color:"primary"},{default:l(()=>[n.icon?(p(),C(M,{key:0,src:n.icon,cover:""},null,8,["src"])):(p(),y("span",Ne,"🐰"))]),_:2},1024),c("div",Ee,[c("span",Re,f(n.name),1),n.room?(p(),y("span",Me,"Ruangan: "+f(n.room),1)):F("",!0)])])]),"item.class_group_name":l(({item:n})=>[h(f(n.class_group_name||"-"),1)]),"item.academic_session_name":l(({item:n})=>[c("div",We,[c("span",null,f(n.academic_session_name||"-"),1),n.academic_session_code?(p(),y("code",Ze,f(n.academic_session_code),1)):F("",!0)])]),"item.homeroom_teacher_name":l(({item:n})=>[c("div",He,[n.teachers&&n.teachers.length>0?(p(),y("div",Je,[(p(!0),y(E,null,R(n.teachers,t=>(p(),C(q,{key:t.id,size:"x-small",color:t.role==="homeroom"?"primary":t.role==="co_teacher"?"info":"secondary",variant:"tonal"},{default:l(()=>[h(f(t.teacher_name)+" ("+f(t.role_display||(t.role==="homeroom"?"Wali Kelas":"Pendamping"))+")",1)]),_:2},1032,["color"]))),128))])):n.homeroom_teacher_name?(p(),y("span",Ye,f(n.homeroom_teacher_name),1)):(p(),y("span",Qe,"— belum ada —"))])]),"item.capacity":l(({item:n})=>[a(q,{size:"small",variant:"tonal"},{default:l(()=>[h(f(n.capacity),1)]),_:2},1024)]),"item.students_count":l(({item:n})=>[a(q,{size:"small",variant:"tonal"},{default:l(()=>[h(f(n.students_count??0),1)]),_:2},1024)]),"item.actions":l(({item:n})=>[c("div",Xe,[a(v,{icon:"",variant:"text",size:"small",color:"info",onClick:t=>e.openView(n)},{default:l(()=>[a(S,{icon:"ri-eye-line"}),a(O,{activator:"parent"},{default:l(()=>[...s[13]||(s[13]=[h("Detail Kelas",-1)])]),_:1})]),_:1},8,["onClick"]),e.can("edit-class","all")?(p(),C(v,{key:0,icon:"",variant:"text",size:"small",color:"primary",onClick:t=>e.openEdit(n)},{default:l(()=>[a(S,{icon:"ri-edit-line"}),a(O,{activator:"parent"},{default:l(()=>[...s[14]||(s[14]=[h("Edit",-1)])]),_:1})]),_:1},8,["onClick"])):F("",!0),e.can("delete-class","all")?(p(),C(v,{key:1,icon:"",variant:"text",size:"small",color:"error",onClick:t=>e.openDelete(n)},{default:l(()=>[a(S,{icon:"ri-delete-bin-6-line"}),a(O,{activator:"parent"},{default:l(()=>[...s[15]||(s[15]=[h("Hapus",-1)])]),_:1})]),_:1},8,["onClick"])):F("",!0),e.hasActionPermission?F("",!0):(p(),y("span",ea,"(read-only)"))])]),"no-data":l(()=>[c("div",aa,[a(S,{class:"mb-2 text-medium-emphasis",icon:"ri-inbox-2-line",size:"48"}),s[17]||(s[17]=c("div",{class:"text-body-1 mb-2"},"Belum ada kelas.",-1)),e.can("create-class","all")?(p(),C(v,{key:0,size:"small",color:"primary","prepe
1nd-icon":"ri-add-line",onClick:e.openCreate},{default:l(()=>[...s[16]||(s[16]=[h("Tambah kelas pertama",-1)])]),_:1},8,["onClick"])):F("",!0)])]),_:1},8,["items-per-page","page","headers","items","items-length","loading"]),a(I,{modelValue:e.isFormOpen,"onUpdate:modelValue":s[7]||(s[7]=n=>e.isFormOpen=n),klass:e.editingClass,loading:e.formLoading,branches:e.branches,"class-groups":e.classGroups,"academic-sessions":e.academicSessions,teachers:e.teachers,onSubmit:e.handleSubmit},null,8,["modelValue","klass","loading","branches","class-groups","academic-sessions","teachers","onSubmit"]),a(m,{modelValue:e.isDeleteOpen,"onUpdate:modelValue":s[8]||(s[8]=n=>e.isDeleteOpen=n),klass:e.deletingClass,loading:e.deleteLoading,onConfirm:e.handleDelete},null,8,["modelValue","klass","loading","onConfirm"]),a(Fe,{modelValue:e.snackbar.show,"onUpdate:modelValue":s[9]||(s[9]=n=>e.snackbar.show=n),color:e.snackbar.color,location:"bottom end",timeout:"3500"},{default:l(()=>[h(f(e.snackbar.text),1)]),_:1},8,["modelValue","color"])]),_:1})}const ta=ke({name:"MasterClassesPage",components:{ClassFormDialog:Q,ClassDeleteDialog:X},head(){return{title:"Class"}},setup(){const e=ve(),s=W(),{list:d,create:g,update:b,remove:w}=Ve(),{list:I}=Ce(),{list:m}=we(),{list:n}=Se(),{list:t}=xe();return{can:e.can,ctxBranchId:s.branchIdOrNull,apiList:d,apiCreate:g,apiUpdate:b,apiRemove:w,apiListBranches:I,apiListClassGroups:m,apiListAcademicSessions:n,apiListTeachers:t}},data(){return{search:"",branchFilter:"all",classGroupFilter:"all",academicSessionFilter:"all",ordering:"code",page:1,itemsPerPage:10,classes:[],totalCount:0,loading:!1,branches:[],classGroups:[],academicSessions:[],teachers:[],isFormOpen:!1,editingClass:null,formLoading:!1,isDeleteOpen:!1,deletingClass:null,deleteLoading:!1,snackbar:{show:!1,text:"",color:"success"},searchTimer:null,orderingItems:[{title:"Urut: Kode (A-Z)",value:"code"},{title:"Urut: Kode (Z-A)",value:"-code"},{title:"Urut: Nama (A-Z)",value:"name"},{title:"Urut: Kapasitas",value:"-capacity"},{title:"Urut: Terbaru",value:"-created_at"}]}},computed:{headers(){const e=[];return this.ctxBranchId==null&&e.push({title:"Cabang",key:"branch_name",sortable:!1,width:130}),e.push({title:"Kode",key:"code",sortable:!0,width:120},{title:"Nama",key:"name",sortable:!0},{title:"Kelompok",key:"class_group_name",sortable:!1,width:130},{title:"Tahun Ajaran",key:"academic_session_name",sortable:!1,width:150},{title:"Staf Pengajar",key:"homeroom_teacher_name",sortable:!1,width:220},{title:"Kapasitas",key:"capacity",sortable:!0,align:"center",width:100},{title:"Siswa",key:"students_count",sortable:!1,align:"center",width:90},{title:"Aksi",key:"actions",sortable:!1,align:"end",width:180}),e},effectiveBranchId(){return this.ctxBranchId!=null?this.ctxBranchId:this.branchFilter==="all"?null:this.branchFilter},branchFilterItems(){return[{title:"Semua cabang",value:"all"},...this.branches.map(e=>({title:`${e.code} — ${e.name}`,value:e.id}))]},classGroupFilterItems(){const e=this.effectiveBranchId==null?this.classGroups:this.classGroups.filter(s=>this.extractId(s.branch)===this.effectiveBranchId);return[{title:"Semua kelompok",value:"all"},...e.map(s=>({title:s.name,value:s.id}))]},academicSessionFilterItems(){const e=this.effectiveBranchId==null?this.academicSessions:this.academicSessions.filter(s=>this.extractId(s.branch)===this.effectiveBranchId);return[{title:"Semua tahun ajaran",value:"all"},...e.map(s=>({title:s.is_active?`${s.name} • aktif`:s.name,value:s.id}))]},hasActionPermission(){return this.can("edit-class","all")||this.can("delete-class","all")}},watch:{search(){clearTimeout(this.searchTimer),this.searchTimer=setTimeout(()=>{this.page=1,this.fetchData()},300)},branchFilter(){this.classGroupFilter="all",this.page=1,this.setDefaultAcademicSession()||this.fetchData()},classGroupFilter(){this.fetchData()},academicSessionFilter(){this.fetchData()},ordering(){this.fetchData()},page(){this.fetchData()},itemsPerPage(){this.fetchData()},ctxBranchId(){this.classGroupFilter="all",this.page=1,this.setDefaultAcademicSession()||this.fetchData()}},async mounted(){await this.fetchDropdownData(),this.setDefaultAcademicSession()||this.fetchData()},beforeUnmount(){clearTimeout(this.searchTimer)},methods:{showToast(e,s="success"){this.snackbar={show:!0,text:e,color:s}},openView(e){this.$router.push(`/master/classes/${e.uid}`)},setDefaultAcademicSession(){const e=this.academicSessions.find(d=>(this.effectiveBranchId==null||this.extractId(d.branch)===this.effectiveBranchId)&&d.is_active),s=e?e.id:"all";return this.academicSessionFilter!==s?(this.academicSessionFilter=s,!0):!1},extractId(e){return e==null?null:typeof e=="object"?e?.id:e},async fetchDropdownData(){try{const[e,s,d,g]=await Promise.all([this.apiListBranches({limit:200,ordering:"code"}),this.apiListClassGroups({limit:200,ordering:"sort_order"}),this.apiListAcademicSessions({limit:200,ordering:"-start_date"}),this.apiListTeachers()]);this.branches=e.results||[],this.classGroups=s.results||[],this.academicSessions=d.results||[],this.teachers=Array.isArray(g)?g:g.results||[]}catch(e){console.warn("Gagal memuat data dropdown:",e)}},async fetchData(){this.loading=!0;try{const e={search:this.search||void 0,ordering:this.ordering,limit:this.itemsPerPage,offset:(this.page-1)*this.itemsPerPage};this.effectiveBranchId!=null&&(e.branch=this.effectiveBranchId),this.classGroupFilter!=="all"&&(e.class_group=this.classGroupFilter),this.academicSessionFilter!=="all"&&(e.academic_session=this.academicSessionFilter);const s=await this.apiList(e);this.classes=s.results||[],this.totalCount=s.count||0}catch(e){this.showToast(e?.data?.detail||"Gagal memuat data kelas.","error")}finally{this.loading=!1}},openCreate(){this.editingClass=null,this.isFormOpen=!0},openEdit(e){this.editingClass={...e},this.isFormOpen=!0},async handleSubmit(e){this.formLoading=!0;try{this.editingClass?.id?(await this.apiUpdate(this.editingClass.uid,e),this.showToast("Kelas berhasil diperbarui.")):(await this.apiCreate(e),this.showToast("Kelas berhasil ditambahkan.")),this.isFormOpen=!1,this.fetchData()}catch(s){this.showToast(this.humanError(s,"Gagal menyimpan kelas."),"error")}finally{this.formLoading=!1}},openDelete(e){this.deletingClass=e,this.isDeleteOpen=!0},async handleDelete(e){this.deleteLoading=!0;try{await this.apiRemove(e.uid),this.showToast(`Kelas "${e.name}" telah dihapus.`),this.isDeleteOpen=!1,this.fetchData()}catch(s){this.showToast(s?.data?.detail||"Tidak bisa menghapus kelas. Mungkin masih dipakai data lain.","error")}finally{this.deleteLoading=!1}},humanError(e,s){const d=e?.data;if(d&&typeof d=="object"){const g=Object.keys(d)[0];if(g){const b=d[g],w=Array.isArray(b)?b[0]:b;return`${g}: ${w}`}}return d?.detail||e?.message||s}}},"$rlaasxZrDY"),qa=pe(ta,[["render",sa]]);export{qa 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.