mirror of
https://github.com/ZeroCatDev/Classworks.git
synced 2026-03-21 17:33:10 +00:00
2 lines
9.3 KiB
JavaScript
2 lines
9.3 KiB
JavaScript
import{_ as L,e as x,c as w,h as v,o as F,l as d,d as k,L as M,i as z,q as _,p as E,g as P}from"./index-Bqe1gKo7.js";import{V as f}from"./VChip-CPVASmWt.js";import{V as b,a as C}from"./VRow-C2iyFaHv.js";import{V as D}from"./VTextField-B7edjjhw.js";import{X as u,Y as h,Z as a,j as l,a1 as c,S as p,$ as A,k as o,_ as V,F as S,a2 as y}from"./vendor-vue-H0jQBZ7T.js";import{a0 as B}from"./vendor-vuetify-ChAgIwn2.js";import"./autofocus-Dh4QPNon.js";const N={name:"AttendanceManagementDialog",props:{modelValue:{type:Boolean,required:!0},studentList:{type:Array,required:!0},attendance:{type:Object,required:!0},dateString:{type:String,default:""}},emits:["update:modelValue","save","change"],setup(){const{mobile:t}=B();return{mobile:t}},data(){return{attendanceSearch:"",attendanceFilter:[]}},computed:{isMobile(){return P("display.forceDesktopMode")?!1:this.mobile},filteredStudents(){let t=[...this.studentList];if(this.attendanceSearch){const e=this.attendanceSearch.toLowerCase();t=t.filter(r=>r.toLowerCase().includes(e))}return this.attendanceFilter&&this.attendanceFilter.length>0&&(t=t.filter(e=>!!(this.attendanceFilter.includes("present")&&this.isPresent(e)||this.attendanceFilter.includes("absent")&&this.isAbsent(e)||this.attendanceFilter.includes("late")&&this.isLate(e)||this.attendanceFilter.includes("exclude")&&this.isExclude(e)))),t},extractedSurnames(){if(!this.studentList||this.studentList.length===0)return[];const t=new Map;return this.studentList.forEach(e=>{if(e&&e.length>0){const r=e.charAt(0);t.set(r,(t.get(r)||0)+1)}}),Array.from(t.entries()).map(([e,r])=>({name:e,count:r})).sort((e,r)=>e.name.localeCompare(r.name,"zh-CN"))}},methods:{toggleFilter(t){const e=this.attendanceFilter.indexOf(t);e===-1?this.attendanceFilter.push(t):this.attendanceFilter.splice(e,1)},isPresent(t){const{absent:e,late:r,exclude:m}=this.attendance;return!e.includes(t)&&!r.includes(t)&&!m.includes(t)},isAbsent(t){return this.attendance.absent.includes(t)},isLate(t){return this.attendance.late.includes(t)},isExclude(t){return this.attendance.exclude.includes(t)},getStudentStatusColor(t){return this.attendance.absent.includes(t)?"error":this.attendance.late.includes(t)?"warning":this.attendance.exclude.includes(t)?"grey":"success"},getStudentStatusIcon(t){return this.attendance.absent.includes(t)?"mdi-account-off":this.attendance.late.includes(t)?"mdi-clock-alert":this.attendance.exclude.includes(t)?"mdi-account-cancel":"mdi-account-check"},removeFromAll(t){const e=this.attendance.absent.indexOf(t);e>-1&&this.attendance.absent.splice(e,1);const r=this.attendance.late.indexOf(t);r>-1&&this.attendance.late.splice(r,1);const m=this.attendance.exclude.indexOf(t);m>-1&&this.attendance.exclude.splice(m,1)},setPresent(t){this.removeFromAll(t),this.$emit("change")},setAbsent(t){this.removeFromAll(t),this.attendance.absent.push(t),this.$emit("change")},setLate(t){this.removeFromAll(t),this.attendance.late.push(t),this.$emit("change")},setExclude(t){this.removeFromAll(t),this.attendance.exclude.push(t),this.$emit("change")},setAllPresent(){this.attendance.absent.splice(0,this.attendance.absent.length),this.attendance.late.splice(0,this.attendance.late.length),this.attendance.exclude.splice(0,this.attendance.exclude.length),this.$emit("change")},setAllAbsent(){this.setAllPresent(),this.attendance.absent.push(...this.studentList),this.$emit("change")},setAllLate(){this.setAllPresent(),this.attendance.late.push(...this.studentList),this.$emit("change")},setAllExclude(){this.setAllPresent(),this.attendance.exclude.push(...this.studentList),this.$emit("change")}}},O={class:"d-flex flex-wrap mt-2 gap-1"},T={class:"d-flex flex-wrap mb-4 gap-2"},q={class:"flex-grow-1"},I={class:"d-flex align-center"},j={class:"text-subtitle-1"},U={class:"attendance-actions"},R={class:"d-flex flex-wrap gap-2"};function X(t,e,r,m,s,i){return u(),h(E,{"model-value":r.modelValue,fullscreen:i.isMobile,"fullscreen-breakpoint":"sm","max-width":"900","onUpdate:modelValue":e[7]||(e[7]=n=>t.$emit("update:modelValue",n))},{default:a(()=>[l(x,null,{default:a(()=>[l(w,{class:"d-flex align-center"},{default:a(()=>[l(v,{class:"mr-2",icon:"mdi-account-group"}),e[8]||(e[8]=c(" 考勤 ",-1)),l(F),i.isMobile?A("",!0):(u(),h(f,{key:0,class:"ml-2",color:"primary",size:"small"},{default:a(()=>[c(p(r.dateString),1)]),_:1})),i.isMobile?(u(),h(d,{key:1,icon:"mdi-close",variant:"text",onClick:e[0]||(e[0]=n=>t.$emit("update:modelValue",!1))})):A("",!0)]),_:1}),l(k,null,{default:a(()=>[l(b,{class:"mb-4"},{default:a(()=>[l(C,{cols:"12",md:"12"},{default:a(()=>[l(D,{modelValue:s.attendanceSearch,"onUpdate:modelValue":e[1]||(e[1]=n=>s.attendanceSearch=n),clearable:"",hint:"支持筛选姓氏,如输入'孙'可筛选所有姓孙的学生",label:"搜索学生","prepend-inner-icon":"mdi-magnify",variant:"outlined"},null,8,["modelValue"]),o("div",O,[(u(!0),V(S,null,y(i.extractedSurnames,n=>(u(),h(d,{key:n.name,color:s.attendanceSearch===n.name?"primary":"",variant:s.attendanceSearch===n.name?"elevated":"text",onClick:g=>s.attendanceSearch=s.attendanceSearch===n.name?"":n.name},{default:a(()=>[c(p(n.name)+" ("+p(n.count)+") ",1)]),_:2},1032,["color","variant","onClick"]))),128))])]),_:1})]),_:1}),o("div",T,[o("div",null,[l(f,{"append-icon":s.attendanceFilter.includes("present")?"mdi-check":"",color:s.attendanceFilter.includes("present")?"success":"",variant:s.attendanceFilter.includes("present")?"elevated":"tonal",class:"px-2 filter-chip","prepend-icon":"mdi-account-check",value:"present",onClick:e[2]||(e[2]=n=>i.toggleFilter("present"))},{default:a(()=>[...e[9]||(e[9]=[c(" 到课 ",-1)])]),_:1},8,["append-icon","color","variant"]),l(f,{"append-icon":s.attendanceFilter.includes("absent")?"mdi-check":"",color:s.attendanceFilter.includes("absent")?"error":"",variant:s.attendanceFilter.includes("absent")?"elevated":"tonal",class:"px-2 filter-chip","prepend-icon":"mdi-account-off",value:"absent",onClick:e[3]||(e[3]=n=>i.toggleFilter("absent"))},{default:a(()=>[...e[10]||(e[10]=[c(" 请假 ",-1)])]),_:1},8,["append-icon","color","variant"]),l(f,{"append-icon":s.attendanceFilter.includes("late")?"mdi-check":"",color:s.attendanceFilter.includes("late")?"warning":"",variant:s.attendanceFilter.includes("late")?"elevated":"tonal",class:"px-2 filter-chip","prepend-icon":"mdi-clock-alert",value:"late",onClick:e[4]||(e[4]=n=>i.toggleFilter("late"))},{default:a(()=>[...e[11]||(e[11]=[c(" 迟到 ",-1)])]),_:1},8,["append-icon","color","variant"]),l(f,{"append-icon":s.attendanceFilter.includes("exclude")?"mdi-check":"",color:s.attendanceFilter.includes("exclude")?"grey":"",variant:s.attendanceFilter.includes("exclude")?"elevated":"tonal",class:"px-2 filter-chip","prepend-icon":"mdi-account-cancel",value:"exclude",onClick:e[5]||(e[5]=n=>i.toggleFilter("exclude"))},{default:a(()=>[...e[12]||(e[12]=[c(" 不参与 ",-1)])]),_:1},8,["append-icon","color","variant"])])]),l(b,null,{default:a(()=>[(u(!0),V(S,null,y(i.filteredStudents,n=>(u(),h(C,{key:n,cols:"12",lg:"4",md:"6",sm:"6"},{default:a(()=>[l(x,{border:"",class:"student-card"},{default:a(()=>[l(k,{class:"d-flex align-center pa-2"},{default:a(()=>[o("div",q,[o("div",I,[l(M,{color:i.getStudentStatusColor(n),class:"mr-2",size:"24"},{default:a(()=>[l(v,{size:"small"},{default:a(()=>[c(p(i.getStudentStatusIcon(n)),1)]),_:2},1024)]),_:2},1032,["color"]),o("div",j,p(n),1)])]),o("div",U,[l(d,{color:i.isPresent(n)?"success":"",title:"设为到课",icon:"mdi-account-check",size:i.isMobile?"default":"small",variant:"text",onClick:g=>i.setPresent(n)},null,8,["color","size","onClick"]),l(d,{color:i.isAbsent(n)?"error":"",title:"设为请假",icon:"mdi-account-off",size:i.isMobile?"default":"small",variant:"text",onClick:g=>i.setAbsent(n)},null,8,["color","size","onClick"]),l(d,{color:i.isLate(n)?"warning":"",title:"设为迟到",icon:"mdi-clock-alert",size:i.isMobile?"default":"small",variant:"text",onClick:g=>i.setLate(n)},null,8,["color","size","onClick"]),l(d,{color:i.isExclude(n)?"grey":"",title:"设为不参与",icon:"mdi-account-cancel",size:i.isMobile?"default":"small",variant:"text",onClick:g=>i.setExclude(n)},null,8,["color","size","onClick"])])]),_:2},1024)]),_:2},1024)]),_:2},1024))),128))]),_:1}),l(b,null,{default:a(()=>[l(C,{cols:"12",md:"12"},{default:a(()=>[l(x,{class:"mb-4",color:"primary",variant:"tonal"},{default:a(()=>[l(k,null,{default:a(()=>[e[17]||(e[17]=o("div",{class:"text-subtitle-2 mb-2"},"批量操作",-1)),o("div",R,[l(d,{class:"flex-grow-1",color:"success","prepend-icon":"mdi-account-check",onClick:i.setAllPresent},{default:a(()=>[...e[13]||(e[13]=[c(" 全部到齐 ",-1)])]),_:1},8,["onClick"]),l(d,{class:"flex-grow-1",color:"error","prepend-icon":"mdi-account-off",onClick:i.setAllAbsent},{default:a(()=>[...e[14]||(e[14]=[c(" 全部请假 ",-1)])]),_:1},8,["onClick"]),l(d,{class:"flex-grow-1",color:"warning","prepend-icon":"mdi-clock-alert",onClick:i.setAllLate},{default:a(()=>[...e[15]||(e[15]=[c(" 全部迟到 ",-1)])]),_:1},8,["onClick"]),l(d,{class:"flex-grow-1",color:"grey","prepend-icon":"mdi-account-cancel",onClick:i.setAllExclude},{default:a(()=>[...e[16]||(e[16]=[c(" 全部不参与 ",-1)])]),_:1},8,["onClick"])])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1}),l(z),l(_,null,{default:a(()=>[l(F),l(d,{color:"primary",onClick:e[6]||(e[6]=n=>t.$emit("save"))},{default:a(()=>[l(v,{start:""},{default:a(()=>[...e[18]||(e[18]=[c("mdi-content-save",-1)])]),_:1}),e[19]||(e[19]=c(" 保存 ",-1))]),_:1})]),_:1})]),_:1})]),_:1},8,["model-value","fullscreen"])}const W=L(N,[["render",X],["__scopeId","data-v-c09d5574"]]);export{W as default};
|