PageSourceSearch

https://iviet.edu.vn/_nuxt/CTFxkLu7.js

js iviet.edu.vn collected 2026-09-28 07:29:11 UTC 12,745 bytes, 1 lines download raw bytes

1import{P as k,g as $e,u as Ve,c as Ue,a as Te,s as Ee,t as r,e as _,k as De,d as U,b_ as Fe,z as W,n as Me,G as je,j as qe,f as Pe,i as ze,M as Oe,F as Re}from"./B8e4kH1O.js";import{_ as Ae}from"./V5eEikOZ.js";import{_ as Ie}from"./B9xmu0xC.js";import{_ as Ke}from"./DFmagAAC.js";import{_ as Ne}from"./kYWLuDjK.js";import{_ as Le}from"./CvjKFbtq.js";import{_ as Be}from"./CEgBj1Tr.js";import{_ as Ye}from"./CrpHXs4L.js";import{_ as He}from"./C7PZVVxT.js";import{_ as Ge}from"./Bjw996c9.js";import{_ as We}from"./9Hq6zkpO.js";import{_ as Je}from"./BXkBanxC.js";import{_ as Qe}from"./BMbeHPL9.js";import{_ as Xe}from"./CtYYIVtb.js";import{_ as Ze}from"./Bs1uh7K_.js";import{d as et,A,r as f,o as tt,E as q,ai as p,a9 as o,a7 as i,ax as at,u as e,q as P,a6 as I,aa as z,b as J,a5 as x,ad as w,ae as v,af as Q,h as d}from"./BbDbjuyS.js";import{c as st,a as X}from"./CBnC-wTy.js";import{d as K}from"./BGJeDKOD.js";import{s as ot}from"./CuouPDA2.js";import{b as Z,c as nt}from"./Dd_SVG7M.js";import{d as it}from"./D38qZ2bu.js";import{u as lt}from"./CyUZNcPH.js";import{C as rt}from"./CyqDb5-w.js";import{_ as N}from"./5ibKbNUu.js";import"./U3PEbFmj.js";import"./Bp84Aapx.js";import"./lz_eyXSj.js";import"./D_fJN6yg.js";import"./kRIii9yh.js";import"./7tGoGoHK.js";import"./C771hr_R.js";import"./C6Y-ieo6.js";import"./eRmVQ7Fj.js";import"./D7plXml8.js";import"./bMz2pzvS.js";import"./CSgA4rB-.js";import"./P1GP3aTI.js";import"./DL9vSEkN.js";import"./CUkBO7RI.js";import"./VFlOR6HW.js";import"./DJUbhsmH.js";import"./NF8j_zP2.js";import"./DVJy8dHx.js";import"./a2VgpQa-.js";import"./BUz__BjA.js";const ct={class:"container mx-auto"},dt={class:"flex flex-wrap items-center justify-between gap-x-3 mt-6 px-2 md:px-0"},mt={class:"flex items-center gap-x-3"},ut={class:"flex justify-start gap-x-[13px]"},pt={class:"flex-1 min-w-0"},_t={key:0,class:"text-xs"},ft={class:"text-xs"},gt={class:"flex justify-end"},vt={class:"cursor-pointer select-none size-8 grid place-items-center"},yt={key:1,class:"grid place-items-center"},xt={key:0,class:"flex justify-end px-3 py-3.5"},bt={class:"grid grid-cols-2 gap-x-4 w-full"},ht={class:"mt-4 flex justify-end gap-x-4"},T="classin",_a=et({__name:"index",setup(Ct){it({permissions:[k.CoursesList]});const{hasPermission:E}=lt(),ee=Re(),D=f(!0),L=$e(),{$t:n,$getLocale:te}=Ve(),b=f(!1),h=f(!1),O=Ue(),C=f(),$=f([]),ae=Te(),{site:se}=Ee(ae),l=J({page:1,limit:10,type:T});A($,a=>{a.length>0?a.forEach((t,c)=>{l[`tags[${c}]`]=t}):Object.keys(l).forEach(t=>{t.startsWith("tags[")&&(l[t]=void 0)})});const B={data:[],meta:{page:0,take:0,itemCount:0,pageCount:0,hasPreviousPage:!1,hasNextPage:!1}},g=f(B),Y=f({}),F=async a=>{D.value=!0;try{g.value=B;const t=await $fetch("/api/v1/admin/courses",{query:{...a,type:T,lang:te()},headers:U(["cookie"])});if(se.value?.type_sell?.includes(Fe.Membership)){const c=await $fetch("/api/v1/membership/infomation",{headers:U(["cookie"])});let m;if(c.courses?.length>0){const u=new Set(c.courses);m=t.data.map(j=>({...j,is_buy_membership:u.has(j._id)}))}else m=t.data.map(u=>({...u,is_buy_membership:!0}));g.value={...t,data:m}}else g.value=t;if(t.data.length>0)try{const c=t.data.map(u=>u._id).join(","),m=await $fetch("/api/v1/admin/classin/courses/status",{query:{course_ids:c},headers:U(["cookie"])});Y.value=m}catch(c){console.log("Error fetching course statuses:",c)}}catch(t){console.log(t)}D.value=!1},V=async()=>{await F({page:1,limit:10,type:T})};A(()=>l.page,async a=>{await F({...l,page:a})});const oe=async()=>{$.value=[],l.status=void 0,l.category_id=void 0,l.teacher_id=void 0,l.keyword=void 0,C.value=void 0,await V()},ne=async()=>{b.value=!1,await F({...l,page:1})},H=async()=>{ze(C.value)?await V():await F({...l,keyword:C.value,page:1})},ie=f(Object.values(Z).filter(a=>a!==Z.Deleted).map(a=>({value:a,label:nt.get(a)}))),le=st({name:X().required(String(n("validation.mixed.required"))),url:X().required(String(n("validation.mixed.required")))}),G=f(),y=J({type:T});A(()=>y.name,a=>{h.value&&(y.url=ot(String(a).trim(),{lower:!0,locale:"vi",trim:!0,remove:void 0}))});const M=f(!1),re=async a=>{try{M.value=!0,await $fetch("/api/v1/admin/courses",{method:"POST",body:{...a.data,t
1ype:T},headers:U(["cookie"]),onResponse:async({response:t})=>{t.status===201&&t._data?await W({name:"admin-classin-id",params:{id:t._data._id}}):M.value=!1},onResponseError({response:t}){O.add({description:t._data.message||String(n("no_permission_create_course")),color:"error"}),M.value=!1}})}catch(t){console.log(t)}},ce=[{accessorKey:"name",header:()=>d("div",{class:"text-left"},String(r(n("course"))))},{accessorKey:"total_lesson",header:()=>d("div",{class:"text-center"},"Buổi học"),cell:({row:a})=>{const t=`${a.getValue("total_lesson")??0}`;return d("div",{class:"text-center"},d(_,{to:E(k.CoursesEdit)?{name:"admin-classin-id-lesson",params:{id:a.original._id}}:void 0},t))},meta:{class:{th:"w-24"}}},{accessorKey:"count_student",header:()=>d("div",{class:"text-center"},String(r(n("student")))),cell:({row:a})=>d("div",{class:"text-center"},d(_,{to:{name:"admin-classin-id-students",params:{id:a.original._id}}},`${a.getValue("count_student")??0}`)),meta:{class:{th:"w-24"}}},{accessorKey:"status",header:()=>d("div",{class:"text-center"},String(r(n("status")))),cell:({row:a})=>{const t=a.original,c=Y.value[t._id];let m="",u="";return c==="ongoing"?(m="Đang diễn ra",u="text-green-600 bg-green-100"):c==="upcoming"?(m="Sắp diễn ra",u="text-blue-600 bg-blue-100"):c==="ended"?(m="Đã kết thúc",u="text-slate-500 bg-slate-100"):(m="-",u="text-slate-400"),d("div",{class:"flex justify-center"},[d("span",{class:`text-xs font-semibold px-2 py-1 rounded ${u}`},m)])},meta:{class:{th:"w-26"}}},{accessorKey:"update",header:()=>d("div",{class:"text-end"},String(r(n("update")))),cell:({row:a})=>d("div",{class:"text-end"},[d("p",{class:"font-bold"},a.original.editor?.fullname),d("p",{},ee(a.original.updatedAt).format("DD/MM/YYYY HH:mm"))]),meta:{class:{th:"w-64"}}},{accessorKey:"actions_button",header:"",meta:{class:{th:"w-12"}}}],de=[[{label:"Sắp xếp",icon:"lucide:chevrons-up-down",permission:k.CoursesEdit,onSelect:()=>{const a=L.create(rt,{props:{onSuccess:async()=>{a.close(),await V()}}});a.open()}}].filter(a=>!a.permission||E(a.permission))],me=a=>{const t=L.create(Oe,{props:{title:n("pages.courses.delete_title"),body:n("pages.courses.delete_course_confirm"),okText:n("delete"),cancelText:n("cancel"),colorButton:"error",async onConfirm(){await $fetch(`/api/v1/admin/courses/${a}`,{method:"DELETE",headers:U(),onResponse:async({response:c})=>{c.ok&&(O.add({description:n("delete_success"),color:"success"}),t.close(),await V())},onResponseError(){O.add({description:n("delete_failed"),color:"error"})}})}}});t.open()};return tt(async()=>{await V()}),(a,t)=>{const c=Ae,m=Ie,u=je,j=Ke,ue=Me,pe=Ne,_e=Le,fe=Be,ge=Ye,ve=qe,ye=He,S=Ge,xe=We,be=Je,he=Qe,Ce=Xe,Se=Ze,ke=Pe,we=De;return x(),q("div",null,[p("div",ct,[p("div",dt,[t[16]||(t[16]=p("h1",{class:"uppercase text-xl font-medium text-[#032D60]"}," Khoá học ClassIn ",-1)),p("div",mt,[o(e(N),{modelValue:e(C),"onUpdate:modelValue":t[0]||(t[0]=s=>P(C)?C.value=s:null),placeholder:String(e(r)(e(n)("search"))),autocomplete:"off",name:"keywordSearch",onKeyup:at(H,["enter"])},{trailing:i(()=>[o(e(_),{padded:!1,class:"cursor-pointer",icon:"heroicons:magnifying-glass",variant:"link",onClick:H})]),_:1},8,["modelValue","placeholder"]),o(e(_),{label:String(e(r)(e(n)("filter"))),class:"cursor-pointer",color:"neutral",icon:"lucide:filter",type:"button",variant:"outline",onClick:t[1]||(t[1]=s=>b.value=!0)},null,8,["label"]),e(E)(e(k).CoursesCreate)?(x(),I(e(_),{key:0,label:String(e(r)(e(n)("add_course"))),class:"cursor-pointer",color:"primary",icon:"material-symbols:add",type:"button",variant:"solid",onClick:t[2]||(t[2]=s=>h.value=!0)},null,8,["label"])):z("",!0),o(c,{content:{align:"end"},items:de},{default:i(()=>[o(e(_),{class:"cursor-pointer",color:"neutral",icon:"lucide:chevron-down",variant:"outline"})]),_:1})])]),o(fe,{columns:ce,data:e(g)?.data,loading:e(D),ui:{thead:"bg-[#E3F3FD]",th:"font-bold py-5",td:"max-w-[250px] truncate"},class:"flex-1 rounded border bg-white border-gray-200 mt-6","loading-animation":"carousel","loading-color":"primary"},{"name-cell":i(({row:s})=>[p("div",ut,[o(m,{src:s.original.thumbnail_url,class:"block rounded-lg w-[108px] aspect-video h-full object-cover",loading:"lazy"}
1,null,8,["src"]),p("div",pt,[o(j,{text:e(K)(s.original.name)},{default:i(()=>[o(u,{to:{name:"admin-classin-id",params:{id:s.original._id}},class:"font-medium text-gray-800 hover:text-blue-500 line-clamp-1 whitespace-pre-line"},{default:i(()=>[w(v(e(K)(s.original.name)),1)]),_:2},1032,["to"])]),_:2},1032,["text"]),s.original.teacher?(x(),q("p",_t,v(e(K)(s.original.teacher.fullname)),1)):z("",!0),p("span",ft,"ID: "+v(s.original.code),1)])])]),"actions_button-cell":i(({row:s})=>[p("div",gt,[o(c,{content:{align:"end"},items:[{label:String(e(r)(e(n)("edit"))),icon:"lucide:square-pen",onSelect:()=>("navigateTo"in a?a.navigateTo:e(W))({name:"admin-classin-id",params:{id:s.original._id}}),permission:e(k).CoursesEdit},{label:String(e(r)(e(n)("delete"))),icon:"lucide:trash-2",onSelect:()=>me(s.original._id),permission:e(k).CoursesDelete}].filter(R=>!R.permission||e(E)(R.permission))},{default:i(()=>[p("div",vt,[o(ue,{name:"heroicons:ellipsis-vertical-20-solid",size:"20"})])]),_:1},8,["items"])])]),empty:i(()=>[e(D)?(x(),q("div",yt,[o(_e)])):(x(),I(pe,{key:0}))]),_:1},8,["data","loading"]),e(g)?.meta&&e(g)?.meta.itemCount>e(g)?.meta.take?(x(),q("div",xt,[o(ge,{page:e(l).page,"onUpdate:page":t[3]||(t[3]=s=>e(l).page=s),"items-per-page":e(l).limit,total:e(g).meta.itemCount,"show-edges":"",size:"md"},null,8,["page","items-per-page","total"])])):z("",!0),o(we,null,{default:i(()=>[o(Ce,{open:e(b),"onUpdate:open":t[10]||(t[10]=s=>P(b)?b.value=s:null),ui:{overlay:"bg-gray-800/50"}},{header:i(()=>[o(e(_),{class:"flex absolute end-5 top-5 z-10",icon:"i-material-symbols:close",padded:"",size:"sm",square:"",variant:"ghost",onClick:t[4]||(t[4]=s=>b.value=!1)}),w(" "+v(String(e(r)(e(n)("filter")))),1)]),body:i(()=>[p("div",null,[o(S,{label:String(e(r)(e(n)("status"))),class:"mb-6"},{default:i(()=>[o(ye,{modelValue:e(l).status,"onUpdate:modelValue":t[6]||(t[6]=s=>e(l).status=s),items:e(ie),placeholder:String(e(r)(e(n)("select_status"))),"search-input":!1,class:"w-full","value-key":"value"},{trailing:i(({modelValue:s})=>[s?(x(),I(ve,{key:0,name:"i-material-symbols-close-rounded",onClick:t[5]||(t[5]=Q(R=>e(l).status=void 0,["stop"]))})):z("",!0)]),_:1},8,["modelValue","items","placeholder"])]),_:1},8,["label"]),o(S,{label:String(e(r)(e(n)("category"))),class:"mb-6"},{default:i(()=>[o(xe,{modelValue:e(l).category_id,"onUpdate:modelValue":t[7]||(t[7]=s=>e(l).category_id=s),"add-options-undefined":!0},null,8,["modelValue"])]),_:1},8,["label"]),o(S,{class:"mb-6",label:"Tags"},{default:i(()=>[o(be,{modelValue:e($),"onUpdate:modelValue":t[8]||(t[8]=s=>P($)?$.value=s:null)},null,8,["modelValue"])]),_:1}),o(S,{label:String(e(r)(e(n)("teacher"))),class:"mb-6"},{default:i(()=>[o(he,{modelValue:e(l).teacher_id,"onUpdate:modelValue":t[9]||(t[9]=s=>e(l).teacher_id=s)},null,8,["modelValue"])]),_:1},8,["label"])])]),footer:i(()=>[p("div",bt,[o(e(_),{block:"",class:"text-center",color:"neutral",size:"xl",variant:"outline",onClick:oe},{default:i(()=>[w(v(String(e(r)(e(n)("refresh")))),1)]),_:1}),o(e(_),{block:"",color:"primary",size:"xl",variant:"solid",onClick:Q(ne,["prevent"])},{default:i(()=>[w(v(String(e(r)(e(n)("apply")))),1)]),_:1})])]),_:1},8,["open"]),o(ke,{open:e(h),"onUpdate:open":t[15]||(t[15]=s=>P(h)?h.value=s:null),title:String(e(r)(e(n)("add_course")))},{body:i(()=>[o(Se,{ref_key:"formCreateCourse",ref:G,schema:e(le),state:e(y),class:"space-y-4",onSubmit:re},{default:i(()=>[o(S,{required:"",label:String(e(r)(e(n)("pages.courses.course_name"))),name:"name"},{default:i(()=>[o(e(N),{modelValue:e(y).name,"onUpdate:modelValue":t[11]||(t[11]=s=>e(y).name=s),placeholder:String(e(r)(e(n)("pages.courses.enter_course_name"))),class:"w-full",size:"xl"},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),o(S,{label:String(e(r)(e(n)("url"))),class:"mt-3",name:"url",required:""},{default:i(()=>[o(e(N),{modelValue:e(y).url,"onUpdate:modelValue":t[12]||(t[12]=s=>e(y).url=s),placeholder:"ten-khoa-hoc",class:"w-full"},null,8,["modelValue"])]),_:1},8,["label"])]),_:1},8,["schema","state"]),p("div",ht,[o(e(_),{color:"neutral",variant:"outline",onClick:t[13]||(t[13]=s=>h.value=!1)},{default:i(()=>[w(v(e(n)("cancel")),1)]),_:1}),o(e(_),{loading:e(M),color:"primary",variant:"solid",onClick:t[14]||(t[14]=s=>e(G).submit())},{default:i(()=>[w(v(e(n)("create")),1)]),_:1},8,["loading"])])]),_:1},8,["open","title"])]),_:1})])])}}});
1export{_a 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.