PageSourceSearch

https://easyquizehou.io.vn/assets/StudentsTab-BArvrzSV.js

js easyquizehou.io.vn collected 2026-09-24 14:30:09 UTC 3,942 bytes, 1 lines download raw bytes

1import{j as t}from"./vendor-editor-tiptap-DxFZQymd.js";import{r as s}from"./vendor-react-Ci3E8-6d.js";import{D as U,C as d,a as f,c as I}from"./AdminFinanceDashboardPage-CYc60jIw.js";import{P as W}from"./ProgramColumnChart-fuLy_Dfk.js";import{aC as z}from"./vendor-antd-Osf0nwkm.js";import{f as l,q as G}from"./index-CVvLEHxs.js";import{r as x,b as _,c as K,d as V}from"./tokenUsageService-ngADENRz.js";import{L as J}from"./vendor-charts-_OXgl1bk.js";const Q=({data:e,loading:r})=>{const n=[{label:"Tổng sinh viên",value:(e?.total??0).toLocaleString()},{label:"SV mới (trong khoảng)",value:(e?.newInRange??0).toLocaleString()},{label:"Đang học",value:(e?.active??0).toLocaleString()},{label:"Tốt nghiệp",value:(e?.graduated??0).toLocaleString()}];return t.jsx("div",{className:"token-stat-grid",style:{marginBottom:16},children:n.map(i=>t.jsxs(z,{loading:r,size:"small",className:"token-stat-card",children:[t.jsx("div",{className:"token-stat-label",children:i.label}),t.jsx("div",{className:"token-stat-value",children:i.value})]},i.label))})},c="https://be.easyquizehou.io.vn/api/admin/students/dashboard",X=(e,r)=>
1new URLSearchParams({from:e,to:r}).toString(),h={getOverview:async e=>(await l(`${c}/overview?${X(e.from,e.to)}`)).json(),getByProgram:async()=>(await l(`${c}/by-program`)).json(),getBySchool:async()=>(await l(`${c}/by-school`)).json(),getByStatus:async()=>(await l(`${c}/by-status`)).json(),getBySupporter:async()=>(await l(`${c}/by-supporter`)).json(),getNewTimeseries:async e=>{const r=new URLSearchParams({from:e.from,to:e.to,granularity:e.granularity});return(await l(`${c}/new-timeseries?${r}`)).json()}},Z={Enrolled:"Đang học",Deferred:"Tạm hoãn",DroppedOut:"Đã nghỉ",Graduated:"Tốt nghiệp",WaitingForClass:"Chờ xếp lớp",WaitingForCourseStart:"Chờ khai giảng",Suspended:"Đình chỉ",Removed:"Đã xóa",Completed:"Hoàn thành",OnHold:"Tạm giữ",PendingApproval:"Chờ duyệt",NotRegistered:"Chưa đăng ký"},it=()=>{const[e,r]=s.useState("month"),[n,i]=s.useState(x("month")),[m,y]=s.useState("day"),[j,C]=s.useState(null),[w,B]=s.useState([]),[Y,L]=s.useState([]),[k,D]=s.useState([]),[M,P]=s.useState([]),[b,R]=s.useState([]),[o,v]=s.useState(!1),g=s.useMemo(()=>n[0].format("YYYY-MM-DD"),[n]),u=s.useMemo(()=>n[1].format("YYYY-MM-DD"),[n]),T=a=>{r(a),i(x(a)),y(V(a))},N=a=>{i(a),r("custom"),y(K(a[0].format("YYYY-MM-DD"),a[1].format("YYYY-MM-DD")))},S=s.useCallback(async a=>{v(!0);try{const[p,$,H,A,E,O]=await Promise.all([h.getOverview({from:g,to:u}),h.getByProgram(),h.getBySchool(),h.getByStatus(),h.getBySupporter(),h.getNewTimeseries({from:g,to:u,granularity:m})]);if(a?.aborted)return;C(p.data||null),B($.data||[]),L(H.data||[]),D(A.data||[]),P(E.data||[]),R(O.data||[])}catch(p){a?.aborted||G(p,"Lỗi khi tải dữ liệu dashboard")}finally{a?.aborted||v(!1)}},[g,u,m]);s.useEffect(()=>{const a=new AbortController;return S(a.signal),()=>a.abort()},[S]);const F=s.useMemo(()=>({data:b,xField:"bucket",yField:"value",height:300,axis:{x:{labelFormatter:a=>_(a,m)}}}),[b,m]);return t.jsxs(t.Fragment,{children:[t.jsx(U,{scale:e,onScaleChange:T,range:n,onRangeChange:N,onRefresh:()=>S(),loading:o}),t.jsx(Q,{data:j,loading:o}),t.jsxs("div",{className:"finance-dashboard-grid-2",style:{marginBottom:16},children:[t.jsx(d,{title:"Sinh viên mới theo thời gian",loading:o,minHeight:320,children:t.jsx(J,{...F})}),t.jsx(d,{title:"Sinh viên theo trạng thái",loading:o,minHeight:320,children:t.jsx(f,{data:k,labelMap:Z})})]}),t.jsxs("div",{className:"finance-dashboard-grid-2",style:{marginBottom:16},children:[t.jsx(d,{title:"Sinh viên theo chương trình (ngành)",loading:o,minHeight:300,children:t.jsx(W,{data:w})}),t.jsx(d,{title:"Sinh viên theo trường",loading:o,minHeight:300,children:t.jsx(f,{data:Y})})]}),t.jsx(d,{title:"Sinh viên theo nhân viên phụ trách",loading:o,minHeight:300,children:t.jsx(I,{data:M})})]})};export{it 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.