import{d as ae,f as Q,r as G,j as c,S as ie,B as A,ah as ue,af as $,a9 as de,ag as me,v as pe,M as fe}from"./index-DYhSDydL.js";import{R as xe,P as he}from"./rotate-ccw-CE3bwRx2.js";const ge={politics:{中共党员:3,中共预备党员:2.5,入党积极分子:2,共青团员:1.5,群众:1},conductDefault:8,integrityDefault:2,sportsFactor:.025,gpaFactor:10,table2:{国家级:{一等奖:3,二等奖:2,三等奖:1,优秀奖:.5},省市级:{一等奖:2,二等奖:1,三等奖:.5,优秀奖:.2},区县级:{一等奖:1,二等奖:.5,三等奖:.2,优秀奖:.1},校级:{一等奖:.5,二等奖:.2,三等奖:.1,优秀奖:.05},二级学院:{一等奖:.2,二等奖:.1,三等奖:.05,优秀奖:0}},table4:{校级:{干部:4,干事:2,社团干部:1,学工助理:2},院级:{干部:3,干事:1.5,支部委员:1.5,支部组长:1,班长:1,团支书:1,班委:.5,社团干部:1,学工助理:2}},publicGood:{无偿献血:.5,捐献骨髓:3,国家级:1.5,省市级:1,区县级:.5,校级:.2,二级学院:.1},rewards:{荣誉称号:{院级:.3,校级:.5,区级:1,市级:1.5,国家级:2},英语等级:{三级:.5,四级:1,六级:2},计算机等级:{一级:.5,二级:1,三级:2},职业资格:{从业资格:.5,初级:1,中级:2,高级:3}},penalties:{留校察看:5,记过:4,严重警告:3,警告:2,通报批评:1}};function J(i){const o=/^(\d{4})-(\d{4})-(1|2)$/.exec(i);if(!o)return null;const m=Number(o[1]);return o[3]==="1"?[m+"-09-01",m+1+"-03-01"]:[m+1+"-03-01",m+1+"-09-01"]}function X(i,o){if(!o)return!0;const m=(i??"").slice(0,10);return m>=o[0]&&mMath.round(i*100)/100;function ee(i,o,m){var u;return!o||!m?null:((u=i.table2[o])==null?void 0:u[m])??null}function ve(i){var W,Z,H,V;const{term:o,records:m,semesters:y,bands:u,weights:g,profile:F,rules:r,ov:j}=i,M=o==="all"?null:J(o),_=m.filter(e=>e.status!=="draft"&&X(e.start_date??e.created_at,M)),N=e=>{var t;return(t=j.itemOverrides)==null?void 0:t[e]},x=(e,t,s,l,v)=>{const d=N(e),C=(d==null?void 0:d.score)??l??0;return{itemKey:e,title:t,source:s,score:C,overridden:(d==null?void 0:d.score)!=null,note:v}},b=(e,t,s,l)=>({key:e,label:t,cap:s,items:l,subtotal:h(l.reduce((v,d)=>v+d.score,0))}),f=[],L=F.political??"",R=Object.keys(r.politics).find(e=>L.includes(e)),P=R?r.politics[R]:1,S=j.conduct??r.conductDefault,E=j.integrity??r.integrityDefault;f.push(b("conduct","品行素质",13,[{itemKey:"politics",title:"思想政治基础分("+(L||"群众")+")",source:"个人信息 · 政治面貌",score:P},{itemKey:"conduct",title:"操行考评成绩",source:"辅导员考评(可修改)",score:S,overridden:j.conduct!=null},{itemKey:"integrity",title:"诚信分",source:"默认满分(可修改)",score:E,overridden:j.integrity!=null}]));const O=[];for(const e of y){if(!X(null,null))continue;const t=o==="all"?null:J(e.term);(o==="all"||M&&t&&!(t[1]<=M[0]||t[0]>=M[1]))&&O.push(...e.courses)}let w=null;const n=e=>{if(e.grade_point!=null)return e.grade_point;if(u&&e.score!=null){const t=u.find(s=>e.score>=s.min&&(e.score=100&&e.score<=s.max));if(t&&t.gp!=null){if(t.gpTop!=null){const s=t.max>=100?t.max:t.max-1,l=(t.gpTop-t.gp)/Math.max(1,s-t.min);return h(t.gp+(e.score-t.min)*l)}return t.gp}}return null},a=e=>g?g[e.category??"其他"]??g.其他??1:1,p=O.map(e=>({...e,grade_point:n(e)})).filter(e=>e.grade_point!=null&&e.credit>0);if(p.length){const e=p.reduce((t,s)=>t+s.credit,0);w=h(p.reduce((t,s)=>t+s.grade_point*a(s)*s.credit,0)/e)}const K=w!=null?Math.min(h(w*r.gpaFactor),60):0;f.push(b("academic","学业成绩",60,[{itemKey:"gpa",title:"平均学分绩点 "+(w!=null?w.toFixed(2):"—")+" × 10",source:"成绩模块 · "+O.length+" 门课程",score:K,note:w==null?"该学期暂无课程成绩":void 0}]));const k=O.filter(e=>/体育/.test(e.course_name)),te=h(k.reduce((e,t)=>e+(t.score??0),0)*r.sportsFactor),B=[];k.length&&B.push({itemKey:"sports",title:"体育成绩("+k.length+" 学期体育课)",source:"体育课成绩之和 × "+r.sportsFactor,score:Math.min(te,5)});const I=[];for(const e of _.filter(t=>t.type_name==="文体活动")){const t=ee(r,z(e.level),Y(e.award_grade));t==null&&!((W=N("w"+e.id))!=null&&W.score)||I.push(x("w"+e.id,e.title,e.type_name+" · "+(e.level??"")+" "+(e.award_grade??""),t))}const se=h(Math.min(I.reduce((e,t)=>e+t.score,0),5));f.push(b("sports","文体素质",10,[...B,{itemKey:"wcap",title:"文体类加分(上限 5 分)",source:I.length+" 条记录",score:se,note:I.map(e=>e.title+" "+e.score+"分").join(";")||"无匹配记录"}]));const T=[];for(const e of _.filter(t=>t.type_name==="竞赛"||t.type_name==="科研")){const t=ee(r,z(e.level),Y(e.award_grade));t==null&&!((Z=N("c"+e.id))!=null&&Z.score)||T.push(x("c"+e.id,e.title,e.type_name+" · "+(e.level??"")+" "+(e.award_grade??""),t))}const re=h(Math.min(T.reduce((e,t)=>e+t.score,0),10)),D=[];for(const e of _.filter(t=>t.type_name==="学生工作")){const t=z(e.level)??"院级",s=(e.role??"")+" "+e.title,l=r.table4[t==="国家级"||t==="省市级"||t==="区县级"?"校级":t]??r.table4.院级;let v=null;for(const[d,C]of Object.entries(l))if(s.includes(d)){v=C;break}v==null&&!((H=N("k"+e.id))!=null&&H.score)||D.push(x("k"+e.id,e.title,"学生工作 · "+(e.level??"院级")+" "+(e.role??""),v,v==null?"请手动填写分值":void 0))}const ne=h(Math.min(D.reduce((e,t)=>e+t.score,0),4)),U=[];for(const e of _.filter(t=>t.type_name==="志愿公益")){const t=z(e.level),s=/献血/.test(e.title);let l=s?r.publicGood.无偿献血:t?r.publicGood[t]??null:null;l==null&&!((V=N("g"+e.id))!=null&&V.score)||U.push(x("g"+e.id,e.title,"公益 · "+(s?"无偿献血":e.level??"校级"),l))}const oe=h(Math.min(U.reduce((e,t)=>e+t.score,0),3));f.push(b("expand","拓展性素质",17,[{itemKey:"ccap",title:"竞赛获奖(上限 10 分)",source:T.length+" 条记录",score:re,note:T.map(e=>e.title+" "+e.score+"分").join(";")||"无匹配记录"},{itemKey:"kcap",title:"担任学生工作(上限 4 分)",source:D.length+" 条记录",score:ne,note:D.map(e=>e.title+" "+e.score+"分").join(";")||"无匹配记录"},{itemKey:"gcap",title:"公益活动(上限 3 分)",source:U.length+" 条记录",score:oe,note:U.map(e=>e.title+" "+e.score+"分").join(";")||"无匹配记录"}]));const q=[];for(const e of _.filter(t=>t.type_name==="荣誉惩处"||t.type_name==="证书技能")){const t=N("h"+e.id),s=e.title+" "+(e.award_grade??"");let l=null,v=e.type_name;if(/留校察看/.test(s))l=-r.penalties.留校察看;else if(/记过/.test(s))l=-r.penalties.记过;else if(/严重警告/.test(s))l=-r.penalties.严重警告;else if(/警告/.test(s))l=-r.penalties.警告;else if(/通报批评/.test(s))l=-r.penalties.通报批评;else if(/六级|专八/.test(s))l=r.rewards.英语等级.六级;else if(/四级|专四/.test(s))l=r.rewards.英语等级.四级;else if(/三级/.test(s)&&/英语/.test(s))l=r.rewards.英语等级.三级;else if(/计算机/.test(s)&&/三级/.test(s))l=r.rewards.计算机等级.三级;else if(/计算机/.test(s)&&/二级/.test(s))l=r.rewards.计算机等级.二级;else if(/计算机/.test(s)&&/一级/.test(s))l=r.rewards.计算机等级.一级;else if(/高级/.test(s))l=r.rewards.职业资格.高级;else if(/中级/.test(s))l=r.rewards.职业资格.中级;else if(/初级/.test(s))l=r.rewards.职业资格.初级;else if(/从业|资格证|教师资格|普通话|驾驶证|软考/.test(s))l=r.rewards.职业资格.从业资格;else{const d=z(e.level),C=d==="省市级"?"市级":d==="区县级"?"区级":d==="二级学院"?"院级":d;C&&r.rewards.荣誉称号[C]!=null&&(l=r.rewards.荣誉称号[C],v="荣誉 · "+C)}l==null&&!(t!=null&&t.score)||q.push(x("h"+e.id,e.title,v,l))}const le=h(Math.max(Math.min(q.reduce((e,t)=>e+t.score,0),5),-5));f.push(b("rewards","奖惩分",5,[{itemKey:"hcap",title:"奖惩合计(±5 分)",source:q.length+" 条记录",score:le,note:q.map(e=>e.title+" "+e.score+"分").join(";")||"无匹配记录"}]));for(const e of j.manual??[]){const t=f.find(s=>s.label===e.section)??f[f.length-1];t.items.push({itemKey:"m"+e.title+e.score,title:e.title,source:"手动添加",score:e.score}),t.subtotal=h(t.items.reduce((s,l)=>s+l.score,0))}const ce=h(f.reduce((e,t)=>{const s=t.key==="rewards"?t.subtotal:Math.min(t.subtotal,t.cap);return e+s},0));return{sections:f,total:ce,gpa:w}}function we(){var S,E,O,w;const i=ae(),o=Q({queryKey:["profile"],queryFn:me}),m=Q({queryKey:["zc-records"],queryFn:()=>pe({page:1,page_size:500})}),y=Q({queryKey:["grades"],queryFn:fe}),u=(S=o.data)==null?void 0:S.content,g={...(u==null?void 0:u.info)??{}},F=((E=u==null?void 0:u.zongce)==null?void 0:E.rules)??ge,[r,j]=G.useState(""),[M,_]=G.useState({});G.useEffect(()=>{var a,p;if(!u)return;_(((a=u.zongce)==null?void 0:a.overrides)??{});const n=(((p=y.data)==null?void 0:p.semesters)??[]).map(K=>K.term);!r&&n.length&&j(n[0])},[u,y.data]);const N=((O=m.data)==null?void 0:O.items)??[],x=M[r]??{},b=G.useMemo(()=>{var n,a,p;return ve({term:r||"all",records:N,semesters:((n=y.data)==null?void 0:n.semesters)??[],bands:(a=y.data)==null?void 0:a.bands,weights:(p=y.data)==null?void 0:p.weights,profile:g,rules:F,ov:x})},[N,y.data,g,F,x,r]),f=n=>{_(a=>({...a,[r]:n})),$({info:g,zongce:{rules:F,overrides:{...M,[r]:n}}}).catch(a=>i("error",a.message))},L=()=>{const n={...M};delete n[r],_(n),$({info:g,zongce:{rules:F,overrides:n}}).then(()=>i("success","已恢复自动计算")).catch(a=>i("error",a.message))},R=r==="all"?"全学年":r,P=()=>{de(async()=>{const{zongceToWordHtml:n}=await import("./zongceWord-DuzvenT-.js");return{zongceToWordHtml:n}},[]).then(({zongceToWordHtml:n})=>{const a=n(R,b.sections,b.total,g),p=new Blob(["\uFEFF"+a],{type:"application/msword"}),K=URL.createObjectURL(p),k=document.createElement("a");k.href=K,k.download="综合素质测评_"+R+".doc",k.click(),setTimeout(()=>URL.revokeObjectURL(K),6e4),i("success","综测材料已导出")})};return c.jsxs("div",{className:"mx-auto max-w-[1080px] px-3 py-4 sm:px-6 sm:py-5",children:[c.jsxs("div",{className:"no-print mb-4 flex flex-wrap items-center justify-between gap-2",children:[c.jsx("h2",{className:"text-[15px] font-semibold text-ink-1",children:"综合测评(自动计算)"}),c.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[c.jsx(ie,{className:"w-[150px]",value:r,onChange:n=>j(n.target.value),options:[...(((w=y.data)==null?void 0:w.semesters)??[]).map(n=>({value:n.term,label:n.term})),{value:"all",label:"全学年"}]}),c.jsxs(A,{variant:"secondary",onClick:L,children:[c.jsx(xe,{size:13})," 恢复自动"]}),c.jsxs(A,{variant:"secondary",onClick:P,children:[c.jsx(ue,{size:13})," 导出材料"]}),c.jsxs(A,{variant:"primary",onClick:()=>window.print(),children:[c.jsx(he,{size:13})," 打印"]})]})]}),c.jsxs("div",{className:"print-sheet mx-auto w-full max-w-[794px] rounded-lg border border-line bg-white p-5 shadow-card sm:p-8",children:[c.jsx("h1",{className:"text-center text-[18px] font-bold text-neutral-900",children:"学生综合素质测评"}),c.jsxs("div",{className:"mt-1 text-center text-[12px] text-neutral-500",children:[g.name??""," · ",g.className??""," · 统计周期:",R]}),c.jsxs("div",{className:"mt-5 rounded-md bg-neutral-100 px-4 py-2 text-center text-[15px] font-bold text-neutral-900",children:["综合素质总分:",c.jsx("span",{className:"num",children:b.total})," 分"]}),b.sections.map(n=>c.jsxs("div",{className:"mt-5",children:[c.jsxs("div",{className:"flex items-baseline justify-between border-b-2 border-neutral-800 pb-1",children:[c.jsxs("span",{className:"text-[13.5px] font-bold text-neutral-900",children:[n.label,"(上限 ",n.cap," 分)"]}),c.jsxs("span",{className:"num text-[12.5px] text-neutral-600",children:["小计 ",n.key==="rewards"?n.subtotal:Math.min(n.subtotal,n.cap)," 分"]})]}),c.jsxs("div",{className:"mt-2 flex flex-col gap-1.5",children:[n.items.map(a=>c.jsxs("div",{className:"flex items-center gap-2 text-[12.5px]",children:[c.jsxs("span",{className:"min-w-0 flex-1",children:[c.jsx("span",{className:"text-neutral-900",children:a.title}),c.jsx("span",{className:"ml-2 text-[11px] text-neutral-400",children:a.source}),a.note&&c.jsx("div",{className:"text-[11px] text-neutral-400",children:a.note})]}),c.jsx("input",{type:"number",step:"0.1",className:"num w-[72px] rounded-sm border border-neutral-200 px-1 py-0.5 text-right text-[12px]",value:a.score,onChange:p=>{var K;if(a.itemKey==="conduct"||a.itemKey==="integrity")f({...x,[a.itemKey]:Number(p.target.value)});else{const k={...x.itemOverrides??{},[a.itemKey]:{...((K=x.itemOverrides)==null?void 0:K[a.itemKey])??{},score:Number(p.target.value)}};f({...x,itemOverrides:k})}}})]},a.itemKey)),!n.items.length&&c.jsx("div",{className:"text-[12px] text-neutral-400",children:"暂无数据"})]})]},n.key)),c.jsx("div",{className:"mt-6 border-t border-neutral-200 pt-3 text-[11px] leading-relaxed text-neutral-400",children:"计分依据:《计算机与网络安全学院学生综合素质测评评分细则》。自动匹配条目均可手动修正分值; 「恢复自动」清除本学期全部手动修正。导出材料前请核对每条加分记录与证明材料一致。"})]})]})}export{we as AssessmentPage};