7 lines
20 KiB
JavaScript
7 lines
20 KiB
JavaScript
import{c as I,f as T,j as e,E as $,w as H,u as N,d as f,r as p,g as b,x as W,y as J,B as j,P as F,C as A,z as U,A as B,D as Y,m as k,l as M,T as _,I as g,F as V,H as w,J as E,K as D}from"./index-BCAZXiEu.js";import{C,a as G,b as q}from"./card-DaQiiTAq.js";import{u as X,i as K,a as P}from"./useChart-BXGoMcGj.js";import{u as Z,i as ee,b as se,a as te,c as ae,d as re,e as ne,f as le}from"./echarts-BIWefrIc.js";/**
|
|
* @license lucide-react v0.475.0 - ISC
|
|
*
|
|
* This source code is licensed under the ISC license.
|
|
* See the LICENSE file in the root directory of this source tree.
|
|
*/const ie=[["rect",{width:"16",height:"20",x:"4",y:"2",rx:"2",key:"1nb95v"}],["line",{x1:"8",x2:"16",y1:"6",y2:"6",key:"x4nwl0"}],["line",{x1:"16",x2:"16",y1:"14",y2:"18",key:"wjye3r"}],["path",{d:"M16 10h.01",key:"1m94wz"}],["path",{d:"M12 10h.01",key:"1nrarc"}],["path",{d:"M8 10h.01",key:"19clt8"}],["path",{d:"M12 14h.01",key:"1etili"}],["path",{d:"M8 14h.01",key:"6423bh"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M8 18h.01",key:"lrp35t"}]],R=I("Calculator",ie);Z([ee,se,te,ae,re,ne,le]);function oe(n){const s=/^(\d{4})-(\d{4})/.exec(n);return s?s[1]+"~"+s[2]+" 学年":"其他学期"}function de(n,s){const a=i=>{if(i.grade_point!=null)return i.grade_point;if(s&&i.score!=null){const d=s.find(l=>i.score>=l.min&&(i.score<l.max||l.max>=100&&i.score<=l.max));if(d&&d.gp!=null)return d.gp}return null},o=n.map(i=>({...i,grade_point:a(i)})).filter(i=>i.grade_point!=null&&i.credit>0);if(!o.length)return null;const u=o.reduce((i,d)=>i+d.credit,0),x=o.reduce((i,d)=>i+d.grade_point*d.credit,0);return Math.round(x/u*100)/100}function fe(){const n=X(),s=T({queryKey:["grades"],queryFn:D}),a=s.data,o=K("2"),u=K("3"),x=P(()=>{const l=((a==null?void 0:a.overall.tier_dist)??[]).filter(r=>r.count>0);return{tooltip:{trigger:"item"},legend:{orient:"vertical",right:8,top:"middle",itemGap:10,textStyle:{color:o,fontSize:11},itemWidth:10,itemHeight:10},series:[{type:"pie",radius:["48%","72%"],center:["34%","50%"],label:{show:!1},data:l.map(r=>({name:r.label,value:r.count,itemStyle:{color:r.color}}))}]}},[a,n]),i=P(()=>{const l=(a==null?void 0:a.overall.gpa_trend)??[];return{grid:{left:8,right:8,top:36,bottom:6,containLabel:!0},tooltip:{trigger:"axis"},legend:{top:0,left:"center",itemGap:16,textStyle:{color:o,fontSize:11},itemWidth:14,itemHeight:8},xAxis:{type:"category",data:l.map(r=>r.term),axisLine:{lineStyle:{color:u}},axisTick:{show:!1},axisLabel:{color:u,fontSize:10}},yAxis:[{type:"value",min:0,max:100,splitLine:{lineStyle:{color:"rgba(128,138,155,0.15)"}},axisLabel:{color:u,fontSize:10}},{type:"value",min:0,max:5,splitLine:{show:!1},axisLabel:{color:u,fontSize:10}}],series:[{name:"加权平均分",type:"bar",barMaxWidth:18,itemStyle:{color:"#3056d3",borderRadius:[3,3,0,0]},data:l.map(r=>r.avg)},{name:"绩点",type:"line",yAxisIndex:1,smooth:!0,symbolSize:6,itemStyle:{color:"#d97706"},lineStyle:{width:2},data:l.map(r=>r.gpa)}]}},[a,n]);if(s.isLoading)return e.jsx("div",{className:"py-16 text-center text-[13px] text-ink-3",children:"加载中…"});const d=[...(a==null?void 0:a.semesters)??[]].sort((l,r)=>r.term.localeCompare(l.term));return e.jsxs("div",{className:"mx-auto max-w-[1080px] px-3 py-4 sm:px-6 sm:py-5",children:[e.jsxs("div",{className:"mb-4 flex flex-wrap gap-3",children:[e.jsx(z,{label:"总学分",value:(a==null?void 0:a.overall.credits)??0}),e.jsx(z,{label:"加权平均分",value:(a==null?void 0:a.overall.avg)!=null?a.overall.avg:"—"}),e.jsx(z,{label:"已录课程",value:(a==null?void 0:a.overall.courses)??0}),e.jsx(z,{label:"学期数",value:(a==null?void 0:a.semesters.length)??0})]}),e.jsxs("div",{className:"mb-4 grid grid-cols-1 lg:grid-cols-2 gap-4",children:[e.jsxs(C,{children:[e.jsx(G,{title:"单科成绩等级分布"}),e.jsx(q,{children:e.jsx("div",{ref:x,className:"h-[220px]"})})]}),e.jsxs(C,{children:[e.jsx(G,{title:"学期趋势(加权平均分 / 绩点)"}),e.jsx(q,{children:e.jsx("div",{ref:i,className:"h-[220px]"})})]})]}),e.jsx(xe,{bands:(a==null?void 0:a.bands)??[]}),e.jsxs("div",{className:"mb-3 mt-5 flex items-center justify-between",children:[e.jsx("h2",{className:"text-[14px] font-semibold text-ink-1",children:"学年学科成绩"}),e.jsx(je,{})]}),d.length?e.jsx("div",{className:"flex flex-col gap-5",children:ce(d).map(([l,r])=>e.jsxs("section",{children:[e.jsx("div",{className:"mb-2 text-[12px] font-medium text-ink-3",children:l}),e.jsx("div",{className:"flex flex-col gap-3",children:r.map(h=>e.jsx(ue,{sem:h},h.id))})]},l))}):e.jsx(C,{children:e.jsx($,{icon:e.jsx(H,{size:36,strokeWidth:1.5}),title:"暂无学期成绩",description:"新增一个学期(如 2024-2025-1),再录入各科成绩。"})})]})}function ce(n){const s=new Map;for(const a of n){const o=oe(a.term);s.has(o)||s.set(o,[]),s.get(o).push(a)}return[...s.entries()]}function z({label:n,value:s}){return e.jsxs("div",{className:"min-w-[128px] flex-1 max-w-[220px] rounded-lg border border-line bg-surface px-4 py-3 shadow-card",children:[e.jsx("div",{className:"text-[12px] text-ink-3",children:n}),e.jsx("div",{className:"num mt-0.5 text-[22px] font-semibold leading-tight text-ink-1",children:s})]})}function xe({bands:n}){const s=N(),a=f(),[o,u]=p.useState(null),[x,i]=p.useState(null),d=b({mutationFn:W,onSuccess:()=>{a("success","梯度已保存"),s.invalidateQueries({queryKey:["grades"]})},onError:r=>a("error",r.message)}),l=b({mutationFn:J,onSuccess:()=>{s.invalidateQueries({queryKey:["grades"]}),i(null)}});return e.jsxs(C,{children:[e.jsx(G,{title:"成绩梯度",extra:e.jsx("span",{className:"text-[11px] text-ink-3",children:"各校规则不同:每档可设定级与绩点,「自动绩点」按此计算"})}),e.jsxs(q,{className:"p-0",children:[e.jsx("div",{className:"divide-y divide-line",children:n.map(r=>e.jsx(L,{band:r,onSave:h=>d.mutate(h),onDelete:()=>i(r)},r.id))}),e.jsx("div",{className:"border-t border-line px-4 py-2.5",children:o?e.jsx(L,{band:o,isNew:!0,onChange:u,onSave:()=>{d.mutate(o),u(null)},onCancel:()=>u(null)}):e.jsxs(j,{size:"sm",variant:"secondary",onClick:()=>{var r;return u({id:0,label:"",color:"#3056d3",min:0,max:60,gp:null,sort:(((r=n.at(-1))==null?void 0:r.sort)??0)+10})},children:[e.jsx(F,{size:13})," 添加等级"]})})]}),e.jsx(A,{open:!!x,title:"删除等级",content:x?"确定删除「"+x.label+"」吗?已录成绩将不再显示该等级。":"",onCancel:()=>i(null),onOk:()=>x&&l.mutate(x.id)})]})}function L({band:n,onSave:s,onDelete:a,onChange:o,onCancel:u,isNew:x}){const[i,d]=p.useState(n),l=x&&o?i:n,r=m=>{const c={...l,...m};o?o(c):d(c)},h=x||JSON.stringify({...l,id:0})!==JSON.stringify({...n,id:0});return e.jsx("div",{className:"px-4 py-3",children:e.jsxs("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center sm:gap-2.5",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{type:"color",value:l.color,onChange:m=>r({color:m.target.value}),className:"size-6 shrink-0 cursor-pointer rounded border border-line bg-surface","aria-label":"颜色"}),e.jsx(g,{className:"min-w-0 flex-1 sm:w-[96px] sm:flex-none",value:l.label,onChange:m=>r({label:m.target.value}),placeholder:"等级名"})]}),e.jsxs("div",{className:"flex shrink-0 items-center gap-1.5 rounded-md border border-line bg-surface-2 px-2.5 py-1",children:[e.jsx("span",{className:"text-[11px] text-ink-3",children:"分数"}),e.jsx(g,{type:"number",className:"num h-6 w-[64px] border-0 bg-transparent p-0 text-right",value:String(l.min),onChange:m=>r({min:Number(m.target.value)})}),e.jsx("span",{className:"text-[11.5px] text-ink-3",children:"—"}),e.jsx(g,{type:"number",className:"num h-6 w-[64px] border-0 bg-transparent p-0",value:String(l.max),onChange:m=>r({max:Number(m.target.value)})}),e.jsx("span",{className:"ml-1 text-[11px] text-ink-3",children:"绩点"}),e.jsx(g,{type:"number",step:"0.1",className:"num h-6 w-[56px] border-0 bg-transparent p-0",value:l.gp!=null?String(l.gp):"",placeholder:"—",onChange:m=>r({gp:m.target.value===""?null:Number(m.target.value)})})]}),e.jsx("div",{className:"flex items-center gap-1.5 sm:ml-auto",children:x?e.jsxs(e.Fragment,{children:[e.jsx(j,{size:"sm",variant:"primary",onClick:()=>s==null?void 0:s(l),children:"添加"}),e.jsx(j,{size:"sm",variant:"ghost",onClick:()=>u==null?void 0:u(),children:"取消"})]}):e.jsxs(e.Fragment,{children:[e.jsx(j,{size:"sm",variant:h?"primary":"secondary",disabled:!h,onClick:()=>s==null?void 0:s(l),children:"保存"}),e.jsx(j,{size:"icon-sm",variant:"ghost","aria-label":"删除等级",onClick:()=>a==null?void 0:a(),children:e.jsx(_,{size:13})})]})})]})})}function ue({sem:n}){const s=N(),a=f(),o=T({queryKey:["grades"],queryFn:D}),[u,x]=p.useState(null),[i,d]=p.useState(null),[l,r]=p.useState(!1),h=()=>void s.invalidateQueries({queryKey:["grades"]}),m=b({mutationFn:U,onSuccess:()=>{h(),d(null)}}),c=b({mutationFn:()=>{var S;const t=de(n.courses,(S=o.data)==null?void 0:S.bands);if(t==null)throw new Error("请先为课程填写绩点");return B({id:n.id,term:n.term,gpa:t,rank:n.rank??null,total_students:n.total_students??null})},onSuccess:()=>{a("success","绩点已按课程自动计算"),h()},onError:t=>a("error",t.message)}),y=b({mutationFn:()=>Y(n.id),onSuccess:()=>{h(),r(!1),a("success","学期已删除")}});return e.jsxs(C,{children:[e.jsxs("div",{className:"flex min-h-11 flex-col items-start justify-center gap-1.5 border-b border-line px-4 py-2 sm:flex-row sm:items-center sm:justify-between sm:gap-2",children:[e.jsx("h3",{className:"text-[13px] font-semibold text-ink-1",children:n.term}),e.jsxs("div",{className:"flex flex-wrap items-center gap-1.5",children:[e.jsxs(k,{color:"var(--brand-text)",children:["绩点 ",n.gpa??"—"]}),n.rank!=null&&e.jsxs(k,{color:"var(--success)",children:["排名 ",n.rank,"/",n.total_students??"—"]}),e.jsxs(k,{color:"var(--text-3)",children:["均分 ",n.stats.avg??"—"]}),e.jsxs(k,{color:"var(--text-3)",children:[n.stats.credits," 学分"]}),e.jsxs(j,{size:"sm",variant:"ghost",onClick:()=>c.mutate(),disabled:c.isPending,children:[e.jsx(R,{size:13})," 自动绩点"]}),e.jsx(j,{size:"icon-sm",variant:"ghost","aria-label":"编辑学期",onClick:()=>r(!0),children:e.jsx(M,{size:13})})]})]}),e.jsx(q,{className:"p-0",children:e.jsx("div",{className:"hidden overflow-x-auto md:block",children:e.jsx("div",{className:"-mx-1 overflow-x-auto px-1",children:e.jsxs("table",{className:"w-full border-collapse text-[13px]",children:[e.jsx("thead",{children:e.jsx("tr",{children:["课程","学分","分数","等级","绩点",""].map(t=>e.jsx("th",{className:"border-b border-line bg-surface-2 px-3 py-2 text-left text-[12px] font-semibold text-ink-3",children:t},t))})}),e.jsxs("tbody",{children:[n.courses.map(t=>u===t.id?e.jsx(pe,{sem:n,course:t,onDone:()=>x(null)},t.id):e.jsxs("tr",{className:"transition-colors hover:bg-surface-2",children:[e.jsx("td",{className:"border-b border-line px-3 py-2 font-medium text-ink-1",children:t.course_name}),e.jsx("td",{className:"num border-b border-line px-3 py-2 text-ink-2",children:t.credit}),e.jsx("td",{className:"num border-b border-line px-3 py-2",children:t.score!=null?e.jsx("span",{className:"font-medium",children:t.score}):e.jsx("span",{className:"text-ink-3",children:"未录入"})}),e.jsx("td",{className:"border-b border-line px-3 py-2",children:t.band?e.jsx(k,{color:t.band.color,children:t.band.label}):e.jsx("span",{className:"text-ink-3",children:"—"})}),e.jsx("td",{className:"num border-b border-line px-3 py-2 text-ink-2",children:t.grade_point??"—"}),e.jsx("td",{className:"border-b border-line px-3 py-2",children:e.jsxs("div",{className:"flex justify-end gap-1",children:[e.jsx(j,{size:"icon-sm",variant:"ghost","aria-label":"编辑课程",onClick:()=>x(t.id),children:e.jsx(M,{size:13})}),e.jsx(j,{size:"icon-sm",variant:"ghost","aria-label":"删除课程",className:"text-ink-3 hover:text-danger",onClick:()=>d(t),children:e.jsx(_,{size:13})})]})})]},t.id)),e.jsx(me,{sem:n})]})]})})})}),e.jsxs("div",{className:"divide-y divide-line border-t border-line md:hidden",children:[n.courses.map(t=>u===t.id?e.jsx(ge,{sem:n,course:t,onDone:()=>x(null)},"e"+t.id):e.jsxs("div",{className:"p-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"min-w-0 flex-1 truncate text-[13px] font-medium text-ink-1",children:t.course_name}),t.band&&e.jsx(k,{color:t.band.color,children:t.band.label})]}),e.jsxs("div",{className:"num mt-1 flex flex-wrap gap-x-3 text-[11.5px] text-ink-3",children:[e.jsxs("span",{children:["学分 ",t.credit]}),e.jsxs("span",{children:["分数 ",t.score??"—"]}),e.jsxs("span",{children:["绩点 ",t.grade_point??"—"]})]}),e.jsxs("div",{className:"mt-2 flex gap-1.5",children:[e.jsxs(j,{size:"sm",variant:"secondary",onClick:()=>x(t.id),children:[e.jsx(M,{size:12})," 编辑"]}),e.jsxs(j,{size:"sm",variant:"ghost",className:"text-ink-3 hover:text-danger",onClick:()=>d(t),children:[e.jsx(_,{size:12})," 删除"]})]})]},t.id)),e.jsx(he,{sem:n})]}),e.jsx(A,{open:!!i,title:"删除课程",content:i?"确定删除「"+i.course_name+"」吗?":"",onCancel:()=>d(null),onOk:()=>i&&m.mutate(i.id)}),e.jsx(O,{open:l,sem:n,onClose:()=>r(!1),deleteMut:y})]})}function me({sem:n}){const s=N(),a=f(),[o,u]=p.useState(""),[x,i]=p.useState(""),[d,l]=p.useState(""),[r,h]=p.useState(""),m=b({mutationFn:()=>E({semester_id:n.id,course_name:o,credit:Number(x)||0,score:d===""?null:Number(d),grade_point:r===""?null:Number(r)}),onSuccess:()=>{u(""),i(""),l(""),h(""),s.invalidateQueries({queryKey:["grades"]})},onError:c=>a("error",c.message)});return e.jsxs("tr",{className:"bg-surface-2",children:[e.jsx("td",{className:"px-3 py-2",children:e.jsx(g,{className:"h-7 w-[160px]",placeholder:"课程名称",value:o,onChange:c=>u(c.target.value)})}),e.jsx("td",{className:"px-3 py-2",children:e.jsx(g,{type:"number",step:"0.5",className:"num h-7 w-[64px]",placeholder:"0",value:x,onChange:c=>i(c.target.value)})}),e.jsx("td",{className:"px-3 py-2",children:e.jsx(g,{type:"number",className:"num h-7 w-[72px]",placeholder:"0-100",value:d,onChange:c=>l(c.target.value)})}),e.jsx("td",{className:"px-3 py-2 text-ink-3",children:"—"}),e.jsx("td",{className:"px-3 py-2",children:e.jsx(g,{type:"number",step:"0.1",className:"num h-7 w-[64px]",placeholder:"选填",value:r,onChange:c=>h(c.target.value)})}),e.jsx("td",{className:"px-3 py-2",children:e.jsxs(j,{size:"sm",variant:"secondary",disabled:!o.trim()||m.isPending,onClick:()=>m.mutate(),children:[e.jsx(F,{size:13})," 添加"]})})]})}function pe({sem:n,course:s,onDone:a}){const o=N(),u=f(),[x,i]=p.useState(s.course_name),[d,l]=p.useState(String(s.credit)),[r,h]=p.useState(s.score!=null?String(s.score):""),[m,c]=p.useState(s.grade_point!=null?String(s.grade_point):""),y=b({mutationFn:()=>E({id:s.id,semester_id:n.id,course_name:x,credit:Number(d)||0,score:r===""?null:Number(r),grade_point:m===""?null:Number(m)}),onSuccess:()=>{o.invalidateQueries({queryKey:["grades"]}),a()},onError:t=>u("error",t.message)});return e.jsxs("tr",{className:"bg-brand-subtle/40",children:[e.jsx("td",{className:"border-b border-line px-3 py-2",children:e.jsx(g,{className:"h-7 w-[160px]",value:x,onChange:t=>i(t.target.value)})}),e.jsx("td",{className:"border-b border-line px-3 py-2",children:e.jsx(g,{type:"number",step:"0.5",className:"num h-7 w-[64px]",value:d,onChange:t=>l(t.target.value)})}),e.jsx("td",{className:"border-b border-line px-3 py-2",children:e.jsx(g,{type:"number",className:"num h-7 w-[72px]",value:r,onChange:t=>h(t.target.value)})}),e.jsx("td",{className:"border-b border-line px-3 py-2 text-[12px] text-ink-3",children:"保存后按梯度定级"}),e.jsx("td",{className:"border-b border-line px-3 py-2",children:e.jsx(g,{type:"number",step:"0.1",className:"num h-7 w-[64px]",value:m,onChange:t=>c(t.target.value)})}),e.jsx("td",{className:"border-b border-line px-3 py-2",children:e.jsxs("div",{className:"flex justify-end gap-1.5",children:[e.jsx(j,{size:"sm",variant:"primary",onClick:()=>y.mutate(),disabled:y.isPending,children:"保存"}),e.jsx(j,{size:"sm",variant:"ghost",onClick:a,children:"取消"})]})})]})}function he({sem:n}){const s=N(),a=f(),[o,u]=p.useState(""),[x,i]=p.useState(""),[d,l]=p.useState(""),[r,h]=p.useState(""),m=b({mutationFn:()=>E({semester_id:n.id,course_name:o,credit:Number(x)||0,score:d===""?null:Number(d),grade_point:r===""?null:Number(r)}),onSuccess:()=>{u(""),i(""),l(""),h(""),s.invalidateQueries({queryKey:["grades"]}),a("success","课程已添加")},onError:c=>a("error",c.message)});return e.jsxs("div",{className:"p-3",children:[e.jsx(g,{className:"mb-2",placeholder:"课程名称",value:o,onChange:c=>u(c.target.value)}),e.jsxs("div",{className:"mb-2 grid grid-cols-3 gap-2",children:[e.jsx(g,{type:"number",step:"0.5",placeholder:"学分",value:x,onChange:c=>i(c.target.value)}),e.jsx(g,{type:"number",placeholder:"分数",value:d,onChange:c=>l(c.target.value)}),e.jsx(g,{type:"number",step:"0.1",placeholder:"绩点",value:r,onChange:c=>h(c.target.value)})]}),e.jsxs(j,{size:"sm",variant:"primary",disabled:!o.trim()||m.isPending,onClick:()=>m.mutate(),children:[e.jsx(F,{size:13})," 添加课程"]})]})}function ge({sem:n,course:s,onDone:a}){const o=N(),u=f(),[x,i]=p.useState(s.course_name),[d,l]=p.useState(String(s.credit)),[r,h]=p.useState(s.score!=null?String(s.score):""),[m,c]=p.useState(s.grade_point!=null?String(s.grade_point):""),y=b({mutationFn:()=>E({id:s.id,semester_id:n.id,course_name:x,credit:Number(d)||0,score:r===""?null:Number(r),grade_point:m===""?null:Number(m)}),onSuccess:()=>{o.invalidateQueries({queryKey:["grades"]}),a()},onError:t=>u("error",t.message)});return e.jsxs("div",{className:"bg-brand-subtle/40 p-3",children:[e.jsx(g,{className:"mb-2",placeholder:"课程名称",value:x,onChange:t=>i(t.target.value)}),e.jsxs("div",{className:"mb-2 grid grid-cols-3 gap-2",children:[e.jsx(g,{type:"number",step:"0.5",placeholder:"学分",value:d,onChange:t=>l(t.target.value)}),e.jsx(g,{type:"number",placeholder:"分数",value:r,onChange:t=>h(t.target.value)}),e.jsx(g,{type:"number",step:"0.1",placeholder:"绩点",value:m,onChange:t=>c(t.target.value)})]}),e.jsxs("div",{className:"flex gap-1.5",children:[e.jsx(j,{size:"sm",variant:"primary",onClick:()=>y.mutate(),children:"保存"}),e.jsx(j,{size:"sm",variant:"ghost",onClick:a,children:"取消"})]})]})}function je(){const[n,s]=p.useState(!1);return e.jsxs(e.Fragment,{children:[e.jsxs(j,{variant:"primary",size:"md",onClick:()=>s(!0),children:[e.jsx(F,{size:14})," 新增学期"]}),e.jsx(O,{open:n,sem:null,onClose:()=>s(!1)})]})}function O({open:n,sem:s,onClose:a,deleteMut:o}){const u=N(),x=f(),[i,d]=p.useState((s==null?void 0:s.term)??""),[l,r]=p.useState((s==null?void 0:s.gpa)!=null?String(s.gpa):""),[h,m]=p.useState((s==null?void 0:s.rank)!=null?String(s.rank):""),[c,y]=p.useState((s==null?void 0:s.total_students)!=null?String(s.total_students):""),[t,S]=p.useState(""),Q=b({mutationFn:()=>B({id:s==null?void 0:s.id,term:i,gpa:l===""?null:Number(l),rank:h===""?null:Number(h),total_students:c===""?null:Number(c)}),onSuccess:()=>{x("success",s?"学期已更新":"学期已新增"),u.invalidateQueries({queryKey:["grades"]}),a()},onError:v=>S(v.message)});return e.jsx(V,{open:n,onClose:a,width:480,title:s?"编辑学期 · "+s.term:"新增学期",footer:e.jsxs(e.Fragment,{children:[t&&e.jsx("span",{className:"mr-auto text-[12px] text-danger",children:t}),s&&e.jsxs(j,{variant:"danger-ghost",className:"mr-auto",onClick:()=>o==null?void 0:o.mutate(),disabled:o==null?void 0:o.isPending,children:[e.jsx(_,{size:13})," 删除学期"]}),e.jsx(j,{variant:"secondary",onClick:a,children:"取消"}),e.jsx(j,{variant:"primary",onClick:()=>Q.mutate(),disabled:Q.isPending,children:"保存"})]}),children:e.jsxs("div",{className:"flex flex-col gap-3.5",children:[e.jsx(w,{label:"学期名称",required:!0,hint:"如 2024-2025-1",children:e.jsx(g,{value:i,onChange:v=>d(v.target.value),placeholder:"2024-2025-1"})}),e.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[e.jsx(w,{label:"绩点",children:e.jsx(g,{type:"number",step:"0.01",className:"num",value:l,onChange:v=>r(v.target.value),placeholder:"选填"})}),e.jsx(w,{label:"排名",children:e.jsx(g,{type:"number",className:"num",value:h,onChange:v=>m(v.target.value),placeholder:"选填"})}),e.jsx(w,{label:"年级人数",children:e.jsx(g,{type:"number",className:"num",value:c,onChange:v=>y(v.target.value),placeholder:"选填"})})]}),e.jsxs("p",{className:"flex items-start gap-1.5 rounded-md bg-surface-2 px-3 py-2 text-[12px] text-ink-3",children:[e.jsx(R,{size:13,className:"mt-0.5 shrink-0"}),"绩点可手动填写,也可在卡片上点「自动绩点」按课程学分加权计算。"]})]})})}export{fe as GradesPage};
|