mirror of
https://github.com/ZeroCatDev/Classworks.git
synced 2025-09-03 16:19:22 +00:00
12 lines
61 KiB
JavaScript
12 lines
61 KiB
JavaScript
import{_ as M,k as y,s as z,j as k,o as d,w as l,d as i,l as C,q as F,t as o,v as _,x as N,y as g,z as V,i as h,A as p,B as x,C as f,D as re,F as S,E as W,T as H,G as w,e as K,H as B,I as oe,J as U,K as P,R as A,L as de,M as j,N as ue,r as ce,n as Y,O as G,P as X,Q as me,S as he,U as fe,W as I,X as pe,Y as ge,Z as be,$ as E,a0 as ye,a1 as J}from"./index-B01HL2YE.js";import{V as q}from"./VTextField-DDMIr0_j.js";import{V as Q}from"./VTooltip-B8rVhLY6.js";import{V as L}from"./VChip-DGb8BoIB.js";import{V as ke}from"./VMenu-3aVeBIH6.js";import{V as ve}from"./VDatePicker-Jh1kvgOm.js";import{_ as $,a as ee,p as Z}from"./index-thJlQnLx.js";import{V as Se}from"./VTextarea-BaoCeePe.js";import{V as xe,a as we}from"./VAppBarTitle-CQLnBe80.js";import{V as De}from"./VContainer-yTxlmOws.js";import{V as R,a as O}from"./VRow-CmZZJImz.js";const Ce={name:"RandomPicker",props:{studentList:{type:Array,required:!0},attendance:{type:Object,required:!0,default:()=>({absent:[],late:[],exclude:[]})}},data(){return{dialog:!1,count:y("randomPicker.defaultCount"),isPickingStarted:!1,isAnimating:!1,pickedStudents:[],animationStudents:[],highlightedIndices:[],animationTimer:null,getSetting:y,tempFilters:{excludeAbsent:y("randomPicker.excludeAbsent"),excludeLate:y("randomPicker.excludeLate"),excludeExcluded:y("randomPicker.excludeExcluded")},pickerMode:y("randomPicker.mode"),minNumber:y("randomPicker.minNumber"),maxNumber:y("randomPicker.maxNumber")}},computed:{absentCount(){return this.attendance.absent?this.attendance.absent.length:0},lateCount(){return this.attendance.late?this.attendance.late.length:0},excludedCount(){return this.attendance.exclude?this.attendance.exclude.length:0},numberModeStudents(){if(this.pickerMode!=="number")return[];const t=[];for(let e=this.minNumber;e<=this.maxNumber;e++)t.push(e.toString().padStart(2,"0")+"号");return t},filteredStudents(){return this.pickerMode==="number"?this.numberModeStudents:!this.studentList||!this.studentList.length?[]:this.studentList.filter(t=>!(this.tempFilters.excludeAbsent&&this.attendance.absent.includes(t)||this.tempFilters.excludeLate&&this.attendance.late.includes(t)||this.tempFilters.excludeExcluded&&this.attendance.exclude.includes(t)))},availableStudents(){return this.filteredStudents},maxAllowedCount(){return Math.min(10,this.filteredStudents.length)},remainingStudents(){return this.filteredStudents.filter(t=>!this.pickedStudents.includes(t))}},watch:{dialog(t){t?(this.count=y("randomPicker.defaultCount"),this.isPickingStarted=!1,this.isAnimating=!1,this.pickedStudents=[],this.tempFilters={excludeAbsent:y("randomPicker.excludeAbsent"),excludeLate:y("randomPicker.excludeLate"),excludeExcluded:y("randomPicker.excludeExcluded")}):this.animationTimer&&(clearTimeout(this.animationTimer),this.animationTimer=null)},tempFilters:{handler(){this.count>this.maxAllowedCount&&(this.count=Math.max(1,this.maxAllowedCount))},deep:!0},pickerMode:{handler(t){z("randomPicker.mode",t)}},minNumber:{handler(t){t>this.maxNumber&&(this.minNumber=this.maxNumber),t<1&&(this.minNumber=1),z("randomPicker.minNumber",this.minNumber)}},maxNumber:{handler(t){t<this.minNumber&&(this.maxNumber=this.minNumber),t>100&&(this.maxNumber=100),z("randomPicker.maxNumber",this.maxNumber)}}},methods:{open(){this.dialog=!0},incrementCount(){this.count<this.maxAllowedCount&&this.count++},decrementCount(){this.count>1&&this.count--},startPicking(){this.filteredStudents.length!==0&&(this.isPickingStarted=!0,y("randomPicker.animation")?this.startAnimation():this.finishPicking())},startAnimation(){this.isAnimating=!0,this.animationStudents=this.filteredStudents.map((t,e)=>({id:`student-${e}`,name:t})),this.animateHighlight()},animateHighlight(){let e=0;const n=50,r=()=>{this.highlightedIndices=[];const s=[];for(let m=0;m<this.count;m++){let c;do c=Math.floor(Math.random()*this.animationStudents.length);while(s.includes(c));s.push(c)}this.highlightedIndices=s,e++;const a=n+e*20;e<5?this.animationTimer=setTimeout(r,a):setTimeout(()=>{this.finishPicking()},500)};r()},finishPicking(){this.isAnimating=!1;const t=[...this.filteredStudents].sort(()=>.5-Math.random());this.pickedStudents=t.slice(0,this.count)},resetPicker(){this.isPickingStarted=!1,this.isAnimating=!1,this.pickedStudents=[],this.animationTimer&&(clearTimeout(this.animationTimer),this.animationTimer=null)},refreshSingleStudent(t){if(this.remainingStudents.length===0)return;const e=Math.floor(Math.random()*this.remainingStudents.length),n=this.remainingStudents[e];this.pickedStudents[t]=n;const r=document.querySelectorAll(".result-card");r[t]&&(r[t].classList.add("refresh-animation"),setTimeout(()=>{r[t].classList.remove("refresh-animation")},500))}}},Le={class:"d-flex justify-center align-center counter-container"},Ve={class:"count-display mx-8"},_e={class:"text-h2 font-weight-bold"},Fe={class:"mode-switch-container mt-6"},Te={key:0,class:"number-range-container mt-4"},Pe={class:"d-flex justify-center align-center gap-4"},Ae={class:"mt-4"},Ne={key:1,class:"mt-4 text-error"},Ee={class:"mt-4 text-caption"},je={class:"pa-2"},ze={key:0},Be={key:1},Me={key:2},Re={key:1,class:"d-flex flex-wrap justify-center gap-2 mt-4"},Ue={key:0,class:"animation-container"},Ie={class:"animation-wrapper"},Oe={key:1,class:"result-container"},He={class:"mt-8 d-flex justify-center"};function qe(t,e,n,r,s,a){return d(),k(B,{modelValue:s.dialog,"onUpdate:modelValue":e[8]||(e[8]=m=>s.dialog=m),"max-width":"600","fullscreen-breakpoint":"sm",persistent:""},{default:l(()=>[i(C,{class:"random-picker-card",rounded:"xl",border:""},{default:l(()=>[i(F,{class:"text-h5 d-flex align-center"},{default:l(()=>[i(_,{icon:"mdi-account-question",class:"mr-2"}),e[9]||(e[9]=o(" 随机点名 ",-1)),i(N),i(g,{icon:"mdi-close",variant:"text",onClick:e[0]||(e[0]=m=>s.dialog=!1)})]),_:1}),s.isPickingStarted?(d(),k(V,{key:1,class:"text-center py-6"},{default:l(()=>[s.isAnimating?(d(),p("div",Ue,[h("div",Ie,[i(H,{name:"shuffle",tag:"div",class:"shuffle-container"},{default:l(()=>[(d(!0),p(S,null,w(s.animationStudents,(m,c)=>(d(),p("div",{key:m.id,class:K(["student-item",{highlighted:s.highlightedIndices.includes(c)}])},f(m.name),3))),128))]),_:1})])])):(d(),p("div",Oe,[e[19]||(e[19]=h("div",{class:"text-h6 mb-4"},"抽取结果",-1)),(d(!0),p(S,null,w(s.pickedStudents,(m,c)=>(d(),k(C,{key:c,variant:"outlined",color:"primary",class:"mb-2 result-card"},{default:l(()=>[i(V,{class:"text-h4 text-center py-4 d-flex align-center justify-center"},{default:l(()=>[o(f(m)+" ",1),i(g,{icon:"mdi-refresh",variant:"text",size:"small",class:"ml-2 refresh-btn",onClick:b=>a.refreshSingleStudent(c),disabled:a.remainingStudents.length===0,title:a.remainingStudents.length===0?"没有更多可用学生":"重新抽取此学生"},null,8,["onClick","disabled","title"])]),_:2},1024)]),_:2},1024))),128)),h("div",He,[i(g,{color:"primary","prepend-icon":"mdi-refresh",onClick:a.resetPicker,size:"large",class:"mx-2"},{default:l(()=>[...e[17]||(e[17]=[o(" 重新抽取 ",-1)])]),_:1},8,["onClick"]),i(g,{color:"grey",variant:"outlined",onClick:e[7]||(e[7]=m=>s.dialog=!1),size:"large",class:"mx-2"},{default:l(()=>[...e[18]||(e[18]=[o(" 关闭 ",-1)])]),_:1})])]))]),_:1})):(d(),k(V,{key:0,class:"text-center py-6"},{default:l(()=>[e[16]||(e[16]=h("div",{class:"text-h6 mb-4"},"请选择抽取人数",-1)),h("div",Le,[i(g,{size:"x-large",icon:"mdi-minus",variant:"tonal",color:"primary",disabled:s.count<=1,onClick:a.decrementCount,class:"counter-btn"},null,8,["disabled","onClick"]),h("div",Ve,[h("span",_e,f(s.count),1),e[10]||(e[10]=h("span",{class:"text-subtitle-1 ml-2"},"人",-1))]),i(g,{size:"x-large",icon:"mdi-plus",variant:"tonal",color:"primary",disabled:s.count>=a.maxAllowedCount,onClick:a.incrementCount,class:"counter-btn"},null,8,["disabled","onClick"])]),h("div",Fe,[i(re,{modelValue:s.pickerMode,"onUpdate:modelValue":e[1]||(e[1]=m=>s.pickerMode=m),color:"primary",rounded:"pill",mandatory:"",class:"mode-toggle"},{default:l(()=>[i(g,{value:"name","prepend-icon":"mdi-account"},{default:l(()=>[...e[11]||(e[11]=[o("姓名模式",-1)])]),_:1}),i(g,{value:"number","prepend-icon":"mdi-numeric"},{default:l(()=>[...e[12]||(e[12]=[o("学号模式",-1)])]),_:1})]),_:1},8,["modelValue"])]),s.pickerMode==="number"?(d(),p("div",Te,[e[14]||(e[14]=h("div",{class:"text-subtitle-1 mb-2"},"学号范围设置",-1)),h("div",Pe,[i(q,{modelValue:s.minNumber,"onUpdate:modelValue":e[2]||(e[2]=m=>s.minNumber=m),modelModifiers:{number:!0},label:"最小值",type:"number",min:"1",max:"100","hide-details":"",class:"number-input",density:"compact"},null,8,["modelValue"]),e[13]||(e[13]=h("span",{class:"mx-2"},"至",-1)),i(q,{modelValue:s.maxNumber,"onUpdate:modelValue":e[3]||(e[3]=m=>s.maxNumber=m),modelModifiers:{number:!0},label:"最大值",type:"number",min:"1",max:"100","hide-details":"",class:"number-input",density:"compact"},null,8,["modelValue"])])])):x("",!0),h("div",Ae,[i(g,{size:"x-large",color:"primary","prepend-icon":"mdi-dice-multiple",onClick:a.startPicking,disabled:a.filteredStudents.length===0,class:"start-btn"},{default:l(()=>[...e[15]||(e[15]=[o(" 开始抽取 ",-1)])]),_:1},8,["onClick","disabled"])]),a.filteredStudents.length===0?(d(),p("div",Ne,[s.pickerMode==="name"?(d(),p(S,{key:0},[o(" 没有可抽取的学生,请调整过滤选项 ")],64)):(d(),p(S,{key:1},[o(" 请设置有效的学号范围 ")],64))])):x("",!0),h("div",Ee,[o(" 当前可抽取学生: "+f(a.filteredStudents.length)+"人 ",1),s.pickerMode==="name"?(d(),k(Q,{key:0,location:"bottom"},{activator:l(({props:m})=>[i(_,W(m,{icon:"mdi-information-outline",size:"small",class:"ml-1"}),null,16)]),default:l(()=>[h("div",je,[s.tempFilters.excludeAbsent?(d(),p("div",ze," • 已排除请假学生 ("+f(a.absentCount)+"人) ",1)):x("",!0),s.tempFilters.excludeLate?(d(),p("div",Be," • 已排除迟到学生 ("+f(a.lateCount)+"人) ",1)):x("",!0),s.tempFilters.excludeExcluded?(d(),p("div",Me," • 已排除不参与学生 ("+f(a.excludedCount)+"人) ",1)):x("",!0)])]),_:1})):x("",!0),s.pickerMode==="name"?(d(),p("div",Re,[i(L,{color:s.tempFilters.excludeLate?"warning":"default",variant:s.tempFilters.excludeLate?"elevated":"text",onClick:e[4]||(e[4]=m=>s.tempFilters.excludeLate=!s.tempFilters.excludeLate),"prepend-icon":"mdi-clock-alert",class:"filter-chip"},{default:l(()=>[o(f(s.tempFilters.excludeLate?"排除":"包含")+"迟到学生 ",1)]),_:1},8,["color","variant"]),i(L,{color:s.tempFilters.excludeAbsent?"error":"default",variant:s.tempFilters.excludeAbsent?"elevated":"text",onClick:e[5]||(e[5]=m=>s.tempFilters.excludeAbsent=!s.tempFilters.excludeAbsent),"prepend-icon":"mdi-account-off",class:"filter-chip"},{default:l(()=>[o(f(s.tempFilters.excludeAbsent?"排除":"包含")+"请假学生 ",1)]),_:1},8,["color","variant"]),i(L,{color:s.tempFilters.excludeExcluded?"grey":"default",variant:s.tempFilters.excludeExcluded?"elevated":"text",onClick:e[6]||(e[6]=m=>s.tempFilters.excludeExcluded=!s.tempFilters.excludeExcluded),"prepend-icon":"mdi-account-cancel",class:"filter-chip"},{default:l(()=>[o(f(s.tempFilters.excludeExcluded?"排除":"包含")+"不参与学生 ",1)]),_:1},8,["color","variant"])])):x("",!0)])]),_:1}))]),_:1})]),_:1},8,["modelValue"])}const te=M(Ce,[["render",qe],["__scopeId","data-v-fd7ac224"]]),Ke={name:"FloatingICP",data(){return{isHovered:!1}}};function Ye(t,e,n,r,s,a){return d(),k(oe,null,{default:l(()=>[i(C,{class:"floating-icp",elevation:"2",rounded:"pill",variant:"tonal",color:"surface-variant",onMouseenter:e[0]||(e[0]=m=>s.isHovered=!0),onMouseleave:e[1]||(e[1]=m=>s.isHovered=!1)},{default:l(()=>[i(g,{variant:"text",class:"icp-button",href:"https://beian.miit.gov.cn/",target:"_blank",rel:"noopener noreferrer"},{default:l(()=>[i(_,{icon:"mdi-shield-check",size:"small",class:K([{"rotate-icon":s.isHovered},"mr-1"])},null,8,["class"]),e[2]||(e[2]=h("span",{class:"text-caption"},"浙ICP备2024068645号",-1))]),_:1})]),_:1})]),_:1})}const se=M(Ke,[["render",Ye],["__scopeId","data-v-890f3fb8"]]),Ge={name:"FloatingToolbar",props:{loading:{type:Boolean,default:!1},unreadCount:{type:Number,default:0},selectedDate:{type:[String,Date],required:!0},isToday:{type:Boolean,required:!0}},data(){return{isExpanded:!1}},methods:{handleDateSelect(t){this.$emit("date-select",t)}}};function Xe(t,e,n,r,s,a){return d(),k(de,null,{default:l(()=>[i(C,{class:K(["floating-toolbar",{"toolbar-expanded":s.isExpanded}]),elevation:"4",rounded:"xl"},{default:l(()=>[i(U,{variant:"text",class:"toolbar-buttons"},{default:l(()=>[P(i(g,{icon:"mdi-chevron-left",variant:"text",onClick:e[0]||(e[0]=m=>t.$emit("prev-day")),title:"查看昨天",class:"toolbar-btn"},null,512),[[A]]),P(i(g,{icon:"mdi-format-font-size-decrease",variant:"text",onClick:e[1]||(e[1]=m=>t.$emit("zoom","out")),title:"缩小字体",class:"toolbar-btn"},null,512),[[A]]),P(i(g,{icon:"mdi-format-font-size-increase",variant:"text",onClick:e[2]||(e[2]=m=>t.$emit("zoom","up")),title:"放大字体",class:"toolbar-btn"},null,512),[[A]]),i(ke,{location:"top","close-on-content-click":!1},{activator:l(({props:m})=>[P(i(g,W({icon:"mdi-calendar",variant:"text"},m,{title:"选择日期",class:"toolbar-btn"}),null,16),[[A]])]),default:l(()=>[i(C,{border:"",class:"date-picker-card"},{default:l(()=>[i(ve,{"model-value":n.selectedDate,color:"primary","onUpdate:modelValue":a.handleDateSelect},null,8,["model-value","onUpdate:modelValue"])]),_:1})]),_:1}),P(i(g,{icon:"mdi-refresh",variant:"text",loading:n.loading,onClick:e[3]||(e[3]=m=>t.$emit("refresh")),title:"刷新数据",class:"toolbar-btn"},null,8,["loading"]),[[A]]),n.isToday?x("",!0):P((d(),k(g,{key:0,icon:"mdi-chevron-right",variant:"text",onClick:e[4]||(e[4]=m=>t.$emit("next-day")),title:"查看明天",class:"toolbar-btn"},null,512)),[[A]])]),_:1})]),_:1},8,["class"])]),_:1})}const ne=M(Ge,[["render",Xe],["__scopeId","data-v-4c0541bf"]]),Je={name:"HomeworkEditDialog",props:{modelValue:{type:Boolean,required:!0},title:{type:String,required:!0},initialContent:{type:String,default:""},autoSave:{type:Boolean,default:!1}},emits:["update:modelValue","save"],data(){return{content:"",templateData:null,currentLine:"",currentLineStart:0,currentLineEnd:0,quickTexts:["课","题","T","P"]}},computed:{dialogVisible:{get(){return this.modelValue},set(t){this.$emit("update:modelValue",t)}},subject(){return this.title},hasTemplates(){var t,e;return!!((e=(t=this.templateData)==null?void 0:t.actions)!=null&&e.length||this.subjectBooks||this.commonBooks)},subjectBooks(){var t,e,n;return!this.subject||!((n=(e=(t=this.templateData)==null?void 0:t.subjects)==null?void 0:e[this.subject])!=null&&n.books)?null:this.templateData.subjects[this.subject].books},commonBooks(){var t,e;return(e=(t=this.templateData)==null?void 0:t.commonSubject)!=null&&e.books?this.templateData.commonSubject.books:null}},watch:{async modelValue(t){if(t){this.content=this.initialContent;try{this.templateData=await j.loadData("classworks-config-homework-template")}catch(e){console.error("Failed to load homework templates:",e),this.templateData=null}this.$nextTick(()=>{this.$refs.inputRef&&(this.$refs.inputRef.focus(),this.updateCurrentLine())})}}},methods:{handleClose(){const t=this.content.trim();t!==this.initialContent.trim()&&this.$emit("save",t),this.dialogVisible=!1},updateCurrentLine(){const e=this.$refs.inputRef.$el.querySelector("textarea").selectionStart,n=this.content;let r=0;const s=n.split(`
|
||
`);for(let a=0;a<s.length;a++){const m=s[a].length,c=r+m;if(e<=c||a===s.length-1){this.currentLine=s[a],this.currentLineStart=r,this.currentLineEnd=c;break}r=c+1}this.currentLine||(this.currentLine="",this.currentLineStart=n.length,this.currentLineEnd=n.length)},isBookSelected(t){return this.currentLine.includes(t)},isPageSelected(t,e){return this.currentLine.includes(e)},handleBookClick(t){if(this.isBookSelected(t)){const e=this.content.split(`
|
||
`),n=e.findIndex(r=>r.includes(t));n!==-1&&(e.splice(n,1),this.content=e.join(`
|
||
`))}else{const e=this.content.trim().length>0;this.content=(e?this.content.trim()+`
|
||
`:"")+t}this.$nextTick(()=>{const e=this.$refs.inputRef.$el.querySelector("textarea");if(e.focus(),!this.isBookSelected(t)){const n=this.content.split(`
|
||
`);let r=0;for(let s=0;s<n.length;s++){if(n[s].includes(t)){r+=n[s].length;break}r+=n[s].length+1}e.setSelectionRange(r,r)}this.updateCurrentLine()})},handlePageClick(t,e){if(this.isPageSelected(t,e)){const n=this.currentLineStart,r=this.currentLineEnd,s=this.content.slice(n,r),a=s.lastIndexOf(e);if(a!==-1){const m=s.slice(0,a)+s.slice(a+e.length);this.content=this.content.slice(0,n)+m.trim()+this.content.slice(r)}}else{const n=this.currentLineStart,r=this.currentLineEnd,s=this.content.slice(n,r);this.content=this.content.slice(0,n)+s.trim()+(s.trim().length>0?" ":"")+e+this.content.slice(r)}this.$nextTick(()=>{const n=this.$refs.inputRef.$el.querySelector("textarea");n.focus();const r=this.content.split(`
|
||
`);let s=0;for(let a=0;a<r.length&&(s+=r[a].length,!(s>this.currentLineStart));a++)s+=1;n.setSelectionRange(s,s),this.updateCurrentLine()})},insertTemplate(t){const e=this.$refs.inputRef.$el.querySelector("textarea"),n=e.selectionStart,r=e.selectionEnd,s=n>0&&this.content[n-1]!==" "&&this.content[n-1]!==`
|
||
`;this.content=this.content.slice(0,n)+(s?" ":"")+t+this.content.slice(r),this.$nextTick(()=>{e.focus();const a=n+t.length+(s?1:0);e.setSelectionRange(a,a),this.updateCurrentLine()})},insertAtCursor(t){if(!t)return;const e=this.$refs.inputRef.$el.querySelector("textarea"),n=e.selectionStart,r=e.selectionEnd;this.content=this.content.slice(0,n)+t+this.content.slice(r),this.$nextTick(()=>{e.focus();const s=n+t.length;e.setSelectionRange(s,s),this.updateCurrentLine()})},deleteLastChar(){const t=this.$refs.inputRef.$el.querySelector("textarea"),e=t.selectionStart,n=t.selectionEnd;e===n?e>0&&(this.content=this.content.slice(0,e-1)+this.content.slice(e),this.$nextTick(()=>{t.focus(),t.setSelectionRange(e-1,e-1),this.updateCurrentLine()})):(this.content=this.content.slice(0,e)+this.content.slice(n),this.$nextTick(()=>{t.focus(),t.setSelectionRange(e,e),this.updateCurrentLine()}))}}},Ze={class:"d-flex"},We={class:"flex-grow-1"},Qe={key:0,class:"mt-4"},$e={key:0,class:"template-buttons"},et={key:0,class:"pages-container mt-2"},tt={key:0,class:"pages-container mt-2"},st={key:2,class:"button-group"},nt={key:1,class:"text-center text-body-2 text-disabled mt-2"},at={class:"quick-tools ml-4",style:{"min-width":"180px"}},it={class:"numeric-keypad mb-4"},lt={class:"keypad-row"},rt={class:"keypad-row"},ot={class:"keypad-row"},dt={class:"keypad-row"},ut={class:"keypad-row"},ct={class:"d-flex flex-wrap gap-1"};function mt(t,e,n,r,s,a){return d(),k(B,{modelValue:a.dialogVisible,"onUpdate:modelValue":e[5]||(e[5]=m=>a.dialogVisible=m),width:"auto","max-width":"900","onClick:outside":a.handleClose},{default:l(()=>[i(C,{border:""},{default:l(()=>[i(F,null,{default:l(()=>[o(f(n.title),1)]),_:1}),i(ue,null,{default:l(()=>[o(f(n.autoSave?"喵?喵呜!":"写完后点击上传谢谢喵"),1)]),_:1}),i(V,null,{default:l(()=>{var m;return[h("div",Ze,[h("div",We,[i(Se,{ref:"inputRef",modelValue:s.content,"onUpdate:modelValue":e[0]||(e[0]=c=>s.content=c),"auto-grow":"",placeholder:"使用换行表示分条",rows:"5",onClick:a.updateCurrentLine,onKeyup:a.updateCurrentLine,width:"480"},null,8,["modelValue","onClick","onKeyup"]),s.templateData?(d(),p("div",Qe,[a.hasTemplates?(d(),p("div",$e,[a.subjectBooks?(d(!0),p(S,{key:0},w(a.subjectBooks,(c,b)=>(d(),p("div",{key:b,class:"button-group"},[i(L,{class:"ma-1 book-chip",color:a.isBookSelected(b)?"success":"default",variant:a.isBookSelected(b)?"elevated":"flat",onClick:v=>a.handleBookClick(b)},{default:l(()=>[o(f(b),1)]),_:2},1032,["color","variant","onClick"]),a.isBookSelected(b)?(d(),p("div",et,[(d(!0),p(S,null,w(c,v=>(d(),k(L,{key:v,class:"ma-1",color:a.isPageSelected(b,v)?"info":"default",variant:a.isPageSelected(b,v)?"elevated":"flat",onClick:T=>a.handlePageClick(b,v)},{default:l(()=>[o(f(v),1)]),_:2},1032,["color","variant","onClick"]))),128))])):x("",!0)]))),128)):x("",!0),a.commonBooks?(d(!0),p(S,{key:1},w(a.commonBooks,(c,b)=>(d(),p("div",{key:b,class:"button-group"},[i(L,{class:"ma-1 book-chip",color:a.isBookSelected(b)?"success":"default",variant:a.isBookSelected(b)?"elevated":"flat",onClick:v=>a.handleBookClick(b)},{default:l(()=>[o(f(b),1)]),_:2},1032,["color","variant","onClick"]),a.isBookSelected(b)?(d(),p("div",tt,[(d(!0),p(S,null,w(c,v=>(d(),k(L,{key:v,class:"ma-1",color:a.isPageSelected(b,v)?"info":"default",variant:a.isPageSelected(b,v)?"elevated":"flat",onClick:T=>a.handlePageClick(b,v)},{default:l(()=>[o(f(v),1)]),_:2},1032,["color","variant","onClick"]))),128))])):x("",!0)]))),128)):x("",!0),(m=s.templateData.actions)!=null&&m.length?(d(),p("div",st,[(d(!0),p(S,null,w(s.templateData.actions,c=>(d(),k(L,{key:c,class:"ma-1",color:"primary",variant:"flat",onClick:b=>a.insertTemplate(c)},{default:l(()=>[o(f(c),1)]),_:2},1032,["onClick"]))),128))])):x("",!0)])):(d(),p("div",nt," 暂无可用的模板 "))])):x("",!0)]),h("div",at,[h("div",it,[h("div",lt,[(d(),p(S,null,w(3,c=>i(g,{key:c,size:"small",variant:"tonal",class:"keypad-btn",onClick:b=>a.insertAtCursor(String(c))},{default:l(()=>[o(f(c),1)]),_:2},1032,["onClick"])),64))]),h("div",rt,[(d(),p(S,null,w(3,c=>i(g,{key:c,size:"small",variant:"tonal",class:"keypad-btn",onClick:b=>a.insertAtCursor(String(c+3))},{default:l(()=>[o(f(c+3),1)]),_:2},1032,["onClick"])),64))]),h("div",ot,[(d(),p(S,null,w(3,c=>i(g,{key:c,size:"small",variant:"tonal",class:"keypad-btn",onClick:b=>a.insertAtCursor(String(c+6))},{default:l(()=>[o(f(c+6),1)]),_:2},1032,["onClick"])),64))]),h("div",dt,[i(g,{size:"small",variant:"tonal",class:"keypad-btn",onClick:e[1]||(e[1]=c=>a.insertAtCursor("-"))},{default:l(()=>[...e[6]||(e[6]=[o(" - ",-1)])]),_:1}),i(g,{size:"small",variant:"tonal",class:"keypad-btn",onClick:e[2]||(e[2]=c=>a.insertAtCursor("0"))},{default:l(()=>[...e[7]||(e[7]=[o(" 0 ",-1)])]),_:1}),i(g,{size:"small",variant:"tonal",class:"keypad-btn",color:"error",onClick:a.deleteLastChar},{default:l(()=>[...e[8]||(e[8]=[o(" ← ",-1)])]),_:1},8,["onClick"])]),h("div",ut,[i(g,{size:"small",variant:"tonal",class:"keypad-btn space-btn",onClick:e[3]||(e[3]=c=>a.insertAtCursor(" "))},{default:l(()=>[...e[9]||(e[9]=[o(" 空格 ",-1)])]),_:1}),i(g,{size:"small",variant:"tonal",class:"keypad-btn space-btn",onClick:e[4]||(e[4]=c=>a.insertAtCursor(`
|
||
`))},{default:l(()=>[...e[10]||(e[10]=[o(" 换行 ",-1)])]),_:1})])]),h("div",ct,[(d(!0),p(S,null,w(s.quickTexts,c=>(d(),k(g,{key:c,size:"small",variant:"flat",onClick:b=>a.insertAtCursor(c)},{default:l(()=>[o(f(c),1)]),_:2},1032,["onClick"]))),128))])])])]}),_:1})]),_:1})]),_:1},8,["modelValue","onClick:outside"])}const ae=M(Je,[["render",mt],["__scopeId","data-v-632e8bbf"]]);function ht(t,e){let n=null;return function(...r){n&&clearTimeout(n),n=setTimeout(()=>{t.apply(this,r)},e)}}function ft(t,e){let n=null,r=0;return function(...s){const a=Date.now();a-r<e?(n&&clearTimeout(n),n=setTimeout(()=>{r=a,t.apply(this,s)},e)):(r=a,t.apply(this,s))}}const pt={name:"Classworks 作业板",components:{MessageLog:ee,RandomPicker:te,NamespaceAccess:$,FloatingToolbar:ne,FloatingICP:se,HomeworkEditDialog:ae},data(){const t=[{name:"语文",order:0},{name:"数学",order:1},{name:"英语",order:2},{name:"物理",order:3},{name:"化学",order:4},{name:"生物",order:5},{name:"政治",order:6},{name:"历史",order:7},{name:"地理",order:8},{name:"其他",order:9}];return{dataKey:"",provider:"",useDisplay:J,state:{classNumber:"",studentList:[],boardData:{homework:{},attendance:{absent:[],late:[],exclude:[]}},dialogVisible:!1,dialogTitle:"",textarea:"",dateString:"",synced:!1,attendDialogVisible:!1,contentStyle:{"font-size":`${y("font.size")}px`},uploadLoading:!1,downloadLoading:!1,snackbar:!1,snackbarText:"",fontSize:y("font.size"),datePickerDialog:!1,selectedDate:new Date().toISOString().split("T")[0].replace(/-/g,""),selectedDateObj:new Date,refreshInterval:null,showNoDataMessage:!1,noDataMessage:"",isToday:!1,attendanceDialog:!1,availableSubjects:t,isFullscreen:!1},loading:{download:!1,upload:!1,students:!1},debouncedUpload:null,throttledReflow:null,sortedItemsCache:{key:"",value:[]},confirmDialog:{show:!1,resolve:null,reject:null},attendanceSearch:"",attendanceFilter:[],urlConfigDialog:{show:!1,config:null,changes:[],validSettings:{},confirmHandler:null,cancelHandler:null,icons:{}}}},computed:{isMobile(){return J().mobile.value},titleText(){const t=this.getToday(),e=new Date(t);e.setDate(e.getDate()-1);const n=this.state.dateString,r=this.formatDate(t),s=this.formatDate(e);return n===r?"今天的作业":n===s?"昨天的作业":`${n}的作业`},sortedItems(){const t=`${JSON.stringify(this.state.boardData.homework)}_${this.subjectOrder.join()}_${this.dynamicSort}`;if(this.sortedItemsCache.key===t)return this.sortedItemsCache.value;const e=Object.entries(this.state.boardData.homework).filter(([,r])=>{var s;return(s=r.content)==null?void 0:s.trim()}).map(([r,s])=>{var a;return{key:r,name:((a=this.state.availableSubjects.find(m=>m.name===r))==null?void 0:a.name)||r,content:s.content,order:this.subjectOrder.indexOf(r),rowSpan:Math.ceil((s.content.split(`
|
||
`).filter(m=>m.trim()).length+1)*.8)}}),n=this.dynamicSort?this.optimizeGridLayout(e):e.sort((r,s)=>r.order-s.order);return this.updateSortedItemsCache(t,n),n},unusedSubjects(){const t=Object.keys(this.state.boardData.homework).filter(e=>{var n;return(n=this.state.boardData.homework[e].content)==null?void 0:n.trim()});return this.state.availableSubjects.filter(e=>!t.includes(e.name)).sort((e,n)=>e.order-n.order)},emptySubjects(){return this.emptySubjectDisplay!=="button"?[]:this.unusedSubjects},autoSave(){return y("edit.autoSave")},blockNonTodayAutoSave(){return y("edit.blockNonTodayAutoSave")},isToday(){const t=(()=>{const e=new Date,n=e.getFullYear(),r=String(e.getMonth()+1).padStart(2,"0"),s=String(e.getDate()).padStart(2,"0");return`${n}${r}${s}`})();return this.state.dateString===t},canAutoSave(){return this.autoSave&&(!this.blockNonTodayAutoSave||this.isToday)},needConfirmSave(){return!this.isToday&&this.confirmNonTodaySave},shouldShowBlockedMessage(){return!this.isToday&&this.autoSave&&this.blockNonTodayAutoSave},refreshBeforeEdit(){return y("edit.refreshBeforeEdit")},emptySubjectDisplay(){return y("display.emptySubjectDisplay")},dynamicSort(){return y("display.dynamicSort")},isEditingDisabled(){return this.state.uploadLoading||this.state.downloadLoading},unreadCount(){var t;return((t=this.$refs.messageLog)==null?void 0:t.unreadCount)||0},showRandomPickerButton(){return y("randomPicker.enabled")},showListCardButton(){return y("display.showListCard")},confirmNonTodaySave(){return y("edit.confirmNonTodaySave")},shouldShowSaveConfirm(){return!this.isToday&&this.confirmNonTodaySave},shouldBlockAutoSave(){return!this.isToday&&this.autoSave&&this.blockNonTodayAutoSave},showFullscreenButton(){return y("display.showFullscreenButton")},showExamScheduleButton(){return y("display.showExamScheduleButton")},showAntiScreenBurnCard(){return y("display.showAntiScreenBurnCard")},filteredStudents(){let t=[...this.state.studentList];if(this.attendanceSearch){const e=this.attendanceSearch.toLowerCase();t=t.filter(n=>n.toLowerCase().includes(e))}return this.attendanceFilter&&this.attendanceFilter.length>0&&(t=t.filter(e=>{const n=this.state.studentList.indexOf(e);return!!(this.attendanceFilter.includes("present")&&this.isPresent(n)||this.attendanceFilter.includes("absent")&&this.isAbsent(n)||this.attendanceFilter.includes("late")&&this.isLate(n)||this.attendanceFilter.includes("exclude")&&this.isExclude(n))})),t},extractedSurnames(){if(!this.state.studentList||this.state.studentList.length===0)return[];const t=new Map;return this.state.studentList.forEach(e=>{if(e&&e.length>0){const n=e.charAt(0);t.has(n)?t.set(n,t.get(n)+1):t.set(n,1)}}),Array.from(t.entries()).map(([e,n])=>({name:e,count:n})).sort((e,n)=>{const r=Z(e.name,{toneType:"none",mode:"surname"}),s=Z(n.name,{toneType:"none",mode:"surname"});return r.localeCompare(s)})},subjectOrder(){return[...this.state.availableSubjects].sort((t,e)=>t.order-e.order).map(t=>t.name)}},watch:{homeworkData:{handler(){this.$nextTick(()=>{this.$refs.waterfall&&this.$refs.waterfall.reflow()})},deep:!0},"$vuetify.display.width":{handler(){this.throttledReflow()},deep:!0}},created(){this.debouncedUpload=ht(this.uploadData,2e3),this.throttledReflow=ft(()=>{this.$refs.gridContainer&&this.optimizeGridLayout(this.sortedItems)},200)},async mounted(){try{this.updateBackendUrl(),await this.initializeData(),this.setupAutoRefresh(),this.unwatchSettings=ye(()=>{this.updateSettings()}),document.addEventListener("fullscreenchange",this.fullscreenChangeHandler),document.addEventListener("webkitfullscreenchange",this.fullscreenChangeHandler),document.addEventListener("mozfullscreenchange",this.fullscreenChangeHandler),document.addEventListener("MSFullscreenChange",this.fullscreenChangeHandler),this.checkHashForRandomPicker(),window.addEventListener("hashchange",this.checkHashForRandomPicker)}catch(t){console.error("初始化失败:",t),this.showError("初始化失败,请刷新页面重试")}},beforeUnmount(){this.unwatchSettings&&this.unwatchSettings(),this.state.refreshInterval&&clearInterval(this.state.refreshInterval),document.removeEventListener("fullscreenchange",this.fullscreenChangeHandler),document.removeEventListener("webkitfullscreenchange",this.fullscreenChangeHandler),document.removeEventListener("mozfullscreenchange",this.fullscreenChangeHandler),document.removeEventListener("MSFullscreenChange",this.fullscreenChangeHandler),window.removeEventListener("hashchange",this.checkHashForRandomPicker)},methods:{ensureDate(t){if(t instanceof Date)return t;if(typeof t=="string"){const e=new Date(t);if(!isNaN(e.getTime()))return e}return new Date},formatDate(t){const e=this.ensureDate(t),n=e.getFullYear(),r=String(e.getMonth()+1).padStart(2,"0"),s=String(e.getDate()).padStart(2,"0");return`${n}${r}${s}`},getToday(){return new Date},async initializeData(){const t=await this.parseUrlConfig(),n=new URLSearchParams(window.location.search).get("date"),r=this.getToday();let s=r;if(n){if(/^\d{8}$/.test(n)){const a=n.substring(0,4),m=n.substring(4,6),c=n.substring(6,8);s=new Date(`${a}-${m}-${c}`)}else s=new Date(n);isNaN(s.getTime())&&(s=r)}if(this.state.dateString=this.formatDate(s),this.state.selectedDate=this.state.dateString,this.state.selectedDateObj=s,this.state.isToday=this.formatDate(s)===this.formatDate(r),!t){this.provider=y("server.provider");const a=y("server.classNumber");this.state.classNumber=a}await Promise.all([this.downloadData(),this.loadConfig()])},async downloadData(){var t,e,n;if(!this.loading.download)try{this.loading.download=!0;const r=await j.loadData("classworks-data-"+this.state.dateString);if(r.success==!1)if(r.error.code==="NOT_FOUND")this.state.showNoDataMessage=!0,this.state.noDataMessage=r.error.message,this.state.boardData={homework:{},attendance:{absent:[],late:[],exclude:[]}};else throw new Error(r.error.message);else this.state.boardData={homework:r.homework||{},attendance:{absent:((t=r.attendance)==null?void 0:t.absent)||[],late:((e=r.attendance)==null?void 0:e.late)||[],exclude:((n=r.attendance)==null?void 0:n.exclude)||[]}},this.state.synced=!0,this.state.showNoDataMessage=!1,this.$message.success("下载成功","数据已更新")}catch(r){this.state.boardData={homework:{},attendance:{absent:[],late:[],exclude:[]}},this.$message.error("下载失败",r.message)}finally{this.loading.download=!1}},async trySave(t=!1){if(t&&!this.canAutoSave)return this.shouldShowBlockedMessage&&this.showMessage("需要手动保存","已禁止自动保存非当天数据","warning"),!1;if(!t&&this.needConfirmSave)try{await this.showConfirmDialog()}catch{return!1}try{return await this.uploadData(),!0}catch(e){return this.$message.error("保存失败",e.message||"请重试"),!1}},async handleClose(){var n;if(!this.currentEditSubject)return;const t=this.state.textarea.trim(),e=((n=this.state.boardData.homework[this.currentEditSubject])==null?void 0:n.content)||"";t!==e.trim()&&(this.state.boardData.homework[this.currentEditSubject]={content:t},this.state.synced=!1,this.autoSave&&await this.trySave(!0)),this.state.dialogVisible=!1},async uploadData(){if(!this.loading.upload)try{this.loading.upload=!0;const t=await j.saveData("classworks-data-"+this.state.dateString,this.state.boardData);if(t.success==!1)throw new Error(t.error.message);this.state.synced=!0,this.$message.success(t.message||"保存成功")}finally{this.loading.upload=!1}},async loadConfig(){try{try{const t=await j.loadData("classworks-list-main");t.success!=!1&&Array.isArray(t)&&(this.state.studentList=t.map(e=>e.name))}catch(t){console.warn("Failed to load student list from dedicated key, falling back to config",t)}await this.loadSubjects()}catch(t){console.error("加载配置失败:",t),this.$message.error("加载配置失败",t.message)}},async loadSubjects(){try{const t=await j.loadData("classworks-config-subject");t&&Array.isArray(t)&&(this.state.availableSubjects=t)}catch(t){console.warn("Failed to load subject configuration:",t)}},showSyncMessage(){this.$message.success("数据已同步","数据已完成与服务器同步")},async openDialog(t){var e;if(this.refreshBeforeEdit)try{await this.downloadData()}catch(n){console.error("刷新数据失败:",n),this.$message.error("刷新数据失败,可能显示的不是最新数据")}this.currentEditSubject=t,this.state.boardData.homework[t]||(this.state.boardData.homework[t]={content:""}),this.state.dialogTitle=((e=this.state.availableSubjects.find(n=>n.name===t))==null?void 0:e.name)||t,this.state.textarea=this.state.boardData.homework[t].content,this.state.dialogVisible=!0},async handleHomeworkSave(t){this.currentEditSubject&&(this.state.boardData.homework[this.currentEditSubject]={content:t},this.state.synced=!1,this.autoSave&&await this.trySave(!0))},splitPoint(t){return t.split(`
|
||
`).filter(e=>e.trim())},setAttendanceArea(){this.state.attendanceDialog=!0},toggleStudentStatus(t){const e=this.state.studentList[t];this.state.boardData.attendance.absent.includes(e)?(this.state.boardData.attendance.absent=this.state.boardData.attendance.absent.filter(n=>n!==e),this.state.boardData.attendance.late.push(e)):this.state.boardData.attendance.late.includes(e)?(this.state.boardData.attendance.late=this.state.boardData.attendance.late.filter(n=>n!==e),this.state.boardData.attendance.exclude.push(e)):this.state.boardData.attendance.exclude.includes(e)?this.state.boardData.attendance.exclude=this.state.boardData.attendance.exclude.filter(n=>n!==e):this.state.boardData.attendance.absent.push(e),this.state.synced=!1,this.canAutoSave&&this.uploadData()},cleanstudentslist(){this.state.boardData.attendance.absent=[],this.state.boardData.attendance.late=[],this.state.boardData.attendance.exclude=[],this.state.synced=!1,this.canAutoSave&&this.uploadData()},zoom(t){t==="up"&&this.state.fontSize<100?this.state.fontSize+=2:t==="out"&&this.state.fontSize>16&&(this.state.fontSize-=2),this.state.contentStyle={"font-size":`${this.state.fontSize}px`},z("font.size",this.state.fontSize)},updateBackendUrl(){const t=y("server.provider"),e=y("server.classNumber");this.provider=t,this.state.classNumber=e},setupAutoRefresh(){const t=y("refresh.auto"),e=y("refresh.interval");this.state.refreshInterval&&clearInterval(this.state.refreshInterval),t&&(this.state.refreshInterval=setInterval(()=>{this.shouldSkipRefresh()||this.downloadData()},e*1e3))},shouldSkipRefresh(){return!!(this.state.dialogVisible||this.state.attendanceDialog||this.confirmDialog.show||this.state.datePickerDialog||this.loading.upload||this.loading.download||!this.state.synced)},updateSettings(){this.state.fontSize=y("font.size"),this.state.contentStyle={"font-size":`${this.state.fontSize}px`},this.setupAutoRefresh(),this.updateBackendUrl()},async handleDateSelect(t){if(t)try{const e=this.ensureDate(t),n=this.formatDate(e);this.state.dateString!==n&&(this.state.dateString=n,this.state.selectedDate=n,this.state.selectedDateObj=e,this.state.isToday=n===this.formatDate(this.getToday()),this.$router.replace({query:{date:n}}).catch(()=>{}),await Promise.all([this.downloadData(),this.loadSubjects()]))}catch(e){console.error("Date processing error:",e),this.$message.error("日期处理错误","请重新选择日期")}},optimizeGridLayout(t){const e=Math.min(3,Math.floor(window.innerWidth/300));if(e<=1)return t;const n=Array.from({length:e},()=>({height:0,items:[]}));return t.forEach(r=>{const s=n.reduce((a,m,c)=>m.height<n[a].height?c:a,0);n[s].items.push(r),n[s].height+=r.rowSpan}),n.flatMap(r=>r.items).map((r,s)=>({...r,order:s}))},setAllPresent(){this.state.boardData.attendance={absent:[],late:[],exclude:[]},this.state.synced=!1},setAllAbsent(){this.state.boardData.attendance.absent=[...this.state.studentList],this.state.boardData.attendance.late=[],this.state.boardData.attendance.exclude=[],this.state.synced=!1},setAllLate(){this.state.boardData.attendance.absent=[],this.state.boardData.attendance.late=[...this.state.studentList],this.state.boardData.attendance.exclude=[],this.state.synced=!1},setAllExclude(){this.state.boardData.attendance.absent=[],this.state.boardData.attendance.late=[],this.state.boardData.attendance.exclude=[...this.state.studentList],this.state.synced=!1},isPresent(t){const e=this.state.studentList[t],{absent:n,late:r,exclude:s}=this.state.boardData.attendance;return!n.includes(e)&&!r.includes(e)&&!s.includes(e)},isAbsent(t){return this.state.boardData.attendance.absent.includes(this.state.studentList[t])},isLate(t){return this.state.boardData.attendance.late.includes(this.state.studentList[t])},isExclude(t){return this.state.boardData.attendance.exclude.includes(this.state.studentList[t])},setPresent(t){const e=this.state.studentList[t];this.state.boardData.attendance.absent=this.state.boardData.attendance.absent.filter(n=>n!==e),this.state.boardData.attendance.late=this.state.boardData.attendance.late.filter(n=>n!==e),this.state.boardData.attendance.exclude=this.state.boardData.attendance.exclude.filter(n=>n!==e),this.state.synced=!1},setAbsent(t){const e=this.state.studentList[t];this.setPresent(t),this.state.boardData.attendance.absent.push(e),this.state.synced=!1},setLate(t){const e=this.state.studentList[t];this.setPresent(t),this.state.boardData.attendance.late.push(e),this.state.synced=!1},setExclude(t){const e=this.state.studentList[t];this.setPresent(t),this.state.boardData.attendance.exclude.push(e),this.state.synced=!1},async saveAttendance(){try{await this.trySave(!0),this.state.attendanceDialog=!1}catch(t){console.error("保存出勤状态失败:",t),this.$message.error("保存失败","请重试")}},showMessage(t,e="",n="success"){this.$message[n](t,e)},updateSortedItemsCache(t,e){this._sortedItemsCache={key:t,value:e}},handleMouseMove(t){const e=t.currentTarget,n=e.getBoundingClientRect(),r=(t.clientX-n.left)/n.width*100,s=(t.clientY-n.top)/n.height*100;e.style.setProperty("--x",`${r}%`),e.style.setProperty("--y",`${s}%`)},handleTouchMove(t){if(t.touches.length===1){const e=t.touches[0],n=t.currentTarget,r=n.getBoundingClientRect(),s=(e.clientX-r.left)/r.width*100,a=(e.clientY-r.top)/r.height*100;n.style.setProperty("--x",`${s}%`),n.style.setProperty("--y",`${a}%`)}},showConfirmDialog(){return new Promise((t,e)=>{this.confirmDialog={show:!0,resolve:()=>{this.confirmDialog.show=!1,t()},reject:()=>{this.confirmDialog.show=!1,e(new Error("用户取消保存"))}}})},confirmSave(){this.confirmDialog.show=!1,this.confirmDialog.resolve&&this.confirmDialog.resolve(!0)},cancelSave(){this.confirmDialog.show=!1,this.confirmDialog.reject&&this.confirmDialog.reject(new Error("用户取消保存"))},async manualUpload(){return this.trySave(!1)},async handleAttendanceDialogClose(t){!t&&!this.state.synced&&await this.trySave(!0)},toggleFullscreen(){this.state.isFullscreen?this.exitFullscreen():this.enterFullscreen()},enterFullscreen(){const t=document.documentElement;t.requestFullscreen?t.requestFullscreen():t.webkitRequestFullScreen?t.webkitRequestFullScreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.msRequestFullscreen&&t.msRequestFullscreen()},exitFullscreen(){document.exitFullscreen?document.exitFullscreen():document.webkitExitFullscreen?document.webkitExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.msExitFullscreen&&document.msExitFullscreen()},fullscreenChangeHandler(){this.state.isFullscreen=!!(document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement)},getStudentStatusColor(t){const e=this.state.studentList[t];return this.state.boardData.attendance.absent.includes(e)?"error":this.state.boardData.attendance.late.includes(e)?"warning":this.state.boardData.attendance.exclude.includes(e)?"grey":"success"},getStudentStatusVariant(t){const e=this.state.studentList[t];return this.state.boardData.attendance.absent.includes(e)||this.state.boardData.attendance.late.includes(e)||this.state.boardData.attendance.exclude.includes(e)?"tonal":"outlined"},getStudentStatusIcon(t){const e=this.state.studentList[t];return this.state.boardData.attendance.absent.includes(e)?"mdi-account-off":this.state.boardData.attendance.late.includes(e)?"mdi-clock-alert":this.state.boardData.attendance.exclude.includes(e)?"mdi-account-cancel":"mdi-account-check"},getStudentStatusText(t){const e=this.state.studentList[t];return this.state.boardData.attendance.absent.includes(e)?"请假":this.state.boardData.attendance.late.includes(e)?"迟到":this.state.boardData.attendance.exclude.includes(e)?"不参与":"到课"},toggleFilter(t){const e=this.attendanceFilter.indexOf(t);e===-1?this.attendanceFilter.push(t):this.attendanceFilter.splice(e,1)},openRandomPicker(){this.$refs.randomPicker&&this.$refs.randomPicker.open()},checkHashForRandomPicker(){window.location.hash==="#random-picker"&&this.$nextTick(()=>{console.log("打开随机点名"),window.location.hash="",this.openRandomPicker()})},parseUrlConfig(){try{const e=new URLSearchParams(window.location.search).get("config");if(!e)return!1;try{const n=atob(e),r=Uint8Array.from(n,v=>v.charCodeAt(0)),s=new TextDecoder().decode(r),a=JSON.parse(s);console.log("从URL读取配置:",a);const m=[],c={},b={};return this.processSpecialSettings(a,m,c),this.processStandardSettings(a,m,c,b),Object.keys(c).length===0?(console.log("URL配置与当前配置相同,无需应用"),!1):new Promise(v=>{this.urlConfigDialog={show:!0,config:a,changes:m,validSettings:c,icons:b,confirmHandler:()=>{this.urlConfigDialog.show=!1,this.applyUrlConfig(c),v(!0)},cancelHandler:()=>{this.urlConfigDialog.show=!1,v(!1)}}})}catch(n){return console.error("解析URL配置错误:",n),this.$message.error("URL配置错误","无法解析配置数据"),!1}}catch(t){return console.error("处理URL配置错误:",t),!1}},processSpecialSettings(t,e,n){var r,s;if(t.classNumber!==void 0){const a=y("server.classNumber");t.classNumber!==a&&(e.push({key:"server.classNumber",name:"班级",oldValue:a,newValue:t.classNumber,description:((r=E["server.classNumber"])==null?void 0:r.description)||"班级编号",icon:((s=E["server.classNumber"])==null?void 0:s.icon)||"mdi-account-group"}),n["server.classNumber"]=t.classNumber)}t.date!==void 0&&t.date!==this.state.dateString&&(e.push({key:"date",name:"日期",oldValue:this.state.dateString,newValue:t.date,description:"查看的日期",icon:"mdi-calendar"}),n.date=t.date),t.subjects&&Array.isArray(t.subjects)&&(e.push({key:"subjects",name:"科目列表",oldValue:`${this.state.availableSubjects.length}个科目`,newValue:`${t.subjects.length}个科目`,description:"可用科目列表",icon:"mdi-notebook"}),n.subjects=t.subjects)},processStandardSettings(t,e,n,r){Object.entries(t).forEach(([s,a])=>{if(["classNumber","date","subjects"].includes(s))return;let m=s,c=E[s];if(!c&&!s.includes(".")){const b=["server.","display.","theme.","edit.","refresh.","font.","randomPicker."];for(const v of b){const T=`${v}${s}`;if(E[T]){m=T,c=E[T];break}}}if(c){let b=this.convertValueToCorrectType(a,c.type);if(c.validate&&!c.validate(b)){console.warn(`URL配置项 ${m} 的值无效: ${a}`);return}const v=y(m);b!==v&&(e.push({key:m,name:this.getSettingDisplayName(m),oldValue:this.formatSettingValue(v),newValue:this.formatSettingValue(b),description:c.description||m,icon:c.icon||"mdi-cog"}),n[m]=b,r[m]=c.icon||"mdi-cog")}else e.push({key:s,name:this.getSettingDisplayName(s),oldValue:"未知",newValue:this.formatSettingValue(a),description:"自定义配置项",icon:"mdi-cog-outline"}),n[s]=a,r[s]="mdi-cog-outline"})},convertValueToCorrectType(t,e){return e==="boolean"?!!t:e==="number"?Number(t):String(t)},formatSettingValue(t){return typeof t=="boolean"?t?"开启":"关闭":t===""||t===null||t===void 0?"空":t.toString()},getSettingDisplayName(t){const e=t.split("."),n=e[e.length-1];return{provider:"数据提供方",domain:"服务器域名",classNumber:"班级编号",emptySubjectDisplay:"空科目显示方式",dynamicSort:"动态排序",showRandomButton:"随机按钮",showFullscreenButton:"全屏按钮",cardHoverEffect:"卡片悬浮效果",enhancedTouchMode:"增强触摸模式",showAntiScreenBurnCard:"防烧屏卡片",mode:"主题模式",size:"字体大小",autoSave:"自动保存",blockNonTodayAutoSave:"禁止自动保存非当日",refreshBeforeEdit:"编辑前刷新",confirmNonTodaySave:"非当日保存确认",auto:"自动刷新",interval:"刷新间隔"}[n]||n},safeBase64Decode(t){try{return be.decode(t)}catch(e){throw console.error("Base64解码错误:",e),new Error("无法解码配置数据")}},applyUrlConfig(t){for(const[e,n]of Object.entries(t)){if(e==="date"){this.handleDateSelect(n);continue}if(e==="subjects"){this.state.availableSubjects=n;continue}z(e,n),e==="server.classNumber"&&(this.state.classNumber=n)}return this.updateBackendUrl(),this.$message.success("URL配置已应用","已从URL加载配置"),!0},navigateDay(t){const e=new Date(this.state.selectedDateObj);e.setDate(e.getDate()+t),this.handleDateSelect(e)}}},gt={class:"d-flex"},bt={ref:"gridContainer",class:"grid-masonry"},yt={class:"empty-subjects mt-4"},kt={key:1,class:"empty-subjects-grid"},vt={key:0},St={style:{"white-space":"nowrap"}},xt={key:0},wt={style:{"white-space":"nowrap"}},Dt={key:0},Ct={style:{"white-space":"nowrap"}},Lt={class:"d-flex flex-wrap mt-2 gap-1"},Vt={class:"d-flex flex-wrap mb-4 gap-2"},_t={class:"flex-grow-1"},Ft={class:"d-flex align-center"},Tt={class:"text-subtitle-1"},Pt={class:"attendance-actions"},At={class:"text-subtitle-1"},Nt={class:"text-grey-darken-1"},Et={class:"text-primary font-weight-medium"};function jt(t,e,n,r,s,a){const m=$,c=ce("snap"),b=ae,v=ee,T=ne,ie=se,le=te;return d(),p(S,null,[i(we,{class:"no-select"},{append:l(()=>[i(m),e[19]||(e[19]=o()),i(g,{icon:"mdi-bell",variant:"text",badge:a.unreadCount||void 0,"badge-color":a.unreadCount?"error":void 0,onClick:e[0]||(e[0]=u=>t.$refs.messageLog.drawer=!0)},null,8,["badge","badge-color"]),i(g,{icon:"mdi-cog",variant:"text",onClick:e[1]||(e[1]=u=>t.$router.push("/settings"))})]),default:l(()=>[i(xe,null,{default:l(()=>[o(f(s.state.classNumber)+" - "+f(a.titleText),1)]),_:1}),i(N)]),_:1}),h("div",gt,[i(De,{class:"main-window flex-grow-1 no-select",fluid:""},{default:l(()=>[h("div",bt,[i(H,{name:"grid"},{default:l(()=>[(d(!0),p(S,null,w(a.sortedItems,u=>(d(),p("div",{key:u.key,class:"grid-item",style:Y({"grid-row-end":`span ${u.rowSpan}`,order:u.order})},[i(C,{border:"",height:"100%",class:"glow-track",onClick:D=>!a.isEditingDisabled&&a.openDialog(u.key),onMousemove:a.handleMouseMove,onTouchmove:a.handleTouchMove},{default:l(()=>[i(F,null,{default:l(()=>[o(f(u.name),1)]),_:2},1024),i(V,{style:Y(s.state.contentStyle)},{default:l(()=>[i(G,null,{default:l(()=>[(d(!0),p(S,null,w(a.splitPoint(u.content),D=>(d(),k(X,{key:D},{default:l(()=>[o(f(D),1)]),_:2},1024))),128))]),_:2},1024)]),_:2},1032,["style"])]),_:2},1032,["onClick","onMousemove","onTouchmove"])],4))),128))]),_:1})],512),h("div",yt,[a.emptySubjectDisplay==="button"?(d(),k(U,{key:0,divided:"",variant:"outlined"},{default:l(()=>[(d(!0),p(S,null,w(a.unusedSubjects,u=>(d(),k(g,{key:u.name,disabled:a.isEditingDisabled,onClick:D=>a.openDialog(u.name)},{default:l(()=>[i(_,{start:""},{default:l(()=>[...e[20]||(e[20]=[o(" mdi-plus ",-1)])]),_:1}),o(" "+f(u.name),1)]),_:2},1032,["disabled","onClick"]))),128))]),_:1})):(d(),p("div",kt,[i(H,{name:"v-list"},{default:l(()=>[(d(!0),p(S,null,w(a.unusedSubjects,u=>(d(),k(C,{key:u.name,border:"",class:"empty-subject-card",disabled:a.isEditingDisabled,onClick:D=>a.openDialog(u.name)},{default:l(()=>[i(F,{class:"text-subtitle-1"},{default:l(()=>[o(f(u.name),1)]),_:2},1024),i(V,{class:"text-center"},{default:l(()=>[i(_,{size:"small",color:"grey"},{default:l(()=>[...e[21]||(e[21]=[o(" mdi-plus ",-1)])]),_:1}),e[22]||(e[22]=h("div",{class:"text-caption text-grey"},"点击添加作业",-1))]),_:1})]),_:2},1032,["disabled","onClick"]))),128))]),_:1})]))]),s.state.synced?(d(),k(g,{key:1,color:"success",size:"large",onClick:a.showSyncMessage},{default:l(()=>[...e[24]||(e[24]=[o(" 同步完成 ",-1)])]),_:1},8,["onClick"])):(d(),k(g,{key:0,color:"error",size:"large",loading:s.loading.upload,class:"ml-2",onClick:a.manualUpload},{default:l(()=>[...e[23]||(e[23]=[o(" 上传 ",-1)])]),_:1},8,["loading","onClick"])),a.showRandomPickerButton?(d(),k(g,{key:2,color:"amber","prepend-icon":"mdi-account-question","append-icon":"mdi-dice-multiple",size:"large",class:"ml-2",onClick:a.openRandomPicker},{default:l(()=>[...e[25]||(e[25]=[o(" 随机点名 ",-1)])]),_:1},8,["onClick"])):x("",!0),a.showExamScheduleButton?(d(),k(g,{key:3,color:"green","prepend-icon":"mdi-calendar-check",size:"large",class:"ml-2",onClick:e[2]||(e[2]=u=>t.$router.push("/examschedule"))},{default:l(()=>[...e[26]||(e[26]=[o(" 考试看板 ",-1)])]),_:1})):x("",!0),a.showListCardButton?(d(),k(g,{key:4,color:"primary-darken-1","prepend-icon":"mdi-list-box",size:"large",class:"ml-2",onClick:e[3]||(e[3]=u=>t.$router.push("/list"))},{default:l(()=>[...e[27]||(e[27]=[o(" 列表 ",-1)])]),_:1})):x("",!0),a.showFullscreenButton?(d(),k(g,{key:5,color:s.state.isFullscreen?"blue-grey":"blue","prepend-icon":s.state.isFullscreen?"mdi-fullscreen-exit":"mdi-fullscreen",size:"large",class:"ml-2",onClick:a.toggleFullscreen},{default:l(()=>[o(f(s.state.isFullscreen?"退出全屏":"全屏显示"),1)]),_:1},8,["color","prepend-icon","onClick"])):x("",!0),a.showAntiScreenBurnCard?(d(),k(C,{key:6,border:"",class:"mt-4 anti-burn-card",color:"primary",variant:"tonal"},{default:l(()=>[i(F,{class:"text-subtitle-1"},{default:l(()=>[i(_,{start:"",icon:"mdi-shield-check",size:"small"}),e[28]||(e[28]=o(" 屏幕保护技术已启用 ",-1))]),_:1}),i(V,{class:"text-body-2"},{default:l(()=>[...e[29]||(e[29]=[h("p",null," 本应用采用独立自研的动态像素偏移技术(DPO™),有效防止LCD屏幕烧屏现象。 ",-1),h("p",{class:"text-caption text-grey"},[o(" *研究显示动态像素偏移技术可以修复屏幕坏点,起到保护屏幕的作用,数据来自实验室。"),h("a",{href:"https://patentscope.wipo.int/search/zh/detail.jsf?docId=CN232281523&_cid=P20-M8L0YX-67061-1",target:"_blank"},"专利号CN108648692 ")],-1),h("p",{class:"text-caption text-grey"}," *技术已自动适配您的设备,无需手动调整 ",-1)])]),_:1})]),_:1})):x("",!0)]),_:1}),s.state.studentList&&s.state.studentList.length?(d(),k(R,{key:0,class:"attendance-area no-select",cols:"1",onClick:e[4]||(e[4]=u=>a.setAttendanceArea())},{default:l(()=>[e[40]||(e[40]=h("h1",null,"出勤",-1)),h("h2",null,[i(c,{style:{"white-space":"nowrap"}},{default:l(()=>[...e[30]||(e[30]=[o(" 应到 ",-1)])]),_:1}),e[31]||(e[31]=o(": ",-1)),i(c,{style:{"white-space":"nowrap"}},{default:l(()=>[o(f(s.state.studentList.length-s.state.boardData.attendance.exclude.length)+"人 ",1)]),_:1})]),h("h2",null,[i(c,{style:{"white-space":"nowrap"}},{default:l(()=>[...e[32]||(e[32]=[o(" 实到 ",-1)])]),_:1}),e[33]||(e[33]=o(": ",-1)),i(c,{style:{"white-space":"nowrap"}},{default:l(()=>[o(f(s.state.studentList.length-s.state.boardData.attendance.absent.length-s.state.boardData.attendance.late.length-s.state.boardData.attendance.exclude.length)+"人 ",1)]),_:1})]),h("h2",null,[i(c,{style:{"white-space":"nowrap"}},{default:l(()=>[...e[34]||(e[34]=[o(" 请假 ",-1)])]),_:1}),e[35]||(e[35]=o(": ",-1)),i(c,{style:{"white-space":"nowrap"}},{default:l(()=>[o(f(s.state.boardData.attendance.absent.length)+"人 ",1)]),_:1})]),(d(!0),p(S,null,w(s.state.boardData.attendance.absent,(u,D)=>(d(),p("h3",{class:"gray-text",key:"absent-"+D},[s.useDisplay().lgAndUp.value?(d(),p("span",vt,f(`${D+1}. `),1)):x("",!0),h("span",St,f(u),1)]))),128)),h("h2",null,[i(c,{style:{"white-space":"nowrap"}},{default:l(()=>[...e[36]||(e[36]=[o("迟到",-1)])]),_:1}),e[37]||(e[37]=o(": ",-1)),i(c,{style:{"white-space":"nowrap"}},{default:l(()=>[o(f(s.state.boardData.attendance.late.length)+"人 ",1)]),_:1})]),(d(!0),p(S,null,w(s.state.boardData.attendance.late,(u,D)=>(d(),p("h3",{class:"gray-text",key:"late-"+D},[s.useDisplay().lgAndUp.value?(d(),p("span",xt,f(`${D+1}. `),1)):x("",!0),h("span",wt,f(u),1)]))),128)),h("h2",null,[i(c,{style:{"white-space":"nowrap"}},{default:l(()=>[...e[38]||(e[38]=[o("不参与",-1)])]),_:1}),e[39]||(e[39]=o(": ",-1)),i(c,{style:{"white-space":"nowrap"}},{default:l(()=>[o(f(s.state.boardData.attendance.exclude.length)+"人 ",1)]),_:1})]),(d(!0),p(S,null,w(s.state.boardData.attendance.exclude,(u,D)=>(d(),p("h3",{class:"gray-text",key:"exclude-"+D},[s.useDisplay().lgAndUp.value?(d(),p("span",Dt,f(`${D+1}. `),1)):x("",!0),h("span",Ct,f(u),1)]))),128))]),_:1})):x("",!0)]),i(b,{modelValue:s.state.dialogVisible,"onUpdate:modelValue":e[5]||(e[5]=u=>s.state.dialogVisible=u),title:s.state.dialogTitle,"initial-content":s.state.textarea,"auto-save":a.autoSave,onSave:a.handleHomeworkSave},null,8,["modelValue","title","initial-content","auto-save","onSave"]),i(me,{modelValue:s.state.snackbar,"onUpdate:modelValue":e[6]||(e[6]=u=>s.state.snackbar=u),timeout:2e3},{default:l(()=>[o(f(s.state.snackbarText),1)]),_:1},8,["modelValue"]),i(B,{modelValue:s.state.attendanceDialog,"onUpdate:modelValue":[e[12]||(e[12]=u=>s.state.attendanceDialog=u),a.handleAttendanceDialogClose],"max-width":"900","fullscreen-breakpoint":"sm"},{default:l(()=>[i(C,null,{default:l(()=>[i(F,{class:"d-flex align-center"},{default:l(()=>[i(_,{icon:"mdi-account-group",class:"mr-2"}),e[41]||(e[41]=o(" 出勤状态管理 ",-1)),i(N),i(L,{color:"primary",size:"small",class:"ml-2"},{default:l(()=>[o(f(s.state.dateString),1)]),_:1})]),_:1}),i(V,null,{default:l(()=>[i(O,{class:"mb-4"},{default:l(()=>[i(R,{cols:"12",md:"12"},{default:l(()=>[i(q,{modelValue:s.attendanceSearch,"onUpdate:modelValue":[e[7]||(e[7]=u=>s.attendanceSearch=u),t.handleSearchChange],"prepend-inner-icon":"mdi-magnify",label:"搜索学生",hint:"支持筛选姓氏,如输入'孙'可筛选所有姓孙的学生",variant:"outlined",clearable:""},null,8,["modelValue","onUpdate:modelValue"]),h("div",Lt,[(d(!0),p(S,null,w(a.extractedSurnames,u=>(d(),k(g,{key:u.name,variant:s.attendanceSearch===u.name?"elevated":"text",color:s.attendanceSearch===u.name?"primary":"",onClick:D=>s.attendanceSearch=s.attendanceSearch===u.name?"":u.name},{default:l(()=>[o(f(u.name)+" ("+f(u.count)+") ",1)]),_:2},1032,["variant","color","onClick"]))),128))])]),_:1})]),_:1}),h("div",Vt,[h("div",null,[i(L,{value:"present",color:s.attendanceFilter.includes("present")?"success":"",variant:s.attendanceFilter.includes("present")?"elevated":"tonal",class:"px-2 filter-chip",onClick:e[8]||(e[8]=u=>a.toggleFilter("present")),"prepend-icon":"mdi-account-check","append-icon":s.attendanceFilter.includes("present")?"mdi-check":""},{default:l(()=>[...e[42]||(e[42]=[o(" 到课 ",-1)])]),_:1},8,["color","variant","append-icon"]),i(L,{value:"absent",color:s.attendanceFilter.includes("absent")?"error":"",variant:s.attendanceFilter.includes("absent")?"elevated":"tonal",class:"px-2 filter-chip",onClick:e[9]||(e[9]=u=>a.toggleFilter("absent")),"prepend-icon":"mdi-account-off","append-icon":s.attendanceFilter.includes("absent")?"mdi-check":""},{default:l(()=>[...e[43]||(e[43]=[o(" 请假 ",-1)])]),_:1},8,["color","variant","append-icon"]),i(L,{value:"late",color:s.attendanceFilter.includes("late")?"warning":"",variant:s.attendanceFilter.includes("late")?"elevated":"tonal",class:"px-2 filter-chip",onClick:e[10]||(e[10]=u=>a.toggleFilter("late")),"prepend-icon":"mdi-clock-alert","append-icon":s.attendanceFilter.includes("late")?"mdi-check":""},{default:l(()=>[...e[44]||(e[44]=[o(" 迟到 ",-1)])]),_:1},8,["color","variant","append-icon"]),i(L,{value:"exclude",color:s.attendanceFilter.includes("exclude")?"grey":"",variant:s.attendanceFilter.includes("exclude")?"elevated":"tonal",class:"px-2 filter-chip",onClick:e[11]||(e[11]=u=>a.toggleFilter("exclude")),"prepend-icon":"mdi-account-cancel","append-icon":s.attendanceFilter.includes("exclude")?"mdi-check":""},{default:l(()=>[...e[45]||(e[45]=[o(" 不参与 ",-1)])]),_:1},8,["color","variant","append-icon"])])]),i(O,null,{default:l(()=>[(d(!0),p(S,null,w(a.filteredStudents,u=>(d(),k(R,{key:u,cols:"12",sm:"6",md:"6",lg:"4"},{default:l(()=>[i(C,{class:"student-card",border:""},{default:l(()=>[i(V,{class:"d-flex align-center pa-2"},{default:l(()=>[h("div",_t,[h("div",Ft,[i(he,{color:a.getStudentStatusColor(s.state.studentList.indexOf(u)),size:"24",class:"mr-2"},{default:l(()=>[i(_,{size:"small"},{default:l(()=>[o(f(a.getStudentStatusIcon(s.state.studentList.indexOf(u))),1)]),_:2},1024)]),_:2},1032,["color"]),h("div",Tt,f(u),1)])]),h("div",Pt,[i(g,{color:a.isPresent(s.state.studentList.indexOf(u))?"success":"",icon:"mdi-account-check",size:"small",variant:"text",onClick:D=>a.setPresent(s.state.studentList.indexOf(u)),title:"设为到课"},null,8,["color","onClick"]),i(g,{color:a.isAbsent(s.state.studentList.indexOf(u))?"error":"",icon:"mdi-account-off",size:"small",variant:"text",onClick:D=>a.setAbsent(s.state.studentList.indexOf(u)),title:"设为请假"},null,8,["color","onClick"]),i(g,{color:a.isLate(s.state.studentList.indexOf(u))?"warning":"",icon:"mdi-clock-alert",size:"small",variant:"text",onClick:D=>a.setLate(s.state.studentList.indexOf(u)),title:"设为迟到"},null,8,["color","onClick"]),i(g,{color:a.isExclude(s.state.studentList.indexOf(u))?"grey":"",icon:"mdi-account-cancel",size:"small",variant:"text",onClick:D=>a.setExclude(s.state.studentList.indexOf(u)),title:"设为不参与"},null,8,["color","onClick"])])]),_:2},1024)]),_:2},1024)]),_:2},1024))),128))]),_:1}),i(O,null,{default:l(()=>[i(R,{cols:"12",md:"12"},{default:l(()=>[i(C,{variant:"tonal",color:"primary",class:"mb-4"},{default:l(()=>[i(V,null,{default:l(()=>[e[50]||(e[50]=h("div",{class:"text-subtitle-2 mb-2"},"批量操作",-1)),i(U,null,{default:l(()=>[i(g,{color:"success","prepend-icon":"mdi-account-check",onClick:a.setAllPresent},{default:l(()=>[...e[46]||(e[46]=[o(" 全部到齐 ",-1)])]),_:1},8,["onClick"]),i(g,{color:"error","prepend-icon":"mdi-account-off",onClick:a.setAllAbsent},{default:l(()=>[...e[47]||(e[47]=[o(" 全部请假 ",-1)])]),_:1},8,["onClick"])]),_:1}),i(U,null,{default:l(()=>[i(g,{color:"warning","prepend-icon":"mdi-clock-alert",onClick:a.setAllLate},{default:l(()=>[...e[48]||(e[48]=[o(" 全部迟到 ",-1)])]),_:1},8,["onClick"]),i(g,{color:"grey","prepend-icon":"mdi-account-cancel",onClick:a.setAllExclude},{default:l(()=>[...e[49]||(e[49]=[o(" 全部不参与 ",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})]),_:1}),i(fe),i(I,null,{default:l(()=>[i(N),i(g,{color:"primary",onClick:a.saveAttendance},{default:l(()=>[i(_,{start:""},{default:l(()=>[...e[51]||(e[51]=[o("mdi-content-save",-1)])]),_:1}),e[52]||(e[52]=o(" 保存 ",-1))]),_:1},8,["onClick"])]),_:1})]),_:1})]),_:1},8,["modelValue","onUpdate:modelValue"]),i(v,{ref:"messageLog"},null,512),i(T,{loading:s.loading.download,"unread-count":a.unreadCount,"selected-date":s.state.selectedDateObj,"is-today":a.isToday,onZoom:a.zoom,onRefresh:a.downloadData,onOpenMessages:e[13]||(e[13]=u=>t.$refs.messageLog.drawer=!0),onOpenSettings:e[14]||(e[14]=u=>t.$router.push("/settings")),onDateSelect:a.handleDateSelect,onPrevDay:e[15]||(e[15]=u=>a.navigateDay(-1)),onNextDay:e[16]||(e[16]=u=>a.navigateDay(1))},null,8,["loading","unread-count","selected-date","is-today","onZoom","onRefresh","onDateSelect"]),i(ie),i(B,{modelValue:s.confirmDialog.show,"onUpdate:modelValue":e[17]||(e[17]=u=>s.confirmDialog.show=u),"max-width":"400"},{default:l(()=>[i(C,null,{default:l(()=>[i(F,{class:"text-h6"},{default:l(()=>[...e[53]||(e[53]=[o(" 确认保存 ",-1)])]),_:1}),i(V,null,{default:l(()=>[o(" 您正在修改 "+f(s.state.dateString)+" 的数据,确定要保存吗? ",1)]),_:1}),i(I,null,{default:l(()=>[i(N),i(g,{color:"grey",variant:"text",onClick:s.confirmDialog.reject},{default:l(()=>[...e[54]||(e[54]=[o(" 取消 ",-1)])]),_:1},8,["onClick"]),i(g,{color:"primary",onClick:s.confirmDialog.resolve},{default:l(()=>[...e[55]||(e[55]=[o(" 确认保存 ",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1})]),_:1},8,["modelValue"]),i(le,{ref:"randomPicker","student-list":s.state.studentList,attendance:s.state.boardData.attendance},null,8,["student-list","attendance"]),i(B,{modelValue:s.urlConfigDialog.show,"onUpdate:modelValue":e[18]||(e[18]=u=>s.urlConfigDialog.show=u),"max-width":"500"},{default:l(()=>[i(C,null,{default:l(()=>[i(F,{class:"text-h6"},{default:l(()=>[...e[56]||(e[56]=[o(" 确认应用URL配置 ",-1)])]),_:1}),i(V,null,{default:l(()=>[e[57]||(e[57]=h("p",null,"以下配置将应用于当前班级:",-1)),i(G,{density:"compact"},{default:l(()=>[(d(!0),p(S,null,w(s.urlConfigDialog.changes,u=>(d(),k(X,{key:u.key},{prepend:l(()=>[i(_,{icon:u.icon,size:"small",class:"mr-2"},null,8,["icon"])]),default:l(()=>[i(pe,{class:"d-flex align-center"},{default:l(()=>[h("span",At,f(u.name),1),i(Q,{activator:"parent",location:"top"},{default:l(()=>[o(f(u.description||u.key),1)]),_:2},1024)]),_:2},1024),i(ge,null,{default:l(()=>[h("span",Nt,f(u.oldValue),1),i(_,{icon:"mdi-arrow-right",size:"small",class:"mx-1"}),h("span",Et,f(u.newValue),1)]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1}),i(I,null,{default:l(()=>[i(N),i(g,{color:"grey",variant:"text",onClick:s.urlConfigDialog.cancelHandler},{default:l(()=>[...e[58]||(e[58]=[o(" 取消 ",-1)])]),_:1},8,["onClick"]),i(g,{color:"primary",onClick:s.urlConfigDialog.confirmHandler},{default:l(()=>[...e[59]||(e[59]=[o(" 确认应用 ",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1})]),_:1},8,["modelValue"]),e[60]||(e[60]=h("br",null,null,-1)),e[61]||(e[61]=h("br",null,null,-1)),e[62]||(e[62]=h("br",null,null,-1)),e[63]||(e[63]=h("br",null,null,-1)),e[64]||(e[64]=h("br",null,null,-1)),e[65]||(e[65]=h("br",null,null,-1))],64)}const Gt=M(pt,[["render",jt]]);export{Gt as default};
|