1
0
mirror of https://github.com/ZeroCatDev/Classworks.git synced 2025-12-08 05:26:51 +00:00
Classworks/assets/index-CEHis5x9.js

12 lines
113 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import{_ as he,k as S,s as ue,j as V,o as f,w as n,d as a,l as A,q as ie,t as r,v as T,x as oe,y as k,z as Q,i as o,A as w,B as _,C as x,D as Bt,F as P,E as re,T as He,G as O,e as Ne,H as fe,I as se,n as Te,J as ye,K as De,L as je,M as ve,N as tt,O as st,P as Ue,R as xe,Q as jt,S as Ot,g as $t,p as Kt,U as Ht,W as z,X as Ce,Y as qt,Z as Gt,$ as Ke,a0 as Yt,a1 as $,a2 as ge,a3 as at,a4 as Jt,c as Wt,a5 as Qt,a6 as qe,a7 as Be,a8 as Xt,a9 as Zt,aa as es,ab as ts,ac as ss,ad as nt,ae as as,af as lt,ag as ht,ah as vt,ai as ns,aj as it,ak as Le,al as Ae,r as ls,am as is,an as os,ao as rs,ap as Ie,aq as ot}from"./index-C0h5GNiz.js";import{V as ke,u as us,m as ds}from"./VTextField-BtDIbdD3.js";import{V as Je}from"./VTooltip-UkxJEzvo.js";import{V as J}from"./VChip-B2KNZuKZ.js";import{g as Ge,j as Ye,o as pt,a as cs,l as ms}from"./socketClient-BRoE-kM5.js";import{V as fs}from"./VBadge-Cxf7nVYs.js";import{V as We}from"./VTextarea-CT3wSLpg.js";import{V as gt}from"./VMenu-DnPauKEc.js";import{V as hs}from"./VDatePicker-VFbenreX.js";import{_ as kt,p as rt}from"./index-CX-PQ2tj.js";import{d as Ve,k as vs}from"./dataProvider-DVwQ7eOJ.js";import{a as we,g as ps}from"./axios-CKXcH0ZT.js";import{u as gs,a as ks,b as bs,V as ys,h as xs,m as ws,c as Ss}from"./filter-BZTq9jdJ.js";import{V as Cs}from"./VCheckboxBtn-ByluWN-_.js";import{V as Oe}from"./VAlert-CLr8LWbn.js";import{V as Ds,a as ut,b as dt,c as ct}from"./VExpansionPanels-BzX8mhqI.js";import{V as Me,a as _e}from"./VRow-COOxBlVI.js";import{V as Vs,a as _s}from"./VAppBarTitle-FOX0meo8.js";import{V as Ts}from"./VContainer-DAukxqlE.js";const Ls={name:"RandomPicker",props:{studentList:{type:Array,required:!0},attendance:{type:Object,required:!0,default:()=>({absent:[],late:[],exclude:[]})}},data(){return{dialog:!1,count:S("randomPicker.defaultCount"),isPickingStarted:!1,isAnimating:!1,pickedStudents:[],animationStudents:[],highlightedIndices:[],animationTimer:null,getSetting:S,tempFilters:{excludeAbsent:S("randomPicker.excludeAbsent"),excludeLate:S("randomPicker.excludeLate"),excludeExcluded:S("randomPicker.excludeExcluded")},pickerMode:S("randomPicker.mode"),minNumber:S("randomPicker.minNumber"),maxNumber:S("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=S("randomPicker.defaultCount"),this.isPickingStarted=!1,this.isAnimating=!1,this.pickedStudents=[],this.tempFilters={excludeAbsent:S("randomPicker.excludeAbsent"),excludeLate:S("randomPicker.excludeLate"),excludeExcluded:S("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){ue("randomPicker.mode",t)}},minNumber:{handler(t){t>this.maxNumber&&(this.minNumber=this.maxNumber),t<1&&(this.minNumber=1),ue("randomPicker.minNumber",this.minNumber)}},maxNumber:{handler(t){t<this.minNumber&&(this.maxNumber=this.minNumber),t>100&&(this.maxNumber=100),ue("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,S("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 l=50,u=()=>{this.highlightedIndices=[];const s=[];for(let d=0;d<this.count;d++){let m;do m=Math.floor(Math.random()*this.animationStudents.length);while(s.includes(m));s.push(m)}this.highlightedIndices=s,e++;const i=l+e*20;e<5?this.animationTimer=setTimeout(u,i):setTimeout(()=>{this.finishPicking()},500)};u()},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),l=this.remainingStudents[e];this.pickedStudents[t]=l;const u=document.querySelectorAll(".result-card");u[t]&&(u[t].classList.add("refresh-animation"),setTimeout(()=>{u[t].classList.remove("refresh-animation")},500))}}},Is={class:"d-flex justify-center align-center counter-container"},As={class:"count-display mx-8"},Ns={class:"text-h2 font-weight-bold"},Fs={class:"mode-switch-container mt-6"},Ps={key:0,class:"number-range-container mt-4"},zs={class:"d-flex justify-center align-center gap-4"},Es={class:"mt-4"},Rs={key:1,class:"mt-4 text-error"},Us={class:"mt-4 text-caption"},Ms={class:"pa-2"},Bs={key:0},js={key:1},Os={key:2},$s={key:1,class:"d-flex flex-wrap justify-center gap-2 mt-4"},Ks={key:0,class:"animation-container"},Hs={class:"animation-wrapper"},qs={key:1,class:"result-container"},Gs={class:"mt-8 d-flex justify-center"};function Ys(t,e,l,u,s,i){return f(),V(fe,{modelValue:s.dialog,"onUpdate:modelValue":e[8]||(e[8]=d=>s.dialog=d),"fullscreen-breakpoint":"sm","max-width":"600",persistent:""},{default:n(()=>[a(A,{border:"",class:"random-picker-card",rounded:"xl"},{default:n(()=>[a(ie,{class:"text-h5 d-flex align-center"},{default:n(()=>[a(T,{class:"mr-2",icon:"mdi-account-question"}),e[9]||(e[9]=r(" 随机点名 ",-1)),a(oe),a(k,{icon:"mdi-close",variant:"text",onClick:e[0]||(e[0]=d=>s.dialog=!1)})]),_:1}),s.isPickingStarted?(f(),V(Q,{key:1,class:"text-center py-6"},{default:n(()=>[s.isAnimating?(f(),w("div",Ks,[o("div",Hs,[a(He,{class:"shuffle-container",name:"shuffle",tag:"div"},{default:n(()=>[(f(!0),w(P,null,O(s.animationStudents,(d,m)=>(f(),w("div",{key:d.id,class:Ne([{highlighted:s.highlightedIndices.includes(m)},"student-item"])},x(d.name),3))),128))]),_:1})])])):(f(),w("div",qs,[e[19]||(e[19]=o("div",{class:"text-h6 mb-4"},"抽取结果",-1)),(f(!0),w(P,null,O(s.pickedStudents,(d,m)=>(f(),V(A,{key:m,class:"mb-2 result-card",color:"primary",variant:"outlined"},{default:n(()=>[a(Q,{class:"text-h4 text-center py-4 d-flex align-center justify-center"},{default:n(()=>[r(x(d)+" ",1),a(k,{disabled:i.remainingStudents.length===0,title:i.remainingStudents.length===0?"没有更多可用学生":"重新抽取此学生",class:"ml-2 refresh-btn",icon:"mdi-refresh",size:"small",variant:"text",onClick:g=>i.refreshSingleStudent(m)},null,8,["disabled","title","onClick"])]),_:2},1024)]),_:2},1024))),128)),o("div",Gs,[a(k,{class:"mx-2",color:"primary","prepend-icon":"mdi-refresh",size:"large",onClick:i.resetPicker},{default:n(()=>[...e[17]||(e[17]=[r(" 重新抽取 ",-1)])]),_:1},8,["onClick"]),a(k,{class:"mx-2",color:"grey",size:"large",variant:"outlined",onClick:e[7]||(e[7]=d=>s.dialog=!1)},{default:n(()=>[...e[18]||(e[18]=[r(" 关闭 ",-1)])]),_:1})])]))]),_:1})):(f(),V(Q,{key:0,class:"text-center py-6"},{default:n(()=>[e[16]||(e[16]=o("div",{class:"text-h6 mb-4"},"请选择抽取人数",-1)),o("div",Is,[a(k,{disabled:s.count<=1,class:"counter-btn",color:"primary",icon:"mdi-minus",size:"x-large",variant:"tonal",onClick:i.decrementCount},null,8,["disabled","onClick"]),o("div",As,[o("span",Ns,x(s.count),1),e[10]||(e[10]=o("span",{class:"text-subtitle-1 ml-2"},"人",-1))]),a(k,{disabled:s.count>=i.maxAllowedCount,class:"counter-btn",color:"primary",icon:"mdi-plus",size:"x-large",variant:"tonal",onClick:i.incrementCount},null,8,["disabled","onClick"])]),o("div",Fs,[a(Bt,{modelValue:s.pickerMode,"onUpdate:modelValue":e[1]||(e[1]=d=>s.pickerMode=d),class:"mode-toggle",color:"primary",mandatory:"",rounded:"pill"},{default:n(()=>[a(k,{"prepend-icon":"mdi-account",value:"name"},{default:n(()=>[...e[11]||(e[11]=[r("姓名模式",-1)])]),_:1}),a(k,{"prepend-icon":"mdi-numeric",value:"number"},{default:n(()=>[...e[12]||(e[12]=[r("学号模式",-1)])]),_:1})]),_:1},8,["modelValue"])]),s.pickerMode==="number"?(f(),w("div",Ps,[e[14]||(e[14]=o("div",{class:"text-subtitle-1 mb-2"},"学号范围设置",-1)),o("div",zs,[a(ke,{modelValue:s.minNumber,"onUpdate:modelValue":e[2]||(e[2]=d=>s.minNumber=d),modelModifiers:{number:!0},class:"number-input",density:"compact","hide-details":"",label:"最小值",max:"100",min:"1",type:"number"},null,8,["modelValue"]),e[13]||(e[13]=o("span",{class:"mx-2"},"至",-1)),a(ke,{modelValue:s.maxNumber,"onUpdate:modelValue":e[3]||(e[3]=d=>s.maxNumber=d),modelModifiers:{number:!0},class:"number-input",density:"compact","hide-details":"",label:"最大值",max:"100",min:"1",type:"number"},null,8,["modelValue"])])])):_("",!0),o("div",Es,[a(k,{disabled:i.filteredStudents.length===0,class:"start-btn",color:"primary","prepend-icon":"mdi-dice-multiple",size:"x-large",onClick:i.startPicking},{default:n(()=>[...e[15]||(e[15]=[r(" 开始抽取 ",-1)])]),_:1},8,["disabled","onClick"])]),i.filteredStudents.length===0?(f(),w("div",Rs,[s.pickerMode==="name"?(f(),w(P,{key:0},[r(" 没有可抽取的学生,请调整过滤选项 ")],64)):(f(),w(P,{key:1},[r(" 请设置有效的学号范围 ")],64))])):_("",!0),o("div",Us,[r(" 当前可抽取学生: "+x(i.filteredStudents.length)+"人 ",1),s.pickerMode==="name"?(f(),V(Je,{key:0,location:"bottom"},{activator:n(({props:d})=>[a(T,re({class:"ml-1",icon:"mdi-information-outline",size:"small"},d),null,16)]),default:n(()=>[o("div",Ms,[s.tempFilters.excludeAbsent?(f(),w("div",Bs," • 已排除请假学生 ("+x(i.absentCount)+"人) ",1)):_("",!0),s.tempFilters.excludeLate?(f(),w("div",js," • 已排除迟到学生 ("+x(i.lateCount)+"人) ",1)):_("",!0),s.tempFilters.excludeExcluded?(f(),w("div",Os," • 已排除不参与学生 ("+x(i.excludedCount)+"人) ",1)):_("",!0)])]),_:1})):_("",!0),s.pickerMode==="name"?(f(),w("div",$s,[a(J,{color:s.tempFilters.excludeLate?"warning":"default",variant:s.tempFilters.excludeLate?"elevated":"text",class:"filter-chip","prepend-icon":"mdi-clock-alert",onClick:e[4]||(e[4]=d=>s.tempFilters.excludeLate=!s.tempFilters.excludeLate)},{default:n(()=>[r(x(s.tempFilters.excludeLate?"排除":"包含")+"迟到学生 ",1)]),_:1},8,["color","variant"]),a(J,{color:s.tempFilters.excludeAbsent?"error":"default",variant:s.tempFilters.excludeAbsent?"elevated":"text",class:"filter-chip","prepend-icon":"mdi-account-off",onClick:e[5]||(e[5]=d=>s.tempFilters.excludeAbsent=!s.tempFilters.excludeAbsent)},{default:n(()=>[r(x(s.tempFilters.excludeAbsent?"排除":"包含")+"请假学生 ",1)]),_:1},8,["color","variant"]),a(J,{color:s.tempFilters.excludeExcluded?"grey":"default",variant:s.tempFilters.excludeExcluded?"elevated":"text",class:"filter-chip","prepend-icon":"mdi-account-cancel",onClick:e[6]||(e[6]=d=>s.tempFilters.excludeExcluded=!s.tempFilters.excludeExcluded)},{default:n(()=>[r(x(s.tempFilters.excludeExcluded?"排除":"包含")+"不参与学生 ",1)]),_:1},8,["color","variant"])])):_("",!0)])]),_:1}))]),_:1})]),_:1},8,["modelValue"])}const bt=he(Ls,[["render",Ys],["__scopeId","data-v-85e7eea6"]]),Js={name:"ChatWidget",props:{modelValue:{type:Boolean,default:!1},showButton:{type:Boolean,default:!0},offset:{type:Number,default:16},width:{type:Number,default:380},height:{type:Number,default:520}},emits:["update:modelValue"],data(){return{visible:this.modelValue,text:"",messages:[],lastVisit:null,unreadCount:0,connected:!1,socketId:""}},computed:{panelStyle(){return{right:this.offset+"px",bottom:this.offset+"px",width:this.width+"px",height:this.height+"px"}},toggleStyle(){return{right:this.offset+"px",bottom:this.offset+"px"}},canSend(){return!!(S("server.kvToken")&&this.text.trim())},showToggleButton(){return this.$props.showButton&&!this.visible},decoratedMessages(){if(!this.lastVisit)return this.messages;const t=this.messages.findIndex(u=>u.at&&new Date(u.at).getTime()>=new Date(this.lastVisit).getTime());if(t<=0)return this.messages;const e=this.messages.slice(0,t),l=this.messages.slice(t);return[...e,{_id:"divider",_type:"divider"},...l]}},watch:{modelValue(t){this.visible=t,t&&this.onOpen()}},mounted(){try{const l=localStorage.getItem("chat.lastVisit");l&&(this.lastVisit=l)}catch{}const t=Ge();this.connected=!!t.connected,this.socketId=t.id||"",t.on("connect",()=>{this.connected=!0,this.socketId=t.id||""}),t.on("disconnect",()=>{this.connected=!1});const e=S("server.kvToken");e&&Ye(e),this.offMessage=pt("chat:message",l=>{this.pushMessage(l)}),this.visible&&this.onOpen()},beforeUnmount(){this.offMessage&&this.offMessage()},methods:{open(){this.visible=!0,this.$emit("update:modelValue",!0),this.onOpen()},close(){this.visible=!1,this.$emit("update:modelValue",!1);try{localStorage.setItem("chat.lastVisit",new Date().toISOString())}catch{}this.unreadCount=0},onOpen(){this.$nextTick(()=>this.scrollToBottom())},insertEmoji(t){this.text+=t,this.$nextTick(()=>{var e,l;if((l=(e=this.$refs.inputRef)==null?void 0:e.$el)!=null&&l.querySelector){const u=this.$refs.inputRef.$el.querySelector("textarea");u==null||u.focus()}})},handleEnter(t){t.shiftKey||this.send()},send(){const t=this.text.trim();if(!t)return;Ge().emit("chat:send",t),this.text=""},pushMessage(t){const e={_id:`${t.at||Date.now()}-${Math.random()}`,text:typeof(t==null?void 0:t.text)=="string"?t.text:(t==null?void 0:t.text)||"",at:t.at||new Date().toISOString(),senderId:t.senderId,self:!!(t.senderId&&t.senderId===this.socketId)};e.text&&(this.messages.push(e),this.visible||this.unreadCount++,this.$nextTick(()=>this.scrollToBottom()),this.messages.length>500&&this.messages.shift())},formatTime(t){try{const e=new Date(t),l=String(e.getHours()).padStart(2,"0"),u=String(e.getMinutes()).padStart(2,"0");return`${l}:${u}`}catch{return""}},scrollToBottom(){const t=this.$refs.listRef;if(t)try{t.scrollTop=t.scrollHeight}catch{}}}},Ws={ref:"listRef",class:"messages"},Qs={key:0,class:"divider-row"},Xs={class:"avatar"},Zs={class:"bubble"},ea={class:"text"},ta={class:"meta"};function sa(t,e,l,u,s,i){return f(),w(P,null,[i.showToggleButton?(f(),w("div",{key:0,style:Te(i.toggleStyle),class:"chat-toggle"},[a(k,{color:"primary",icon:"",variant:"flat",onClick:e[0]||(e[0]=d=>i.open())},{default:n(()=>[a(fs,{content:s.unreadCount||void 0,"model-value":s.unreadCount>0,color:"error",overlap:""},{default:n(()=>[a(T,null,{default:n(()=>[...e[5]||(e[5]=[r(" mdi-chat ",-1)])]),_:1})]),_:1},8,["content","model-value"])]),_:1})],4)):_("",!0),se(o("div",{style:Te(i.panelStyle),class:"chat-panel"},[a(A,{border:"",class:"chat-card",elevation:"8"},{default:n(()=>[a(ie,{class:"d-flex align-center"},{default:n(()=>[a(T,{class:"mr-2"},{default:n(()=>[...e[6]||(e[6]=[r(" mdi-chat-processing ",-1)])]),_:1}),e[8]||(e[8]=o("span",{class:"text-subtitle-1"},"设备聊天室",-1)),a(oe),a(Je,{location:"top"},{activator:n(({props:d})=>[a(J,re({color:s.connected?"success":"grey",size:"x-small"},d,{variant:"tonal"}),{default:n(()=>[r(x(s.connected?"已连接":"未连接"),1)]),_:1},16,["color"])]),default:n(()=>[o("span",null,"Socket "+x(s.socketId||"-"),1)]),_:1}),a(k,{icon:"",variant:"text",onClick:e[1]||(e[1]=d=>i.close())},{default:n(()=>[a(T,null,{default:n(()=>[...e[7]||(e[7]=[r("mdi-close",-1)])]),_:1})]),_:1})]),_:1}),a(De),a(Q,{class:"chat-body"},{default:n(()=>[o("div",Ws,[(f(!0),w(P,null,O(i.decoratedMessages,d=>(f(),w(P,{key:d._id},[d._type==="divider"?(f(),w("div",Qs,[a(De,{class:"my-2"}),e[9]||(e[9]=o("div",{class:"divider-text"}," 今天 - 上次访问 ",-1)),a(De,{class:"my-2"})])):(f(),w("div",{key:1,class:Ne([{self:d.self},"message-row"])},[o("div",Xs,[a(je,{color:d.self?"primary":"grey",size:"24"},{default:n(()=>[a(T,{size:"small"},{default:n(()=>[r(x(d.self?"mdi-account":"mdi-account-outline"),1)]),_:2},1024)]),_:2},1032,["color"])]),o("div",Zs,[o("div",ea,x(d.text),1),o("div",ta,x(i.formatTime(d.at)),1)])],2))],64))),128))],512)]),_:1}),a(De),a(ve,{class:"chat-input"},{default:n(()=>[a(k,{class:"mr-1",icon:"",variant:"text",onClick:e[2]||(e[2]=d=>i.insertEmoji("😄"))},{default:n(()=>[a(T,null,{default:n(()=>[...e[10]||(e[10]=[r("mdi-emoticon-outline",-1)])]),_:1})]),_:1}),a(We,{ref:"inputRef",modelValue:s.text,"onUpdate:modelValue":e[3]||(e[3]=d=>s.text=d),"auto-grow":"",class:"flex-grow-1","hide-details":"",placeholder:"输入消息",rows:"1",variant:"solo",onKeydown:[tt(st(i.handleEnter,["prevent"]),["enter"]),e[4]||(e[4]=tt(st(()=>{},["shift","stop"]),["enter"]))]},null,8,["modelValue","onKeydown"]),a(k,{disabled:!i.canSend,class:"ml-2",color:"primary",onClick:i.send},{default:n(()=>[a(T,{start:""},{default:n(()=>[...e[11]||(e[11]=[r(" mdi-send ",-1)])]),_:1}),e[12]||(e[12]=r(" 发送 ",-1))]),_:1},8,["disabled","onClick"])]),_:1})]),_:1})],4),[[ye,s.visible]])],64)}const yt=he(Js,[["render",sa],["__scopeId","data-v-84fa34a3"]]),aa={name:"FloatingICP"},na={"aria-label":"浙ICP备2024068645号",class:"floating-icp-link",href:"https://beian.miit.gov.cn/",rel:"noopener noreferrer",target:"_blank"};function la(t,e,l,u,s,i){return f(),w("a",na," 浙ICP备2024068645号 ")}const xt=he(aa,[["render",la],["__scopeId","data-v-8d08b563"]]),ia={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 oa(t,e,l,u,s,i){return f(),V(jt,null,{default:n(()=>[a(A,{class:Ne([{"toolbar-expanded":s.isExpanded},"floating-toolbar"]),elevation:"4",rounded:"xl"},{default:n(()=>[a(Ue,{class:"toolbar-buttons",variant:"text"},{default:n(()=>[se(a(k,{title:"查看昨天",class:"toolbar-btn",icon:"mdi-chevron-left",variant:"text",onClick:e[0]||(e[0]=d=>t.$emit("prev-day"))},null,512),[[xe]]),se(a(k,{title:"缩小字体",class:"toolbar-btn",icon:"mdi-format-font-size-decrease",variant:"text",onClick:e[1]||(e[1]=d=>t.$emit("zoom","out"))},null,512),[[xe]]),se(a(k,{title:"放大字体",class:"toolbar-btn",icon:"mdi-format-font-size-increase",variant:"text",onClick:e[2]||(e[2]=d=>t.$emit("zoom","up"))},null,512),[[xe]]),a(gt,{"close-on-content-click":!1,location:"top"},{activator:n(({props:d})=>[se(a(k,re({title:"选择日期",class:"toolbar-btn",icon:"mdi-calendar"},d,{variant:"text"}),null,16),[[xe]])]),default:n(()=>[a(A,{border:"",class:"date-picker-card"},{default:n(()=>[a(hs,{"model-value":l.selectedDate,color:"primary","onUpdate:modelValue":i.handleDateSelect},null,8,["model-value","onUpdate:modelValue"])]),_:1})]),_:1}),se(a(k,{loading:l.loading,title:"刷新数据",class:"toolbar-btn",icon:"mdi-refresh",variant:"text",onClick:e[3]||(e[3]=d=>t.$emit("refresh"))},null,8,["loading"]),[[xe]]),l.isToday?_("",!0):se((f(),V(k,{key:0,title:"查看明天",class:"toolbar-btn",icon:"mdi-chevron-right",variant:"text",onClick:e[4]||(e[4]=d=>t.$emit("next-day"))},null,512)),[[xe]])]),_:1})]),_:1},8,["class"])]),_:1})}const wt=he(ia,[["render",oa],["__scopeId","data-v-3af8a795"]]),ra={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,l;return!this.subject||!((l=(e=(t=this.templateData)==null?void 0:t.subjects)==null?void 0:e[this.subject])!=null&&l.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},showQuickTools(){return S("display.showQuickTools")}},watch:{async modelValue(t){if(t){this.content=this.initialContent;try{this.templateData=await Ve.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,l=this.content;let u=0;const s=l.split(`
`);for(let i=0;i<s.length;i++){const d=s[i].length,m=u+d;if(e<=m||i===s.length-1){this.currentLine=s[i],this.currentLineStart=u,this.currentLineEnd=m;break}u=m+1}this.currentLine||(this.currentLine="",this.currentLineStart=l.length,this.currentLineEnd=l.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(`
`),l=e.findIndex(u=>u.includes(t));l!==-1&&(e.splice(l,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 l=this.content.split(`
`);let u=0;for(let s=0;s<l.length;s++){if(l[s].includes(t)){u+=l[s].length;break}u+=l[s].length+1}e.setSelectionRange(u,u)}this.updateCurrentLine()})},handlePageClick(t,e){if(this.isPageSelected(t,e)){const l=this.currentLineStart,u=this.currentLineEnd,s=this.content.slice(l,u),i=s.lastIndexOf(e);if(i!==-1){const d=s.slice(0,i)+s.slice(i+e.length);this.content=this.content.slice(0,l)+d.trim()+this.content.slice(u)}}else{const l=this.currentLineStart,u=this.currentLineEnd,s=this.content.slice(l,u);this.content=this.content.slice(0,l)+s.trim()+(s.trim().length>0?" ":"")+e+this.content.slice(u)}this.$nextTick(()=>{const l=this.$refs.inputRef.$el.querySelector("textarea");l.focus();const u=this.content.split(`
`);let s=0;for(let i=0;i<u.length&&(s+=u[i].length,!(s>this.currentLineStart));i++)s+=1;l.setSelectionRange(s,s),this.updateCurrentLine()})},insertTemplate(t){const e=this.$refs.inputRef.$el.querySelector("textarea"),l=e.selectionStart,u=e.selectionEnd,s=l>0&&this.content[l-1]!==" "&&this.content[l-1]!==`
`;this.content=this.content.slice(0,l)+(s?" ":"")+t+this.content.slice(u),this.$nextTick(()=>{e.focus();const i=l+t.length+(s?1:0);e.setSelectionRange(i,i),this.updateCurrentLine()})},insertAtCursor(t){if(!t)return;const e=this.$refs.inputRef.$el.querySelector("textarea"),l=e.selectionStart,u=e.selectionEnd;this.content=this.content.slice(0,l)+t+this.content.slice(u),this.$nextTick(()=>{e.focus();const s=l+t.length;e.setSelectionRange(s,s),this.updateCurrentLine()})},deleteLastChar(){const t=this.$refs.inputRef.$el.querySelector("textarea"),e=t.selectionStart,l=t.selectionEnd;e===l?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(l),this.$nextTick(()=>{t.focus(),t.setSelectionRange(e,e),this.updateCurrentLine()}))}}},ua={class:"d-flex"},da={class:"flex-grow-1"},ca={key:0,class:"mt-4"},ma={key:0,class:"template-buttons"},fa={key:0,class:"pages-container mt-2"},ha={key:0,class:"pages-container mt-2"},va={key:2,class:"button-group"},pa={key:1,class:"text-center text-body-2 text-disabled mt-2"},ga={key:0,class:"quick-tools ml-4",style:{"min-width":"180px"}},ka={class:"numeric-keypad mb-4"},ba={class:"keypad-row"},ya={class:"keypad-row"},xa={class:"keypad-row"},wa={class:"keypad-row"},Sa={class:"keypad-row"},Ca={class:"d-flex flex-wrap gap-1"};function Da(t,e,l,u,s,i){return f(),V(fe,{modelValue:i.dialogVisible,"onUpdate:modelValue":e[5]||(e[5]=d=>i.dialogVisible=d),"max-width":"900",width:"auto","onClick:outside":i.handleClose},{default:n(()=>[a(A,{border:""},{default:n(()=>[a(ie,null,{default:n(()=>[r(x(l.title),1)]),_:1}),a(Ot,null,{default:n(()=>[r(x(l.autoSave?"喵?喵呜!":"写完后点击上传谢谢喵"),1)]),_:1}),a(Q,null,{default:n(()=>{var d;return[o("div",ua,[o("div",da,[a(We,{ref:"inputRef",modelValue:s.content,"onUpdate:modelValue":e[0]||(e[0]=m=>s.content=m),"auto-grow":"",placeholder:"使用换行表示分条",rows:"5",width:"480",onClick:i.updateCurrentLine,onKeyup:i.updateCurrentLine},null,8,["modelValue","onClick","onKeyup"]),s.templateData?(f(),w("div",ca,[i.hasTemplates?(f(),w("div",ma,[i.subjectBooks?(f(!0),w(P,{key:0},O(i.subjectBooks,(m,g)=>(f(),w("div",{key:g,class:"button-group"},[a(J,{color:i.isBookSelected(g)?"success":"default",variant:i.isBookSelected(g)?"elevated":"flat",class:"ma-1 book-chip",onClick:b=>i.handleBookClick(g)},{default:n(()=>[r(x(g),1)]),_:2},1032,["color","variant","onClick"]),i.isBookSelected(g)?(f(),w("div",fa,[(f(!0),w(P,null,O(m,b=>(f(),V(J,{key:b,color:i.isPageSelected(g,b)?"info":"default",variant:i.isPageSelected(g,b)?"elevated":"flat",class:"ma-1",onClick:p=>i.handlePageClick(g,b)},{default:n(()=>[r(x(b),1)]),_:2},1032,["color","variant","onClick"]))),128))])):_("",!0)]))),128)):_("",!0),i.commonBooks?(f(!0),w(P,{key:1},O(i.commonBooks,(m,g)=>(f(),w("div",{key:g,class:"button-group"},[a(J,{color:i.isBookSelected(g)?"success":"default",variant:i.isBookSelected(g)?"elevated":"flat",class:"ma-1 book-chip",onClick:b=>i.handleBookClick(g)},{default:n(()=>[r(x(g),1)]),_:2},1032,["color","variant","onClick"]),i.isBookSelected(g)?(f(),w("div",ha,[(f(!0),w(P,null,O(m,b=>(f(),V(J,{key:b,color:i.isPageSelected(g,b)?"info":"default",variant:i.isPageSelected(g,b)?"elevated":"flat",class:"ma-1",onClick:p=>i.handlePageClick(g,b)},{default:n(()=>[r(x(b),1)]),_:2},1032,["color","variant","onClick"]))),128))])):_("",!0)]))),128)):_("",!0),(d=s.templateData.actions)!=null&&d.length?(f(),w("div",va,[(f(!0),w(P,null,O(s.templateData.actions,m=>(f(),V(J,{key:m,class:"ma-1",color:"primary",variant:"flat",onClick:g=>i.insertTemplate(m)},{default:n(()=>[r(x(m),1)]),_:2},1032,["onClick"]))),128))])):_("",!0)])):(f(),w("div",pa," 暂无可用的模板 "))])):_("",!0)]),i.showQuickTools?(f(),w("div",ga,[o("div",ka,[o("div",ba,[(f(),w(P,null,O(3,m=>a(k,{key:m,class:"keypad-btn",size:"small",variant:"tonal",onClick:g=>i.insertAtCursor(String(m))},{default:n(()=>[r(x(m),1)]),_:2},1032,["onClick"])),64))]),o("div",ya,[(f(),w(P,null,O(3,m=>a(k,{key:m,class:"keypad-btn",size:"small",variant:"tonal",onClick:g=>i.insertAtCursor(String(m+3))},{default:n(()=>[r(x(m+3),1)]),_:2},1032,["onClick"])),64))]),o("div",xa,[(f(),w(P,null,O(3,m=>a(k,{key:m,class:"keypad-btn",size:"small",variant:"tonal",onClick:g=>i.insertAtCursor(String(m+6))},{default:n(()=>[r(x(m+6),1)]),_:2},1032,["onClick"])),64))]),o("div",wa,[a(k,{class:"keypad-btn",size:"small",variant:"tonal",onClick:e[1]||(e[1]=m=>i.insertAtCursor("-"))},{default:n(()=>[...e[6]||(e[6]=[r(" - ",-1)])]),_:1}),a(k,{class:"keypad-btn",size:"small",variant:"tonal",onClick:e[2]||(e[2]=m=>i.insertAtCursor("0"))},{default:n(()=>[...e[7]||(e[7]=[r(" 0 ",-1)])]),_:1}),a(k,{class:"keypad-btn",color:"error",size:"small",variant:"tonal",onClick:i.deleteLastChar},{default:n(()=>[...e[8]||(e[8]=[r(" ← ",-1)])]),_:1},8,["onClick"])]),o("div",Sa,[a(k,{class:"keypad-btn space-btn",size:"small",variant:"tonal",onClick:e[3]||(e[3]=m=>i.insertAtCursor(" "))},{default:n(()=>[...e[9]||(e[9]=[r(" 空格 ",-1)])]),_:1}),a(k,{class:"keypad-btn space-btn",size:"small",variant:"tonal",onClick:e[4]||(e[4]=m=>i.insertAtCursor(`
`))},{default:n(()=>[...e[10]||(e[10]=[r(" 换行 ",-1)])]),_:1})])]),o("div",Ca,[(f(!0),w(P,null,O(s.quickTexts,m=>(f(),V(k,{key:m,size:"small",variant:"flat",onClick:g=>i.insertAtCursor(m)},{default:n(()=>[r(x(m),1)]),_:2},1032,["onClick"]))),128))])])):_("",!0)])]}),_:1}),e[11]||(e[11]=o("div",{class:"text-center text-body-2 text-disabled mb-5"}," 点击空白处完成编辑 ",-1))]),_:1})]),_:1},8,["modelValue","onClick:outside"])}const St=he(ra,[["render",Da],["__scopeId","data-v-a5bc3cb0"]]),Va=Kt({autoSelectFirst:{type:[Boolean,String]},clearOnSelect:Boolean,search:String,...Ss({filterKeys:["title"]}),...ws(),...ss(ds({modelValue:null,role:"combobox"}),["validationValue","dirty","appendInnerIcon"])},"VAutocomplete"),_a=$t()({name:"VAutocomplete",props:Va(),emits:{"update:focused":t=>!0,"update:search":t=>!0,"update:modelValue":t=>!0,"update:menu":t=>!0},setup(t,e){let{slots:l}=e;const{t:u}=Ht(),s=z(),i=Ce(!1),d=Ce(!0),m=Ce(!1),g=z(),b=z(),p=Ce(-1),D=Ce(null),{items:K,transformIn:te,transformOut:M}=qt(t),{textColorClasses:h,textColorStyles:N}=Gt(()=>{var y;return(y=s.value)==null?void 0:y.color}),B=Ke(t,"search",""),L=Ke(t,"modelValue",[],y=>te(y===null?[null]:Yt(y)),y=>{const F=M(y);return t.multiple?F:F[0]??null}),pe=$(()=>typeof t.counterValue=="function"?t.counterValue(L.value):typeof t.counterValue=="number"?t.counterValue:L.value.length),de=us(t),{filteredItems:ce,getMatches:C}=gs(t,K,()=>D.value??(d.value?"":B.value)),v=$(()=>t.hideSelected&&D.value===null?ce.value.filter(y=>!L.value.some(F=>F.value===y.value)):ce.value),I=$(()=>!!(t.chips||l.chip)),ee=$(()=>I.value||!!l.selection),H=$(()=>L.value.map(y=>y.props.value)),Z=$(()=>{var F;return(t.autoSelectFirst===!0||t.autoSelectFirst==="exact"&&B.value===((F=v.value[0])==null?void 0:F.title))&&v.value.length>0&&!d.value&&!m.value}),q=$(()=>t.hideNoData&&!v.value.length||de.isReadonly.value||de.isDisabled.value),c=Ke(t,"menu"),R=$({get:()=>c.value,set:y=>{var F;c.value&&!y&&((F=g.value)!=null&&F.ΨopenChildren.size)||y&&q.value||(c.value=y)}}),{menuId:ae,ariaExpanded:Se,ariaControls:Fe,ariaLabel:Pe}=ks(t,R),le=z(),Vt=bs(le,s);function _t(y){t.openOnClear&&(R.value=!0),B.value=""}function Tt(){q.value||(R.value=!0)}function Lt(y){q.value||(i.value&&(y.preventDefault(),y.stopPropagation()),R.value=!R.value)}function It(y){var F;(nt(y)||y.key==="Backspace")&&((F=s.value)==null||F.focus())}function At(y){var E,Y,ne,me,U;if(de.isReadonly.value)return;const F=(E=s.value)==null?void 0:E.selectionStart,j=L.value.length;if(["Enter","ArrowDown","ArrowUp"].includes(y.key)&&y.preventDefault(),["Enter","ArrowDown"].includes(y.key)&&(R.value=!0),["Escape"].includes(y.key)&&(R.value=!1),Z.value&&["Enter","Tab"].includes(y.key)&&!L.value.some(G=>{let{value:W}=G;return W===v.value[0].value})&&be(v.value[0]),y.key==="ArrowDown"&&Z.value&&((Y=le.value)==null||Y.focus("next")),["Backspace","Delete"].includes(y.key)){if(!t.multiple&&ee.value&&L.value.length>0&&!B.value)return be(L.value[0],!1);if(~p.value){y.preventDefault();const G=p.value;be(L.value[p.value],!1),p.value=G>=j-1?j-2:G}else y.key==="Backspace"&&!B.value&&(p.value=j-1);return}if(t.multiple)if(y.key==="ArrowLeft"){if(p.value<0&&F&&F>0)return;const G=p.value>-1?p.value-1:j-1;if(L.value[G])p.value=G;else{const W=((ne=B.value)==null?void 0:ne.length)??null;p.value=-1,(me=s.value)==null||me.setSelectionRange(W,W)}}else if(y.key==="ArrowRight"){if(p.value<0)return;const G=p.value+1;L.value[G]?p.value=G:(p.value=-1,(U=s.value)==null||U.setSelectionRange(0,0))}else~p.value&&nt(y)&&(p.value=-1)}function Nt(y){if(lt(s.value,":autofill")||lt(s.value,":-webkit-autofill")){const F=K.value.find(j=>j.title===y.target.value);F&&be(F)}}function Ft(){var y;t.eager&&((y=b.value)==null||y.calculateVisibleItems())}function Pt(){var y;i.value&&(d.value=!0,(y=s.value)==null||y.focus()),D.value=null}function zt(y){i.value=!0,setTimeout(()=>{m.value=!0})}function Et(y){m.value=!1}function Rt(y){(y==null||y===""&&!t.multiple&&!ee.value)&&(L.value=[])}const $e=Ce(!1);function be(y){let F=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!(!y||y.props.disabled))if(t.multiple){const j=L.value.findIndex(Y=>(t.valueComparator||as)(Y.value,y.value)),E=F??!~j;if(~j){const Y=E?[...L.value,y]:[...L.value];Y.splice(j,1),L.value=Y}else E&&(L.value=[...L.value,y]);t.clearOnSelect&&(B.value="")}else{const j=F!==!1;L.value=j?[y]:[],D.value=d.value?"":B.value??"",B.value=j&&!ee.value?y.title:"",at(()=>{R.value=!1,d.value=!0})}}return ge(i,(y,F)=>{var j;y!==F&&(y?($e.value=!0,B.value=t.multiple||ee.value?"":String(((j=L.value.at(-1))==null?void 0:j.props.title)??""),d.value=!0,at(()=>$e.value=!1)):(!t.multiple&&B.value==null&&(L.value=[]),R.value=!1,!d.value&&B.value&&(D.value=B.value),B.value="",p.value=-1))}),ge(B,y=>{!i.value||$e.value||(y&&(R.value=!0),d.value=!y)}),ge(R,y=>{if(!t.hideSelected&&y&&L.value.length&&d.value){const F=v.value.findIndex(j=>L.value.some(E=>j.value===E.value));Jt&&window.requestAnimationFrame(()=>{var j;F>=0&&((j=b.value)==null||j.scrollToIndex(F))})}y&&(D.value=null)}),ge(K,(y,F)=>{R.value||i.value&&!F.length&&y.length&&(R.value=!0)}),Wt(()=>{const y=!!(!t.hideNoData||v.value.length||l["prepend-item"]||l["append-item"]||l["no-data"]),F=L.value.length>0,j=ke.filterProps(t);return a(ke,re({ref:s},j,{modelValue:B.value,"onUpdate:modelValue":[E=>B.value=E,Rt],focused:i.value,"onUpdate:focused":E=>i.value=E,validationValue:L.externalValue,counterValue:pe.value,dirty:F,onChange:Nt,class:["v-autocomplete",`v-autocomplete--${t.multiple?"multiple":"single"}`,{"v-autocomplete--active-menu":R.value,"v-autocomplete--chips":!!t.chips,"v-autocomplete--selection-slot":!!ee.value,"v-autocomplete--selecting-index":p.value>-1},t.class],style:t.style,readonly:de.isReadonly.value,placeholder:F?void 0:t.placeholder,"onClick:clear":_t,"onMousedown:control":Tt,onKeydown:At,"aria-expanded":Se.value,"aria-controls":Fe.value}),{...l,default:()=>o(P,null,[a(gt,re({id:ae.value,ref:g,modelValue:R.value,"onUpdate:modelValue":E=>R.value=E,activator:"parent",contentClass:"v-autocomplete__content",disabled:q.value,eager:t.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,onAfterEnter:Ft,onAfterLeave:Pt},t.menuProps),{default:()=>[y&&a(qe,re({ref:le,filterable:!0,selected:H.value,selectStrategy:t.multiple?"independent":"single-independent",onMousedown:E=>E.preventDefault(),onKeydown:It,onFocusin:zt,onFocusout:Et,tabindex:"-1",selectable:!0,"aria-live":"polite",color:t.itemColor??t.color},Vt,t.listProps),{default:()=>{var E,Y,ne;return[(E=l["prepend-item"])==null?void 0:E.call(l),!v.value.length&&!t.hideNoData&&(((Y=l["no-data"])==null?void 0:Y.call(l))??a(Be,{key:"no-data",title:u(t.noDataText)},null)),a(ys,{ref:b,renderless:!0,items:v.value,itemKey:"value"},{default:me=>{var Xe,Ze,et;let{item:U,index:G,itemRef:W}=me;const Qe=re(U.props,{ref:W,key:U.value,active:Z.value&&G===0?!0:void 0,onClick:()=>be(U,null)});return U.type==="divider"?((Xe=l.divider)==null?void 0:Xe.call(l,{props:U.raw,index:G}))??a(De,re(U.props,{key:`divider-${G}`}),null):U.type==="subheader"?((Ze=l.subheader)==null?void 0:Ze.call(l,{props:U.raw,index:G}))??a(Xt,re(U.props,{key:`subheader-${G}`}),null):((et=l.item)==null?void 0:et.call(l,{item:U,index:G,props:Qe}))??a(Be,re(Qe,{role:"option"}),{prepend:ze=>{let{isSelected:Ut}=ze;return o(P,null,[t.multiple&&!t.hideSelected?a(Cs,{key:U.value,modelValue:Ut,ripple:!1,tabindex:"-1",onClick:Mt=>Mt.preventDefault()},null):void 0,U.props.prependAvatar&&a(je,{image:U.props.prependAvatar},null),U.props.prependIcon&&a(T,{icon:U.props.prependIcon},null)])},title:()=>{var ze;return d.value?U.title:xs("v-autocomplete",U.title,(ze=C(U))==null?void 0:ze.title)}})}}),(ne=l["append-item"])==null?void 0:ne.call(l)]}})]}),L.value.map((E,Y)=>{function ne(W){W.stopPropagation(),W.preventDefault(),be(E,!1)}const me={"onClick:close":ne,onKeydown(W){W.key!=="Enter"&&W.key!==" "||(W.preventDefault(),W.stopPropagation(),ne(W))},onMousedown(W){W.preventDefault(),W.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},U=I.value?!!l.chip:!!l.selection,G=U?Zt(I.value?l.chip({item:E,index:Y,props:me}):l.selection({item:E,index:Y})):void 0;if(!(U&&!G))return o("div",{key:E.value,class:Ne(["v-autocomplete__selection",Y===p.value&&["v-autocomplete__selection--selected",h.value]]),style:Te(Y===p.value?N.value:{})},[I.value?l.chip?a(es,{key:"chip-defaults",defaults:{VChip:{closable:t.closableChips,size:"small",text:E.title}}},{default:()=>[G]}):a(J,re({key:"chip",closable:t.closableChips,size:"small",text:E.title,disabled:E.props.disabled},me),null):G??o("span",{class:"v-autocomplete__selection-text"},[E.title,t.multiple&&Y<L.value.length-1&&o("span",{class:"v-autocomplete__selection-comma"},[r(",")])])])})]),"append-inner":function(){var me,U;for(var E=arguments.length,Y=new Array(E),ne=0;ne<E;ne++)Y[ne]=arguments[ne];return o(P,null,[(me=l["append-inner"])==null?void 0:me.call(l,...Y),t.menuIcon?a(T,{class:"v-autocomplete__menu-icon",color:(U=s.value)==null?void 0:U.fieldIconColor,icon:t.menuIcon,onMousedown:Lt,onClick:Qt,"aria-label":Pe.value,title:Pe.value,tabindex:"-1"},null):void 0])}})}),ts({isFocused:i,isPristine:d,menu:R,search:B,filteredItems:ce,select:be},s)}}),Ta={key:0,class:"mt-2 text-caption text-medium-emphasis"},La={__name:"StudentNameManager",emits:["token-info-updated"],setup(t,{expose:e,emit:l}){const u=l,s=z(!1),i=z(""),d=z([]),m=z(""),g=z(!1),b=z(""),p=z(null),D=$(()=>{var C;return((C=p.value)==null?void 0:C.deviceType)==="student"}),K=$(()=>{var C;return((C=p.value)==null?void 0:C.isReadOnly)===!0}),te=$(()=>{var C;return((C=p.value)==null?void 0:C.note)||"设置名称"}),M=$(()=>!!h.value),h=$(()=>S("server.kvToken")),N=$(()=>S("server.provider")),B=$(()=>N.value==="kv-server"||N.value==="classworkscloud"),L=async()=>{if(!(!B.value||!h.value))try{const C=S("server.domain");if(!C)return;const v=await we.get(`${C}/kv/_token`,{headers:{Authorization:`Bearer ${h.value}`}});if(p.value=v.data,p.value.deviceType!=="student")return;m.value=p.value.note||"";const ee=(await we.get(`${C}/kv/classworks-list-main`,{headers:{Authorization:`Bearer ${h.value}`}})).data.value||[];if(d.value=Array.isArray(ee)?ee:[],d.value.length===0)return;const H=p.value.note||"",Z=d.value.some(q=>q.name===H);(!H||!Z)&&(s.value=!0,i.value="")}catch(C){console.error("检查学生姓名状态失败:",C)}},pe=async()=>{var C,v,I,ee;if(!(!i.value||g.value)){b.value="",g.value=!0;try{const H=S("server.domain"),Z=h.value;(await we.post(`${H}/apps/tokens/${Z}/set-student-name`,{name:i.value})).data.success&&(m.value=i.value,s.value=!1,await L(),u("token-info-updated"))}catch(H){const Z=(C=H==null?void 0:H.response)==null?void 0:C.status;Z===400?b.value="该名称不在学生列表中,请选择正确的姓名":Z===403?b.value="只有学生类型的 Token 可以设置姓名":Z===404?b.value="设备未设置学生列表或 Token 不存在":b.value=((ee=(I=(v=H==null?void 0:H.response)==null?void 0:v.data)==null?void 0:I.error)==null?void 0:ee.message)||(H==null?void 0:H.message)||"设置失败,请稍后重试"}finally{g.value=!1}}},de=()=>{s.value=!1},ce=async()=>{if(console.log("StudentNameManager.openDialog called"),console.log("isStudentToken:",D.value),console.log("studentList.length:",d.value.length),console.log("currentStudentName:",m.value),!D.value){console.log("Not a student token, cannot open dialog");return}d.value=await Ve.loadData("classworks-list-main"),d.value.length===0?(console.log("Student list is empty, trying to load..."),L().then(()=>{d.value.length>0?(i.value=m.value,s.value=!0):console.warn("Student list is still empty after reload")})):(i.value=m.value,s.value=!0,console.log("Dialog opened, showDialog:",s.value))};return ge(h,()=>{L()}),ht(()=>{L()}),ge(p,()=>{u("token-info-updated")},{deep:!0}),vt(()=>{L()}),e({checkStudentNameStatus:L,openDialog:ce,currentStudentName:m,isStudentToken:D,isReadOnly:K,displayName:te,hasToken:M,tokenInfo:p}),(C,v)=>(f(),w(P,null,[a(fe,{modelValue:s.value,"onUpdate:modelValue":v[1]||(v[1]=I=>s.value=I),"max-width":"500",persistent:""},{default:n(()=>[a(A,null,{default:n(()=>[a(ie,null,{default:n(()=>[...v[2]||(v[2]=[r("设置学生姓名",-1)])]),_:1}),a(Q,null,{default:n(()=>[v[3]||(v[3]=o("div",{class:"mb-2"}," 请从列表中选择您的姓名: ",-1)),a(_a,{modelValue:i.value,"onUpdate:modelValue":v[0]||(v[0]=I=>i.value=I),items:d.value,clearable:"","hide-details":"","item-title":"name","item-value":"name",label:"学生姓名",placeholder:"选择您的姓名"},null,8,["modelValue","items"]),d.value.length>0?(f(),w("div",Ta," 共 "+x(d.value.length)+" 位学生 ",1)):_("",!0),b.value?(f(),V(Oe,{key:1,class:"mt-3",type:"error",variant:"tonal"},{default:n(()=>[r(x(b.value),1)]),_:1})):_("",!0)]),_:1}),a(ve,null,{default:n(()=>[a(k,{variant:"text",onClick:de},{default:n(()=>[...v[4]||(v[4]=[r(" 稍后设置 ",-1)])]),_:1}),a(oe),a(k,{disabled:!i.value||g.value,loading:g.value,color:"primary",onClick:pe},{default:n(()=>[...v[5]||(v[5]=[r(" 确认 ",-1)])]),_:1},8,["disabled","loading"])]),_:1})]),_:1})]),_:1},8,["modelValue"]),ns(C.$slots,"header-display",{isStudent:D.value,openDialog:ce,studentName:m.value},void 0)],64))}},Ct=he(La,[["__scopeId","data-v-49cb0f5f"]]),Ia={class:"text-center mb-6"},Aa={class:"text-body-2"},Na={class:"form-section"},Fa={__name:"DeviceAuthDialog",props:{showCancel:{type:Boolean,default:!1},preconfig:{type:Object,default:null}},emits:["success","cancel"],setup(t,{expose:e,emit:l}){const u=t,s=l,i=z({namespace:"",password:""}),d=z(!1),m=z("");ge(()=>u.preconfig,b=>{b&&(console.log("应用预配置数据:",b),i.value.namespace=b.namespace||"",i.value.password=b.password||"",b.autoExecute&&b.namespace?(console.log("检测到自动执行标志且有命名空间,自动执行认证"),setTimeout(()=>{g()},300)):b.namespace&&console.log("预配置数据已填入,等待手动认证"))},{immediate:!0,deep:!0});const g=async()=>{var b,p,D,K,te;if(!(!i.value.namespace||d.value)){m.value="",d.value=!0;try{const M=S("server.domain");if(!M)throw new Error("未配置服务器域名");const h=await we.post(`${M}/apps/auth/token`,{namespace:i.value.namespace,password:i.value.password||void 0,appId:"d158067f53627d2b98babe8bffd2fd7d"});if(!h.data.success)throw new Error("设备验证失败");const N=h.data;ue("server.kvToken",N.token),(b=N.device)!=null&&b.uuid&&ue("device.uuid",N.device.uuid),s("success",N)}catch(M){const h=(p=M==null?void 0:M.response)==null?void 0:p.status;h===401||h===403?m.value="密码错误或无权限访问":h===404?m.value="设备不存在,请检查 namespace 是否正确":m.value=((te=(K=(D=M==null?void 0:M.response)==null?void 0:D.data)==null?void 0:K.error)==null?void 0:te.message)||(M==null?void 0:M.message)||"认证失败,请稍后重试"}finally{d.value=!1}}};return e({reset:()=>{i.value={namespace:"",password:""},m.value=""}}),(b,p)=>(f(),V(A,{class:"auth-card"},{default:n(()=>[a(Q,{class:"pa-8"},{default:n(()=>[o("div",Ia,[a(T,{class:"mb-4",color:"success",size:"80"},{default:n(()=>[...p[4]||(p[4]=[r(" mdi-account-key ",-1)])]),_:1}),p[5]||(p[5]=o("h2",{class:"text-h4 mb-3"}," 设备认证 ",-1)),p[6]||(p[6]=o("p",{class:"text-body-1 text-medium-emphasis"}," 输入你在 Classworks KV 获取的认证信息 ",-1))]),a(A,{class:"pa-4 mb-6",color:"info",variant:"tonal"},{default:n(()=>[o("div",Aa,[a(T,{class:"mr-2",size:"20"},{default:n(()=>[...p[7]||(p[7]=[r(" mdi-information ",-1)])]),_:1}),p[8]||(p[8]=r(" 对于已有UUID的用户您应当使用UUID与您的密码登录。 ",-1))])]),_:1}),o("div",Na,[a(ke,{modelValue:i.value.namespace,"onUpdate:modelValue":p[0]||(p[0]=D=>i.value.namespace=D),class:"mb-4","hide-details":"auto",label:"命名空间","prepend-inner-icon":"mdi-identifier",variant:"outlined"},null,8,["modelValue"]),a(ke,{modelValue:i.value.password,"onUpdate:modelValue":p[1]||(p[1]=D=>i.value.password=D),label:"认证码","prepend-inner-icon":"mdi-lock-outline",type:"text",variant:"outlined"},null,8,["modelValue"]),m.value?(f(),V(Oe,{key:0,class:"mt-4",closable:"",type:"error",variant:"tonal","onClick:close":p[2]||(p[2]=D=>m.value="")},{default:n(()=>[r(x(m.value),1)]),_:1})):_("",!0)])]),_:1}),a(ve,{class:"pa-6 pt-0"},{default:n(()=>[t.showCancel?(f(),V(k,{key:0,size:"large",variant:"text",onClick:p[3]||(p[3]=D=>b.$emit("cancel"))},{default:n(()=>[...p[9]||(p[9]=[r(" 取消 ",-1)])]),_:1})):_("",!0),a(oe),a(k,{disabled:!i.value.namespace||d.value,loading:d.value,class:"px-8",color:"primary",size:"x-large",variant:"elevated",onClick:g},{default:n(()=>[a(T,{size:"24",start:""},{default:n(()=>[...p[10]||(p[10]=[r(" mdi-login ",-1)])]),_:1}),p[11]||(p[11]=o("span",{class:"text-h6"},"认证并登录",-1))]),_:1},8,["disabled","loading"])]),_:1})]),_:1}))}},Pa=he(Fa,[["__scopeId","data-v-9e8d02e4"]]),za={__name:"TokenInputDialog",props:{showCancel:{type:Boolean,default:!1}},emits:["success","cancel"],setup(t,{expose:e,emit:l}){const u=l,s=z(""),i=z(!1),d=z(""),m=async()=>{var g,b,p;if(!(!s.value||i.value)){d.value="",i.value=!0;try{const D=S("server.domain");if(!D)throw new Error("未配置服务器域名");await we.get(`${D}/kv/_info`,{headers:{Accept:"application/json","x-app-token":s.value}}),ue("server.kvToken",s.value),u("success")}catch(D){const K=(g=D==null?void 0:D.response)==null?void 0:g.status;K===401||K===403?d.value="Token 无效或无权限,请确认后重试":K===404?d.value="命名空间不存在或服务器未就绪":d.value=((p=(b=D==null?void 0:D.response)==null?void 0:b.data)==null?void 0:p.message)||(D==null?void 0:D.message)||"验证失败,请稍后重试"}finally{i.value=!1}}};return e({reset:()=>{s.value="",d.value=""}}),(g,b)=>(f(),V(A,null,{default:n(()=>[a(ie,null,{default:n(()=>[...b[2]||(b[2]=[r("输入授权 Token",-1)])]),_:1}),a(Q,null,{default:n(()=>[a(ke,{modelValue:s.value,"onUpdate:modelValue":b[0]||(b[0]=p=>s.value=p),clearable:"",density:"comfortable","hide-details":"auto",label:"KV 授权 Token",placeholder:"粘贴从授权页面获取的 Token",variant:"outlined"},null,8,["modelValue"]),d.value?(f(),V(Oe,{key:0,class:"mt-3",type:"error",variant:"tonal"},{default:n(()=>[r(x(d.value),1)]),_:1})):_("",!0)]),_:1}),a(ve,null,{default:n(()=>[a(oe),t.showCancel?(f(),V(k,{key:0,variant:"text",onClick:b[1]||(b[1]=p=>g.$emit("cancel"))},{default:n(()=>[...b[3]||(b[3]=[r(" 取消 ",-1)])]),_:1})):_("",!0),a(k,{disabled:!s.value||i.value,loading:i.value,color:"primary",onClick:m},{default:n(()=>[...b[4]||(b[4]=[r(" 保存 Token ",-1)])]),_:1},8,["disabled","loading"])]),_:1})]),_:1}))}},Ea={__name:"AlternativeCodeDialog",props:{showCancel:{type:Boolean,default:!1}},emits:["submit","cancel"],setup(t,{expose:e,emit:l}){const u=l,s=z(""),i=()=>{s.value&&u("submit",s.value)};return e({reset:()=>{s.value=""}}),(d,m)=>(f(),V(A,null,{default:n(()=>[a(ie,null,{default:n(()=>[...m[2]||(m[2]=[r("输入替代代码",-1)])]),_:1}),a(Q,null,{default:n(()=>[a(We,{modelValue:s.value,"onUpdate:modelValue":m[0]||(m[0]=g=>s.value=g),density:"comfortable","hide-details":"auto",label:"替代代码",placeholder:"请输入替代代码",rows:"5",variant:"outlined"},null,8,["modelValue"]),a(Oe,{class:"mt-3",type:"info",variant:"tonal"},{default:n(()=>[...m[3]||(m[3]=[r(" 替代代码功能暂未实现,敬请期待 ",-1)])]),_:1})]),_:1}),a(ve,null,{default:n(()=>[a(oe),t.showCancel?(f(),V(k,{key:0,variant:"text",onClick:m[1]||(m[1]=g=>d.$emit("cancel"))},{default:n(()=>[...m[4]||(m[4]=[r(" 取消 ",-1)])]),_:1})):_("",!0),a(k,{disabled:!s.value,color:"primary",onClick:i},{default:n(()=>[...m[5]||(m[5]=[r(" 提交 ",-1)])]),_:1},8,["disabled"])]),_:1})]),_:1}))}};let Ee;const Ra=new Uint8Array(16);function Ua(){if(!Ee&&(Ee=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!Ee))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Ee(Ra)}const X=[];for(let t=0;t<256;++t)X.push((t+256).toString(16).slice(1));function Ma(t,e=0){return X[t[e+0]]+X[t[e+1]]+X[t[e+2]]+X[t[e+3]]+"-"+X[t[e+4]]+X[t[e+5]]+"-"+X[t[e+6]]+X[t[e+7]]+"-"+X[t[e+8]]+X[t[e+9]]+"-"+X[t[e+10]]+X[t[e+11]]+X[t[e+12]]+X[t[e+13]]+X[t[e+14]]+X[t[e+15]]}const Ba=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),mt={randomUUID:Ba};function ja(t,e,l){if(mt.randomUUID&&!t)return mt.randomUUID();t=t||{};const u=t.random||(t.rng||Ua)();return u[6]=u[6]&15|64,u[8]=u[8]&63|128,Ma(u)}const Oa={class:"step-content"},$a={class:"text-center mb-6"},Ka={class:"step-content"},Ha={class:"relationship-diagram"},qa={class:"diagram-item"},Ga={class:"text-center"},Ya={class:"diagram-description mt-3"},Ja={class:"diagram-connector"},Wa={class:"diagram-item"},Qa={class:"text-center"},Xa={class:"diagram-description mt-3"},Za={class:"step-content"},en={class:"button-group"},tn={class:"d-flex flex-column align-center py-2"},sn={class:"d-flex flex-column align-center py-2"},an={class:"step-content"},nn={class:"text-center mb-6"},ln={class:"step-content"},on={class:"text-center mb-6"},rn={class:"d-flex flex-column flex-sm-row align-center"},un={class:"flex-grow-1"},dn={class:"text-h6 font-weight-bold"},cn={class:"text-h5 mb-6"},mn={class:"text-subtitle-2"},fn={class:"d-flex align-center"},hn={class:"d-flex align-center"},vn={class:"step-content"},pn={class:"text-center mb-6"},gn={class:"d-flex align-center mb-3"},kn={class:"text-h6 font-weight-medium"},bn={key:0,class:"text-body-2 mb-2"},yn={class:"mb-2"},xn={class:"device-code"},wn={key:1,class:"text-body-2 text-error"},Sn={class:"log-box"},Cn={key:0,class:"text-caption text-medium-emphasis"},Dn={class:"d-flex flex-wrap gap-2 mt-4"},Re=5,Vn={__name:"FirstTimeGuide",emits:["close","success"],setup(t,{emit:e}){const l=e,u=S("server.authDomain"),s=z(1),i=z(""),d=z("idle"),m=z(""),g=z(null),b=z(null),p=z([]),D=z({1:!1,2:!1,3:!1,4:!1}),K=()=>{s.value<Re&&s.value++},te=()=>{s.value>1&&s.value--},M=q=>{i.value=q,K()},h=()=>{l("close")},N=()=>{window.open(u,"_blank")},B=()=>{s.value=5},L=$(()=>Object.values(D.value).filter(Boolean).length/4*100),pe=$(()=>d.value==="success"?"success":d.value==="error"?"error":"primary"),de=$(()=>d.value==="success"?"mdi-check-circle":d.value==="error"?"mdi-alert-circle":d.value==="registering"?"mdi-progress-clock":"mdi-rocket-launch"),ce=$(()=>d.value==="success"?"完成!设备已创建":d.value==="error"?"创建失败":d.value==="registering"?"正在执行…":"准备开始"),C=q=>{const c=new Date,R=String(c.getHours()).padStart(2,"0"),ae=String(c.getMinutes()).padStart(2,"0"),Se=String(c.getSeconds()).padStart(2,"0");p.value.push({time:`${R}:${ae}:${Se}`,message:q})},v=()=>"Classworks",I=async()=>{var q,c,R;if(d.value!=="registering"){d.value="registering",m.value="",p.value=[],D.value={1:!1,2:!1,3:!1,4:!1};try{C("正在生成设备信息…");const ae=ja(),Se=v(),Fe=S("server.domain");D.value[1]=!0,C("向服务器注册设备…");const Pe=await we.post(`${Fe}/devices`,{uuid:ae,deviceName:Se});D.value[2]=!0,g.value={uuid:ae,deviceName:Se,createdAt:new Date().toISOString(),registered:!0},localStorage.setItem("Classworks_progressive_device",JSON.stringify(g.value)),C("获取访问令牌…");try{const le=await we.post(`${Fe}/apps/auth/token`,{namespace:ae,password:"",appId:"d158067f53627d2b98babe8bffd2fd7d"});le.data&&le.data.token?(b.value=le.data,ue("server.kvToken",le.data.token),(q=le.data.device)!=null&&q.uuid&&ue("device.uuid",le.data.device.uuid),C("已获取 Token 并写入配置")):C("未返回 Token您可以稍后在授权页完成配置")}catch(le){console.warn("自动获取 Token 失败:",le),C("自动获取 Token 失败,可在授权页手动完成")}D.value[3]=!0,C("完成!您可以应用令牌或前往授权页面继续配置"),D.value[4]=!0,d.value="success"}catch(ae){console.error("设备注册失败:",ae),m.value=((R=(c=ae.response)==null?void 0:c.data)==null?void 0:R.message)||ae.message||"网络连接失败",C("失败:"+m.value),d.value="error"}}},ee=()=>{d.value="idle",m.value="",p.value=[],D.value={1:!1,2:!1,3:!1,4:!1}},H=()=>{const q=g.value;if(!(q!=null&&q.uuid))return;const R=`${S("server.authDomain")}/?uuid=${encodeURIComponent(q.uuid)}&tolinktoaccount=true`;window.open(R,"_blank")},Z=()=>{b.value&&l("success",b.value),l("close")};return(q,c)=>(f(),V(A,{class:"guide-card"},{default:n(()=>[a(it,{"model-value":s.value/Re*100,color:"primary",height:"6"},null,8,["model-value"]),a(Q,{class:"pa-8"},{default:n(()=>[se(o("div",Oa,[o("div",$a,[a(T,{class:"mb-4",color:"primary",size:"80"},{default:n(()=>[...c[2]||(c[2]=[r(" mdi-hand-wave ",-1)])]),_:1}),c[3]||(c[3]=o("h2",{class:"text-h4 mb-3"}," 欢迎使用 Classworks ",-1)),c[4]||(c[4]=o("p",{class:"text-body-1 text-medium-emphasis"}," 适用于班级大屏的作业板小工具 ",-1))])],512),[[ye,s.value===1]]),se(o("div",Ka,[c[17]||(c[17]=o("h3",{class:"text-h5 mb-6 text-center"}," Classworks 和 Classworks KV 的关系 ",-1)),a(A,{class:"pa-6 mb-6",color:"primary",variant:"tonal"},{default:n(()=>[o("div",Ha,[o("div",qa,[a(A,{class:"pa-4",color:"blue-darken-1",elevation:"8"},{default:n(()=>[o("div",Ga,[a(T,{color:"white",size:"60"},{default:n(()=>[...c[5]||(c[5]=[r(" mdi-laptop ",-1)])]),_:1}),c[6]||(c[6]=o("h4",{class:"text-h6 text-white mt-2"}," Classworks ",-1)),c[7]||(c[7]=o("p",{class:"text-caption text-white mt-1"}," 作业板应用 ",-1))])]),_:1}),o("div",Ya,[a(J,{class:"mb-2",color:"blue",size:"small",variant:"flat"},{default:n(()=>[...c[8]||(c[8]=[r(" 前端应用 ",-1)])]),_:1}),c[9]||(c[9]=o("div",{class:"text-body-2"},[r(" • 显示作业内容"),o("br"),r(" • 管理班级信息"),o("br"),r(" • 提供用户界面 ")],-1))])]),o("div",Ja,[a(T,{color:"primary",size:"40"},{default:n(()=>[...c[10]||(c[10]=[r(" mdi-swap-horizontal ",-1)])]),_:1}),c[11]||(c[11]=o("div",{class:"text-caption font-weight-bold mt-2"}," 数据同步 ",-1))]),o("div",Wa,[a(A,{class:"pa-4",color:"green-darken-1",elevation:"8"},{default:n(()=>[o("div",Qa,[a(T,{color:"white",size:"60"},{default:n(()=>[...c[12]||(c[12]=[r(" mdi-cloud-sync ",-1)])]),_:1}),c[13]||(c[13]=o("h4",{class:"text-h6 text-white mt-2"}," Classworks KV ",-1)),c[14]||(c[14]=o("p",{class:"text-caption text-white mt-1"}," 云端数据库 ",-1))])]),_:1}),o("div",Xa,[a(J,{class:"mb-2",color:"green",size:"small",variant:"flat"},{default:n(()=>[...c[15]||(c[15]=[r(" 后端服务 ",-1)])]),_:1}),c[16]||(c[16]=o("div",{class:"text-body-2"},[r(" • 存储作业数据"),o("br"),r(" • 多设备同步"),o("br"),r(" • 权限管理 ")],-1))])])])]),_:1})],512),[[ye,s.value===2]]),se(o("div",Za,[c[25]||(c[25]=o("h3",{class:"text-h5 mb-6 text-center"}," 你需要在多个设备上查看作业吗? ",-1)),a(A,{class:"mb-6 pa-4",color:"info",variant:"tonal"},{default:n(()=>[...c[18]||(c[18]=[o("div",{class:"text-body-2"}," 比如:在家里电脑、手机上查看,或者多个教室设备共享数据 ",-1)])]),_:1}),o("div",en,[a(k,{block:"",class:"mb-4 py-6",color:"primary",size:"x-large",variant:"elevated",onClick:c[0]||(c[0]=R=>M("cloud"))},{default:n(()=>[o("div",tn,[a(T,{class:"mb-2",size:"40"},{default:n(()=>[...c[19]||(c[19]=[r(" mdi-cloud-check ",-1)])]),_:1}),c[20]||(c[20]=o("span",{class:"text-h6"},"需要,使用云同步",-1)),c[21]||(c[21]=o("span",{class:"text-caption mt-1"},"多设备访问",-1))])]),_:1}),a(k,{block:"",class:"py-6",size:"x-large",variant:"outlined",onClick:c[1]||(c[1]=R=>M("local"))},{default:n(()=>[o("div",sn,[a(T,{class:"mb-2",size:"40"},{default:n(()=>[...c[22]||(c[22]=[r(" mdi-laptop ",-1)])]),_:1}),c[23]||(c[23]=o("span",{class:"text-h6"},"不需要,只用这台设备",-1)),c[24]||(c[24]=o("span",{class:"text-caption mt-1"},"本地存储",-1))])]),_:1})])],512),[[ye,s.value===3]]),se(o("div",an,[o("div",nn,[a(T,{class:"mb-4",color:"success",size:"80"},{default:n(()=>[...c[26]||(c[26]=[r(" mdi-check-circle ",-1)])]),_:1}),c[28]||(c[28]=o("h3",{class:"text-h5 mb-4"}," 您可以使用本地模式 ",-1)),a(A,{class:"pa-4 text-left",variant:"tonal"},{default:n(()=>[...c[27]||(c[27]=[o("div",{class:"text-body-1 mb-2"}," 此数据将存储在您的浏览器中如果您的浏览器不支持IndexedDB可能会出现问题。如果您经常清除浏览器数据请谨慎使用本地模式。 ",-1),o("div",{class:"text-body-1 mb-2"}," 在刚才地方点击使用本地模式的按钮使用。 ",-1)])]),_:1})])],512),[[ye,s.value===4&&i.value==="local"]]),se(o("div",ln,[o("div",on,[a(T,{class:"mb-4",color:"primary",size:"80"},{default:n(()=>[...c[29]||(c[29]=[r(" mdi-cloud-cog ",-1)])]),_:1}),c[30]||(c[30]=o("h3",{class:"text-h5 mb-4"}," 需要先设置云端账号 ",-1))]),a(A,{class:"pa-6 mb-6",variant:"tonal"},{default:n(()=>[o("div",rn,[o("div",un,[c[32]||(c[32]=o("h4",{class:"text-h6 font-weight-bold mb-2"}," 自动注册设备 ",-1)),c[33]||(c[33]=o("p",{class:"text-body-2 mb-3 text-medium-emphasis"}," 通过引导式流程自动创建设备、获取令牌并完成初始化。适合首次体验或快速部署多终端。 ",-1)),a(k,{color:"primary","prepend-icon":"mdi-flash",size:"large",variant:"elevated",onClick:B},{default:n(()=>[...c[31]||(c[31]=[r(" 自动注册 ",-1)])]),_:1})])])]),_:1}),c[41]||(c[41]=o("div",{class:"mb-6"}," 也可以手动前往 Classworks KV 控制台获取认证信息: ",-1)),a(A,{color:Le(u)=="https://kv.houlang.cloud"?"primary":"error",variant:Le(u)=="https://kv.houlang.cloud"?"elevated":"outlined",class:"pa-6 mb-6",onClick:N},{default:n(()=>[a(T,{class:"mb-3",size:"48"},{default:n(()=>[...c[34]||(c[34]=[r(" mdi-open-in-new ",-1)])]),_:1}),o("h4",dn," 请访问 "+x(Le(u)=="https://kv.houlang.cloud"?"Classworks KV":"自定义的 Classworks KV 实例 ")+" 控制台 ",1),o("div",cn,x(Le(u)),1),o("h6",mn,x(Le(u)=="https://kv.houlang.cloud"?"此实例由 Classworks KV 官方提供":"此链接由您的实例、预配代码或管理员管理,当前可能不是 Classworks KV 官方的实例地址。"),1)]),_:1},8,["color","variant"]),a(Ds,{class:"mt-6",variant:"accordion"},{default:n(()=>[a(ut,null,{default:n(()=>[a(dt,null,{default:n(()=>[o("div",fn,[a(T,{class:"mr-3",color:"warning"},{default:n(()=>[...c[35]||(c[35]=[r(" mdi-help-circle ",-1)])]),_:1}),c[36]||(c[36]=o("span",{class:"text-subtitle-1 font-weight-medium"},"我以前已经使用过 Classworks KV",-1))])]),_:1}),a(ct,null,{default:n(()=>[a(A,{class:"pa-4",color:"success",variant:"tonal"},{default:n(()=>[...c[37]||(c[37]=[o("div",{class:"text-body-2 mb-2"},[r(" 如果您之前已经使用过 Classworks KV可以直接使用您的 "),o("strong",null,"UUID命名空间"),r(" 和 "),o("strong",null,"设置的密码"),r(" 进行认证。 ")],-1),o("div",{class:"text-body-2"},' 返回上一页,点击"已注册"按钮,输入您的认证信息即可登录。 ',-1)])]),_:1})]),_:1})]),_:1}),a(ut,null,{default:n(()=>[a(dt,null,{default:n(()=>[o("div",hn,[a(T,{class:"mr-3",color:"info"},{default:n(()=>[...c[38]||(c[38]=[r(" mdi-help-circle ",-1)])]),_:1}),c[39]||(c[39]=o("span",{class:"text-subtitle-1 font-weight-medium"},"我如何配置不同类型的设备?",-1))])]),_:1}),a(ct,null,{default:n(()=>[a(A,{class:"pa-4",color:"info",variant:"tonal"},{default:n(()=>[...c[40]||(c[40]=[o("div",{class:"text-body-2 mb-2"},[r(" 不同的密码对应不同的设备类型,这将由 "),o("strong",null,"管理员管理"),r("。 ")],-1),o("div",{class:"text-body-2 mb-2"}," 例如: ",-1),o("ul",{class:"text-body-2 ml-4"},[o("li",{class:"mb-1"}," 班级大屏使用一个密码 "),o("li",{class:"mb-1"}," 教师设备使用另一个密码 "),o("li",null,"学生设备使用不同的密码")],-1),o("div",{class:"text-body-2 mt-3"}," 请联系您的管理员获取对应设备类型的密码。 ",-1)])]),_:1})]),_:1})]),_:1})]),_:1})],512),[[ye,s.value===4&&i.value==="cloud"]]),se(o("div",vn,[o("div",pn,[a(je,{class:"mb-4",color:"primary",size:"80",variant:"tonal"},{default:n(()=>[a(T,{size:"48"},{default:n(()=>[...c[42]||(c[42]=[r(" mdi-rocket-launch ",-1)])]),_:1})]),_:1}),c[43]||(c[43]=o("h3",{class:"text-h5 font-weight-bold mb-2"}," 渐进式注册 ",-1)),c[44]||(c[44]=o("p",{class:"text-body-2 text-medium-emphasis"}," 您可以暂时不配置 Classworks KV ",-1))]),a(it,{"model-value":L.value,class:"mb-6",color:"primary",height:"8",rounded:""},null,8,["model-value"]),a(Me,null,{default:n(()=>[a(_e,{cols:"12"},{default:n(()=>[a(A,{color:pe.value,variant:"tonal"},{default:n(()=>[a(Ae,null,{default:n(()=>[o("div",gn,[a(T,{color:pe.value,class:"mr-2",size:"32"},{default:n(()=>[r(x(de.value),1)]),_:1},8,["color"]),o("div",kn,x(ce.value),1)]),g.value?(f(),w("div",bn,[o("div",yn,[c[45]||(c[45]=o("strong",null,"设备名称:",-1)),r(x(g.value.deviceName),1)]),o("div",null,[c[46]||(c[46]=o("strong",null,"设备 UUID",-1)),o("code",xn,x(g.value.uuid),1)])])):_("",!0),d.value==="error"?(f(),w("div",wn,x(m.value),1)):_("",!0)]),_:1})]),_:1},8,["color"])]),_:1}),a(_e,{cols:"12"},{default:n(()=>[a(A,{variant:"outlined"},{default:n(()=>[a(Ae,null,{default:n(()=>[c[47]||(c[47]=o("div",{class:"text-subtitle-2 font-weight-medium mb-3"}," 过程日志 ",-1)),o("div",Sn,[(f(!0),w(P,null,O(p.value,(R,ae)=>(f(),w("div",{key:ae,class:"text-caption log-line"},x(R.time)+" · "+x(R.message),1))),128)),p.value.length?_("",!0):(f(),w("div",Cn," 等待开始… "))])]),_:1})]),_:1})]),_:1})]),_:1}),o("div",Dn,[d.value==="idle"?(f(),V(k,{key:0,color:"primary","prepend-icon":"mdi-play",size:"large",onClick:I},{default:n(()=>[...c[48]||(c[48]=[r(" 开始创建 ",-1)])]),_:1})):_("",!0),d.value==="error"?(f(),V(k,{key:1,color:"error","prepend-icon":"mdi-refresh",variant:"outlined",onClick:ee},{default:n(()=>[...c[49]||(c[49]=[r(" 重试 ",-1)])]),_:1})):_("",!0),d.value==="registering"?(f(),V(k,{key:2,loading:!0,color:"primary","prepend-icon":"mdi-progress-clock",variant:"tonal"},{default:n(()=>[...c[50]||(c[50]=[r(" 正在执行… ",-1)])]),_:1})):_("",!0),d.value==="success"?(f(),V(k,{key:3,color:"success","prepend-icon":"mdi-check-circle",size:"large",variant:"elevated",onClick:Z},{default:n(()=>[...c[51]||(c[51]=[r(" 应用令牌并关闭 ",-1)])]),_:1})):_("",!0),d.value==="success"?(f(),V(k,{key:4,color:"primary","prepend-icon":"mdi-open-in-new",size:"large",variant:"outlined",onClick:H},{default:n(()=>[...c[52]||(c[52]=[r(" 前往绑定账户 ",-1)])]),_:1})):_("",!0)])],512),[[ye,s.value===5]])]),_:1}),a(ve,{class:"pa-6 pt-0"},{default:n(()=>[s.value>1?(f(),V(k,{key:0,size:"large",variant:"text",onClick:te},{default:n(()=>[a(T,{start:""},{default:n(()=>[...c[53]||(c[53]=[r(" mdi-chevron-left ",-1)])]),_:1}),c[54]||(c[54]=r(" 上一步 ",-1))]),_:1})):_("",!0),a(oe),s.value<Re&&s.value!==4?(f(),V(k,{key:1,disabled:s.value===3&&!i.value,color:"primary",size:"large",variant:"elevated",onClick:K},{default:n(()=>[c[56]||(c[56]=r(" 下一步 ",-1)),a(T,{end:""},{default:n(()=>[...c[55]||(c[55]=[r(" mdi-chevron-right ",-1)])]),_:1})]),_:1},8,["disabled"])):_("",!0),s.value===Re||s.value===4?(f(),V(k,{key:2,color:"primary",size:"large",variant:"elevated",onClick:h},{default:n(()=>[...c[57]||(c[57]=[r(" 关闭 ",-1)])]),_:1})):_("",!0)]),_:1})]),_:1}))}},_n=he(Vn,[["__scopeId","data-v-817c6e0e"]]),Tn={key:0,class:"init-overlay"},Ln={class:"init-container"},In={class:"main-card-row"},An={class:"card-horizontal-layout"},Nn={class:"card-icon-wrapper"},Fn={class:"card-horizontal-layout"},Pn={class:"card-icon-wrapper"},zn={class:"card-horizontal-layout"},En={class:"card-icon-wrapper"},Rn={class:"options-buttons"},Un={__name:"InitServiceChooser",props:{preconfig:{type:Object,default:()=>({namespace:null,authCode:null,autoOpen:!1,autoExecute:!1})}},emits:["done"],setup(t,{emit:e}){const l=t,u=e,s=z(!1),i=z(!1),d=z(!1),m=z(!1),g=z(!1),b=z(null),p=$(()=>S("server.provider")),D=$(()=>p.value==="kv-server"||p.value==="classworkscloud"),K=$(()=>S("server.kvToken")),te=$(()=>{var C;return(C=l.preconfig)!=null&&C.namespace?{namespace:l.preconfig.namespace,password:l.preconfig.authCode||"",autoExecute:l.preconfig.autoExecute||!1}:null}),M=()=>{const C=window.location.pathname,v=C==="/"||C==="/index"||C==="/index.html",I=D.value&&(!K.value||K.value==="");s.value=v&&I};ge(()=>l.preconfig,C=>{C!=null&&C.autoOpen&&(C!=null&&C.namespace)&&s.value&&(console.log("检测到预配数据,自动打开设备认证对话框"),setTimeout(()=>{d.value=!0},500))},{immediate:!0,deep:!0}),vt(()=>{M()});const h=()=>{const C=S("server.authDomain"),v="d158067f53627d2b98babe8bffd2fd7d",I=window.location.origin,ee=encodeURIComponent(`${I}/authorizecallback`),H=S("device.uuid")||"00000000-0000-4000-8000-000000000000";let Z=`${C}/authorize?app_id=${v}&mode=callback&callback_url=${ee}&remark=Classworks 自动授权 来自${window.location.hostname} ${new Date().toLocaleString()}`;H!=="00000000-0000-4000-8000-000000000000"&&(Z+=`&uuid=${encodeURIComponent(H)}`),window.location.href=Z},N=C=>{i.value=!1,console.log("渐进式注册成功:",C),M(),u("done")},B=C=>{var v;d.value=!1,console.log("认证成功:",C),(v=l.preconfig)!=null&&v.namespace&&console.log(`预配数据认证成功: ${l.preconfig.namespace}`),M(),u("done")},L=()=>{m.value=!1,M(),u("done")},pe=C=>{console.log("替代代码:",C),g.value=!1},de=()=>{ue("server.provider","kv-local"),s.value=!1,window.location.reload(),u("done")},ce=()=>{window.open(S("server.authDomain"),"_blank")};return(C,v)=>s.value?(f(),w("div",Tn,[o("div",Ln,[v[22]||(v[22]=o("div",{class:"init-header"},[o("div",{class:"title"}," 欢迎使用 Classworks "),o("div",{class:"subtitle"}," 请选择你的使用方式 ")],-1)),o("div",In,[a(A,{class:"main-service-card gradient-new clickable",elevation:"4",onClick:v[0]||(v[0]=I=>i.value=!0)},{default:n(()=>[a(Ae,null,{default:n(()=>[o("div",An,[o("div",Nn,[a(T,{color:"primary",size:"48"},{default:n(()=>[...v[12]||(v[12]=[r(" mdi-new-box ",-1)])]),_:1})]),v[13]||(v[13]=o("div",{class:"card-content"},[o("div",{class:"text-h6 font-weight-bold"}," 初次使用 "),o("div",{class:"text-body-2 text-medium-emphasis mt-1"}," 了解 Classworks KV 并开始使用 ")],-1))])]),_:1})]),_:1}),a(A,{class:"main-service-card gradient-registered clickable",elevation:"4",onClick:v[1]||(v[1]=I=>d.value=!0)},{default:n(()=>[a(Ae,null,{default:n(()=>[o("div",Fn,[o("div",Pn,[a(T,{color:"success",size:"48"},{default:n(()=>[...v[14]||(v[14]=[r(" mdi-account-check ",-1)])]),_:1})]),v[15]||(v[15]=o("div",{class:"card-content"},[o("div",{class:"text-h6 font-weight-bold"}," 已注册 "),o("div",{class:"text-body-2 text-medium-emphasis mt-1"}," 使用设备 Namespace 登录 ")],-1))])]),_:1})]),_:1}),a(A,{class:"main-service-card clickable",elevation:"4",onClick:ce},{default:n(()=>[a(Ae,null,{default:n(()=>[o("div",zn,[o("div",En,[a(T,{color:"info",size:"48"},{default:n(()=>[...v[16]||(v[16]=[r(" mdi-database-cog ",-1)])]),_:1})]),v[17]||(v[17]=o("div",{class:"card-content"},[o("div",{class:"text-h6 font-weight-bold"}," Classworks KV "),o("div",{class:"text-body-2 text-medium-emphasis mt-1"}," 打开云端控制台管理数据 ")],-1))])]),_:1})]),_:1})]),o("div",Rn,[a(k,{"prepend-icon":"mdi-laptop",size:"small",variant:"tonal",onClick:de},{default:n(()=>[...v[18]||(v[18]=[r(" 使用本地模式 ",-1)])]),_:1}),a(k,{"prepend-icon":"mdi-flash",size:"small",variant:"tonal",onClick:h},{default:n(()=>[...v[19]||(v[19]=[r(" 授权码式授权(弃用) ",-1)])]),_:1}),a(k,{"prepend-icon":"mdi-key",size:"small",variant:"tonal",onClick:v[2]||(v[2]=I=>m.value=!0)},{default:n(()=>[...v[20]||(v[20]=[r(" 输入 Token ",-1)])]),_:1}),a(k,{"prepend-icon":"mdi-code-tags",size:"small",variant:"tonal",onClick:v[3]||(v[3]=I=>g.value=!0)},{default:n(()=>[...v[21]||(v[21]=[r(" 输入替代代码 ",-1)])]),_:1})]),v[23]||(v[23]=o("div",{class:"footer-hint"}," 完成授权后可使用作业同步、考试看板等在线功能。 ",-1))]),a(fe,{modelValue:i.value,"onUpdate:modelValue":v[5]||(v[5]=I=>i.value=I),"max-width":"600"},{default:n(()=>[a(_n,{onClose:v[4]||(v[4]=I=>i.value=!1),onSuccess:N})]),_:1},8,["modelValue"]),a(fe,{modelValue:d.value,"onUpdate:modelValue":v[7]||(v[7]=I=>d.value=I),"max-width":"500"},{default:n(()=>[a(Pa,{ref_key:"deviceAuthDialog",ref:b,preconfig:te.value,"show-cancel":!0,onCancel:v[6]||(v[6]=I=>d.value=!1),onSuccess:B},null,8,["preconfig"])]),_:1},8,["modelValue"]),a(fe,{modelValue:m.value,"onUpdate:modelValue":v[9]||(v[9]=I=>m.value=I),"max-width":"500"},{default:n(()=>[a(za,{"show-cancel":!0,onCancel:v[8]||(v[8]=I=>m.value=!1),onSuccess:L})]),_:1},8,["modelValue"]),a(fe,{modelValue:g.value,"onUpdate:modelValue":v[11]||(v[11]=I=>g.value=I),"max-width":"500"},{default:n(()=>[a(Ea,{"show-cancel":!0,onCancel:v[10]||(v[10]=I=>g.value=!1),onSubmit:pe})]),_:1},8,["modelValue"])])):_("",!0)}},Dt=he(Un,[["__scopeId","data-v-cbfbc6db"]]);function ft(t,e){let l=null;return function(...u){l&&clearTimeout(l),l=setTimeout(()=>{t.apply(this,u)},e)}}function Mn(t,e){let l=null,u=0;return function(...s){const i=Date.now();i-u<e?(l&&clearTimeout(l),l=setTimeout(()=>{u=i,t.apply(this,s)},e)):(u=i,t.apply(this,s))}}const Bn={name:"Classworks 作业板",components:{MessageLog:kt,RandomPicker:bt,FloatingToolbar:wt,FloatingICP:xt,HomeworkEditDialog:St,InitServiceChooser:Dt,ChatWidget:yt,StudentNameManager:Ct},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:ot,state:{classNumber:"",namespaceInfo:null,deviceName:"",studentList:[],boardData:{homework:{},attendance:{absent:[],late:[],exclude:[]}},dialogVisible:!1,dialogTitle:"",textarea:"",dateString:"",synced:!1,attendDialogVisible:!1,contentStyle:{"font-size":`${S("font.size")}px`},uploadLoading:!1,downloadLoading:!1,snackbar:!1,snackbarText:"",fontSize:S("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:{}},settingsTick:0,isChatOpen:!1,highlightedCards:{},tokenDisplayInfo:{show:!1,readonly:!1,text:"",color:"primary",variant:"tonal",icon:"mdi-account",disabled:!1},realtimeInfo:{show:!1,time:"",key:""},$offKvChanged:null,$offConnect:null,debouncedRealtimeRefresh:null,preconfigData:{namespace:null,authCode:null,autoOpen:!1,autoExecute:!1}}},computed:{isMobile(){return ot().mobile.value},titleText(){var d,m;const t=((m=(d=this.state.namespaceInfo)==null?void 0:d.device)==null?void 0:m.name)||this.state.classNumber||"高三八班",e=this.getToday(),l=new Date(e);l.setDate(l.getDate()-1);const u=this.state.dateString,s=this.formatDate(e),i=this.formatDate(l);return u===s?t+" - 今天的作业":u===i?t+" - 昨天的作业":`${t} - ${u}的作业`},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(([,u])=>{var s;return(s=u.content)==null?void 0:s.trim()}).map(([u,s])=>{var i;return{key:u,name:((i=this.state.availableSubjects.find(d=>d.name===u))==null?void 0:i.name)||u,content:s.content,order:this.subjectOrder.indexOf(u),rowSpan:Math.ceil((s.content.split(`
`).filter(d=>d.trim()).length+1)*.8)}}),l=this.dynamicSort?this.optimizeGridLayout(e):e.sort((u,s)=>u.order-s.order);return this.updateSortedItemsCache(t,l),l},unusedSubjects(){const t=Object.keys(this.state.boardData.homework).filter(e=>{var l;return(l=this.state.boardData.homework[e].content)==null?void 0:l.trim()});return this.state.availableSubjects.filter(e=>!t.includes(e.name)).sort((e,l)=>e.order-l.order)},emptySubjects(){return this.emptySubjectDisplay!=="button"?[]:this.unusedSubjects},autoSave(){return S("edit.autoSave")},blockNonTodayAutoSave(){return S("edit.blockNonTodayAutoSave")},isToday(){const t=(()=>{const e=new Date,l=e.getFullYear(),u=String(e.getMonth()+1).padStart(2,"0"),s=String(e.getDate()).padStart(2,"0");return`${l}${u}${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 S("edit.refreshBeforeEdit")},emptySubjectDisplay(){return S("display.emptySubjectDisplay")},dynamicSort(){return S("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 S("randomPicker.enabled")},showListCardButton(){return S("display.showListCard")},confirmNonTodaySave(){return S("edit.confirmNonTodaySave")},shouldShowSaveConfirm(){return!this.isToday&&this.confirmNonTodaySave},shouldBlockAutoSave(){return!this.isToday&&this.autoSave&&this.blockNonTodayAutoSave},showFullscreenButton(){return S("display.showFullscreenButton")},showExamScheduleButton(){return S("display.showExamScheduleButton")},showAntiScreenBurnCard(){return S("display.showAntiScreenBurnCard")},shouldShowInit(){var s;const t=S("server.provider"),e=t==="kv-server"||t==="classworkscloud",l=S("server.kvToken"),u=((s=this.$route)==null?void 0:s.path)==="/";return this.settingsTick,u&&e&&(!l||l==="")},filteredStudents(){let t=[...this.state.studentList];if(this.attendanceSearch){const e=this.attendanceSearch.toLowerCase();t=t.filter(l=>l.toLowerCase().includes(e))}return this.attendanceFilter&&this.attendanceFilter.length>0&&(t=t.filter(e=>{const l=this.state.studentList.indexOf(e);return!!(this.attendanceFilter.includes("present")&&this.isPresent(l)||this.attendanceFilter.includes("absent")&&this.isAbsent(l)||this.attendanceFilter.includes("late")&&this.isLate(l)||this.attendanceFilter.includes("exclude")&&this.isExclude(l))})),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 l=e.charAt(0);t.has(l)?t.set(l,t.get(l)+1):t.set(l,1)}}),Array.from(t.entries()).map(([e,l])=>({name:e,count:l})).sort((e,l)=>{const u=rt(e.name,{toneType:"none",mode:"surname"}),s=rt(l.name,{toneType:"none",mode:"surname"});return u.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=ft(this.uploadData,2e3),this.throttledReflow=Mn(()=>{this.$refs.gridContainer&&this.optimizeGridLayout(this.sortedItems)},200)},async mounted(){try{this.updateBackendUrl(),await this.initializeData(),await this.loadDeviceInfo(),this.setupAutoRefresh(),this.unwatchSettings=ht(()=>{this.updateSettings()}),this.$nextTick(()=>{const t=this.$refs.studentNameManager;t&&(this.studentNameInfo.name=t.currentStudentName,this.studentNameInfo.isStudent=t.isStudentToken,this.studentNameInfo.openDialog=()=>t.openDialog(),this.$watch(()=>t.currentStudentName,e=>{this.studentNameInfo.name=e}),this.$watch(()=>t.isStudentToken,e=>{this.studentNameInfo.isStudent=e}))}),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),this.setupRealtimeChannel(),this.$nextTick(()=>{this.updateTokenDisplayInfo()})}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);try{this.$offKvChanged&&this.$offKvChanged(),this.$offConnect&&this.$offConnect(),ms()}catch{}},methods:{async loadDeviceInfo(){var t;try{const e=S("server.provider");if(!(e==="kv-server"||e==="classworkscloud"))return;const u=await vs.loadNamespaceInfo();if(u&&u.success===!1)return;this.state.namespaceInfo=u||null,this.state.deviceName=((t=u==null?void 0:u.account)==null?void 0:t.deviceName)||""}catch(e){console.warn("加载设备信息失败:",e)}},updateTokenDisplayInfo(){const t=this.$refs.studentNameManager;if(!t||!t.hasToken){this.tokenDisplayInfo.show=!1,this.tokenDisplayInfo.readonly=!1;return}const e=t.displayName,l=t.isReadOnly,u=t.isStudentToken;if(this.tokenDisplayInfo.readonly=l,!u){this.tokenDisplayInfo.show=!1;return}this.tokenDisplayInfo.text=e,this.tokenDisplayInfo.color="primary",this.tokenDisplayInfo.icon="mdi-account",this.tokenDisplayInfo.disabled=l,this.tokenDisplayInfo.show=!0},handleTokenChipClick(){console.log("Token chip clicked");const t=this.$refs.studentNameManager;console.log("Manager:",t),console.log("Is student token:",t==null?void 0:t.isStudentToken),t&&t.isStudentToken?(console.log("Opening dialog..."),t.openDialog()):console.log("Cannot open dialog - conditions not met")},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),l=e.getFullYear(),u=String(e.getMonth()+1).padStart(2,"0"),s=String(e.getDate()).padStart(2,"0");return`${l}${u}${s}`},getToday(){return new Date},async initializeData(){this.parsePreconfigData();const t=await this.parseUrlConfig(),l=new URLSearchParams(window.location.search).get("date"),u=this.getToday();let s=u;if(l){if(/^\d{8}$/.test(l)){const i=l.substring(0,4),d=l.substring(4,6),m=l.substring(6,8);s=new Date(`${i}-${d}-${m}`)}else s=new Date(l);isNaN(s.getTime())&&(s=u)}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(u),!t){this.provider=S("server.provider");const i=S("server.classNumber");this.state.classNumber=i}await Promise.all([this.downloadData(),this.loadConfig()])},async downloadData(t=!1){var e,l,u;if(!this.loading.download)try{this.loading.download=!0;const s=await Ve.loadData("classworks-data-"+this.state.dateString);if(s.success==!1)if(s.error.code==="NOT_FOUND")this.state.showNoDataMessage=!0,this.state.noDataMessage=s.error.message,(t||!this.state.boardData||!this.state.boardData.homework&&!this.state.boardData.attendance)&&(this.state.boardData={homework:{},attendance:{absent:[],late:[],exclude:[]}});else throw new Error(s.error.message);else this.state.boardData={homework:s.homework||{},attendance:{absent:((e=s.attendance)==null?void 0:e.absent)||[],late:((l=s.attendance)==null?void 0:l.late)||[],exclude:((u=s.attendance)==null?void 0:u.exclude)||[]}},this.state.synced=!0,this.state.showNoDataMessage=!1,this.$message.success("下载成功","数据已更新")}catch(s){console.error("数据加载失败:",s),this.$message.error("下载失败",s.message),(t||!this.state.boardData||!this.state.boardData.homework&&!this.state.boardData.attendance)&&(this.state.boardData={homework:{},attendance:{absent:[],late:[],exclude:[]}})}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 l;if(!this.currentEditSubject)return;const t=this.state.textarea.trim(),e=((l=this.state.boardData.homework[this.currentEditSubject])==null?void 0:l.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 Ve.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 Ve.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 Ve.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(l){console.error("刷新数据失败:",l),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(l=>l.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(l=>l!==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(l=>l!==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(l=>l!==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`},ue("font.size",this.state.fontSize)},updateBackendUrl(){const t=S("server.provider"),e=S("server.classNumber");this.provider=t,this.state.classNumber=e},setupAutoRefresh(){const t=S("refresh.auto"),e=S("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=S("font.size"),this.state.contentStyle={"font-size":`${this.state.fontSize}px`},this.setupAutoRefresh(),this.updateBackendUrl(),this.loadDeviceInfo(),this.settingsTick++},async handleDateSelect(t){if(t)try{const e=this.ensureDate(t),l=this.formatDate(e);this.state.dateString!==l&&(this.state.dateString=l,this.state.selectedDate=l,this.state.selectedDateObj=e,this.state.isToday=l===this.formatDate(this.getToday()),this.$router.replace({query:{date:l}}).catch(()=>{}),await Promise.all([this.downloadData(!0),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 l=Array.from({length:e},()=>({height:0,items:[]}));return t.forEach(u=>{const s=l.reduce((i,d,m)=>d.height<l[i].height?m:i,0);l[s].items.push(u),l[s].height+=u.rowSpan}),l.flatMap(u=>u.items).map((u,s)=>({...u,order:s}))},setupRealtimeChannel(){try{const t=S("server.kvToken");if(!t){console.warn("未配置 KV Token无法加入实时频道");return}Ge(),Ye(t),this.$offConnect=cs(()=>Ye(t)),this.debouncedRealtimeRefresh||(this.debouncedRealtimeRefresh=ft(async()=>{var g,b,p;const l=JSON.parse(JSON.stringify(this.state.boardData.homework));await this.downloadData();const u=new Date,s=String(u.getHours()).padStart(2,"0"),i=String(u.getMinutes()).padStart(2,"0"),d=String(u.getSeconds()).padStart(2,"0");(g=this.$message)==null||g.info("数据已更新",`已于 ${s}:${i}:${d} 自动刷新`);const m={};for(const D in this.state.boardData.homework){const K=((b=l[D])==null?void 0:b.content)||"",te=((p=this.state.boardData.homework[D])==null?void 0:p.content)||"";K!==te&&(m[D]=!0)}for(const D in l)this.state.boardData.homework[D]||(m[D]=!0);this.highlightedCards=m,setTimeout(()=>{this.highlightedCards={}},1e4)},800));const e=l=>{var s;if(!l)return;const u=`classworks-data-${this.state.dateString}`;l.key===u&&(l.action!=="upsert"&&l.action!=="delete"||(s=this.debouncedRealtimeRefresh)==null||s.call(this,l.key))};this.$offKvChanged=pt("kv-key-changed",e)}catch(t){console.warn("实时频道初始化失败",t)}},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:l,late:u,exclude:s}=this.state.boardData.attendance;return!l.includes(e)&&!u.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(l=>l!==e),this.state.boardData.attendance.late=this.state.boardData.attendance.late.filter(l=>l!==e),this.state.boardData.attendance.exclude=this.state.boardData.attendance.exclude.filter(l=>l!==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="",l="success"){this.$message[l](t,e)},updateSortedItemsCache(t,e){this._sortedItemsCache={key:t,value:e}},handleMouseMove(t){const e=t.currentTarget,l=e.getBoundingClientRect(),u=(t.clientX-l.left)/l.width*100,s=(t.clientY-l.top)/l.height*100;e.style.setProperty("--x",`${u}%`),e.style.setProperty("--y",`${s}%`)},handleTouchMove(t){if(t.touches.length===1){const e=t.touches[0],l=t.currentTarget,u=l.getBoundingClientRect(),s=(e.clientX-u.left)/u.width*100,i=(e.clientY-u.top)/u.height*100;l.style.setProperty("--x",`${s}%`),l.style.setProperty("--y",`${i}%`)}},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 l=atob(e),u=Uint8Array.from(l,b=>b.charCodeAt(0)),s=new TextDecoder().decode(u),i=JSON.parse(s);console.log("从URL读取配置:",i);const d=[],m={},g={};return this.processSpecialSettings(i,d,m),this.processStandardSettings(i,d,m,g),Object.keys(m).length===0?(console.log("URL配置与当前配置相同无需应用"),!1):new Promise(b=>{this.urlConfigDialog={show:!0,config:i,changes:d,validSettings:m,icons:g,confirmHandler:()=>{this.urlConfigDialog.show=!1,this.applyUrlConfig(m),b(!0)},cancelHandler:()=>{this.urlConfigDialog.show=!1,b(!1)}}})}catch(l){return console.error("解析URL配置错误:",l),this.$message.error("URL配置错误","无法解析配置数据"),!1}}catch(t){return console.error("处理URL配置错误:",t),!1}},processSpecialSettings(t,e,l){var u,s;if(t.classNumber!==void 0){const i=S("server.classNumber");t.classNumber!==i&&(e.push({key:"server.classNumber",name:"班级",oldValue:i,newValue:t.classNumber,description:((u=Ie["server.classNumber"])==null?void 0:u.description)||"班级编号",icon:((s=Ie["server.classNumber"])==null?void 0:s.icon)||"mdi-account-group"}),l["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"}),l.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"}),l.subjects=t.subjects)},processStandardSettings(t,e,l,u){Object.entries(t).forEach(([s,i])=>{if(["classNumber","date","subjects"].includes(s))return;let d=s,m=Ie[s];if(!m&&!s.includes(".")){const g=["server.","display.","theme.","edit.","refresh.","font.","randomPicker."];for(const b of g){const p=`${b}${s}`;if(Ie[p]){d=p,m=Ie[p];break}}}if(m){let g=this.convertValueToCorrectType(i,m.type);if(m.validate&&!m.validate(g)){console.warn(`URL配置项 ${d} 的值无效: ${i}`);return}const b=S(d);g!==b&&(e.push({key:d,name:this.getSettingDisplayName(d),oldValue:this.formatSettingValue(b),newValue:this.formatSettingValue(g),description:m.description||d,icon:m.icon||"mdi-cog"}),l[d]=g,u[d]=m.icon||"mdi-cog")}else e.push({key:s,name:this.getSettingDisplayName(s),oldValue:"未知",newValue:this.formatSettingValue(i),description:"自定义配置项",icon:"mdi-cog-outline"}),l[s]=i,u[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("."),l=e[e.length-1];return{provider:"数据提供方",domain:"服务器域名",classNumber:"班级编号",emptySubjectDisplay:"空科目显示方式",dynamicSort:"动态排序",showRandomButton:"随机按钮",showFullscreenButton:"全屏按钮",cardHoverEffect:"卡片悬浮效果",enhancedTouchMode:"增强触摸模式",showAntiScreenBurnCard:"防烧屏卡片",mode:"主题模式",size:"字体大小",autoSave:"自动保存",blockNonTodayAutoSave:"禁止自动保存非当日",refreshBeforeEdit:"编辑前刷新",confirmNonTodaySave:"非当日保存确认",auto:"自动刷新",interval:"刷新间隔"}[l]||l},safeBase64Decode(t){try{return ps.decode(t)}catch(e){throw console.error("Base64解码错误:",e),new Error("无法解码配置数据")}},applyUrlConfig(t){for(const[e,l]of Object.entries(t)){if(e==="date"){this.handleDateSelect(l);continue}if(e==="subjects"){this.state.availableSubjects=l;continue}ue(e,l),e==="server.classNumber"&&(this.state.classNumber=l)}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)},parsePreconfigData(){try{const t=new URLSearchParams(window.location.search),e=t.get("namespace"),l=t.get("authCode")||t.get("auth_code"),u=t.get("autoExecute")||t.get("auto_execute");e&&(this.preconfigData.namespace=e,this.preconfigData.authCode=l,this.preconfigData.autoOpen=!0,this.preconfigData.autoExecute=this.parseBoolean(u),console.log("检测到预配数据:",{namespace:this.preconfigData.namespace,hasAuthCode:!!this.preconfigData.authCode,autoExecute:this.preconfigData.autoExecute}),this.cleanupUrlParams(["namespace","authCode","auth_code","autoExecute","auto_execute"]))}catch(t){console.error("解析预配数据失败:",t)}},parseBoolean(t){if(!t)return!1;const e=t.toLowerCase();return e==="true"||e==="1"||e==="yes"},cleanupUrlParams(t){try{const e=new URL(window.location);let l=!1;t.forEach(u=>{e.searchParams.has(u)&&(e.searchParams.delete(u),l=!0)}),l&&window.history.replaceState({},document.title,e.toString())}catch(e){console.error("清理URL参数失败:",e)}}}},jn={key:2,class:"d-flex"},On={ref:"gridContainer",class:"grid-masonry"},$n={class:"empty-subjects mt-4"},Kn={key:1,class:"empty-subjects-grid"},Hn={key:0},qn={style:{"white-space":"nowrap"}},Gn={key:0},Yn={style:{"white-space":"nowrap"}},Jn={key:0},Wn={style:{"white-space":"nowrap"}},Qn={class:"d-flex flex-wrap mt-2 gap-1"},Xn={class:"d-flex flex-wrap mb-4 gap-2"},Zn={class:"flex-grow-1"},el={class:"d-flex align-center"},tl={class:"text-subtitle-1"},sl={class:"attendance-actions"},al={class:"text-subtitle-1"},nl={class:"text-grey-darken-1"},ll={class:"text-primary font-weight-medium"};function il(t,e,l,u,s,i){const d=Dt,m=Ct,g=ls("snap"),b=St,p=kt,D=wt,K=xt,te=yt,M=bt;return f(),w(P,null,[a(_s,{class:"no-select"},{append:n(()=>[s.tokenDisplayInfo.readonly?(f(),V(J,{key:0,class:"mx-2",color:"warning","prepend-icon":"mdi-lock-alert",variant:"tonal"},{default:n(()=>[...e[22]||(e[22]=[r(" 只读 ",-1)])]),_:1})):_("",!0),s.tokenDisplayInfo.show?(f(),V(J,{key:1,style:Te({cursor:s.tokenDisplayInfo.disabled?"default":"pointer"}),class:"mx-2",color:"primary","prepend-icon":"mdi-account",variant:"tonal",onClick:i.handleTokenChipClick},{default:n(()=>[r(x(s.tokenDisplayInfo.text),1)]),_:1},8,["style","onClick"])):_("",!0),a(k,{icon:"mdi-chat",variant:"text",onClick:e[0]||(e[0]=h=>s.isChatOpen=!0)}),a(k,{badge:i.unreadCount||void 0,"badge-color":i.unreadCount?"error":void 0,icon:"mdi-bell",variant:"text",onClick:e[1]||(e[1]=h=>t.$refs.messageLog.drawer=!0)},null,8,["badge","badge-color"]),a(k,{icon:"mdi-cog",variant:"text",onClick:e[2]||(e[2]=h=>t.$router.push("/settings"))})]),default:n(()=>[a(Vs,null,{default:n(()=>[r(x(i.titleText),1)]),_:1}),a(oe)]),_:1}),i.shouldShowInit?(f(),V(d,{key:0,preconfig:s.preconfigData,onDone:e[3]||(e[3]=h=>s.settingsTick++)},null,8,["preconfig"])):_("",!0),i.shouldShowInit?_("",!0):(f(),V(m,{key:1,ref:"studentNameManager",onTokenInfoUpdated:i.updateTokenDisplayInfo},null,8,["onTokenInfoUpdated"])),i.shouldShowInit?_("",!0):(f(),w("div",jn,[a(Ts,{class:"main-window flex-grow-1 no-select",fluid:""},{default:n(()=>[o("div",On,[a(He,{name:"grid"},{default:n(()=>[(f(!0),w(P,null,O(i.sortedItems,h=>(f(),w("div",{key:h.key,style:Te({"grid-row-end":`span ${h.rowSpan}`,order:h.order}),class:"grid-item"},[a(A,{class:Ne([{"glow-highlight":s.highlightedCards[h.key]},"glow-track"]),border:"",height:"100%",onClick:N=>!i.isEditingDisabled&&i.openDialog(h.key),onMousemove:i.handleMouseMove,onTouchmove:i.handleTouchMove},{default:n(()=>[a(ie,null,{default:n(()=>[r(x(h.name),1)]),_:2},1024),a(Q,{style:Te(s.state.contentStyle)},{default:n(()=>[a(qe,null,{default:n(()=>[(f(!0),w(P,null,O(i.splitPoint(h.content),N=>(f(),V(Be,{key:N},{default:n(()=>[r(x(N),1)]),_:2},1024))),128))]),_:2},1024)]),_:2},1032,["style"])]),_:2},1032,["class","onClick","onMousemove","onTouchmove"])],4))),128))]),_:1})],512),o("div",$n,[i.emptySubjectDisplay==="button"?(f(),V(Ue,{key:0,divided:"",variant:"tonal"},{default:n(()=>[(f(!0),w(P,null,O(i.unusedSubjects,h=>(f(),V(k,{key:h.name,disabled:i.isEditingDisabled,onClick:N=>i.openDialog(h.name)},{default:n(()=>[a(T,{start:""},{default:n(()=>[...e[23]||(e[23]=[r(" mdi-plus",-1)])]),_:1}),r(" "+x(h.name),1)]),_:2},1032,["disabled","onClick"]))),128))]),_:1})):(f(),w("div",Kn,[a(He,{name:"v-list"},{default:n(()=>[(f(!0),w(P,null,O(i.unusedSubjects,h=>(f(),V(A,{key:h.name,disabled:i.isEditingDisabled,border:"",class:"empty-subject-card",onClick:N=>i.openDialog(h.name)},{default:n(()=>[a(ie,{class:"text-subtitle-1"},{default:n(()=>[r(x(h.name),1)]),_:2},1024),a(Q,{class:"text-center"},{default:n(()=>[a(T,{color:"grey",size:"small"},{default:n(()=>[...e[24]||(e[24]=[r(" mdi-plus",-1)])]),_:1}),e[25]||(e[25]=o("div",{class:"text-caption text-grey"},"点击添加作业",-1))]),_:1})]),_:2},1032,["disabled","onClick"]))),128))]),_:1})]))]),s.state.synced?(f(),V(k,{key:1,color:"success",size:"large",onClick:i.showSyncMessage},{default:n(()=>[...e[27]||(e[27]=[r(" 同步完成 ",-1)])]),_:1},8,["onClick"])):(f(),V(k,{key:0,loading:s.loading.upload,class:"ml-2",color:"error",size:"large",onClick:i.manualUpload},{default:n(()=>[...e[26]||(e[26]=[r(" 上传 ",-1)])]),_:1},8,["loading","onClick"])),i.showRandomPickerButton?(f(),V(k,{key:2,"append-icon":"mdi-dice-multiple",class:"ml-2",color:"amber","prepend-icon":"mdi-account-question",size:"large",onClick:i.openRandomPicker},{default:n(()=>[...e[28]||(e[28]=[r(" 随机点名 ",-1)])]),_:1},8,["onClick"])):_("",!0),i.showExamScheduleButton?(f(),V(k,{key:3,class:"ml-2",color:"green","prepend-icon":"mdi-calendar-check",size:"large",onClick:e[4]||(e[4]=h=>t.$router.push("/examschedule"))},{default:n(()=>[...e[29]||(e[29]=[r(" 考试看板 ",-1)])]),_:1})):_("",!0),i.showListCardButton?(f(),V(k,{key:4,class:"ml-2",color:"primary-darken-1","prepend-icon":"mdi-list-box",size:"large",onClick:e[5]||(e[5]=h=>t.$router.push("/list"))},{default:n(()=>[...e[30]||(e[30]=[r(" 列表 ",-1)])]),_:1})):_("",!0),i.showFullscreenButton?(f(),V(k,{key:5,color:s.state.isFullscreen?"blue-grey":"blue","prepend-icon":s.state.isFullscreen?"mdi-fullscreen-exit":"mdi-fullscreen",class:"ml-2",size:"large",onClick:i.toggleFullscreen},{default:n(()=>[r(x(s.state.isFullscreen?"退出全屏":"全屏显示"),1)]),_:1},8,["color","prepend-icon","onClick"])):_("",!0),i.showAntiScreenBurnCard?(f(),V(A,{key:6,border:"",class:"mt-4 anti-burn-card",color:"primary",variant:"tonal"},{default:n(()=>[a(ie,{class:"text-subtitle-1"},{default:n(()=>[a(T,{icon:"mdi-shield-check",size:"small",start:""}),e[31]||(e[31]=r(" 屏幕保护技术已启用 ",-1))]),_:1}),a(Q,{class:"text-body-2"},{default:n(()=>[...e[32]||(e[32]=[o("p",null," 本应用采用独立自研的动态像素偏移技术(DPO™)有效防止LCD屏幕烧屏现象。 ",-1),o("p",{class:"text-caption text-grey"},[r(" *研究显示动态像素偏移技术可以修复屏幕坏点,起到保护屏幕的作用,数据来自实验室。"),o("a",{href:"https://patentscope.wipo.int/search/zh/detail.jsf?docId=CN232281523&_cid=P20-M8L0YX-67061-1",target:"_blank"},"专利号CN108648692 ")],-1),o("p",{class:"text-caption text-grey"}," *技术已自动适配您的设备,无需手动调整 ",-1)])]),_:1})]),_:1})):_("",!0)]),_:1}),s.state.studentList&&s.state.studentList.length?se((f(),V(_e,{key:0,class:"attendance-area no-select",cols:"1",onClick:e[6]||(e[6]=h=>i.setAttendanceArea())},{default:n(()=>[e[43]||(e[43]=o("h1",null,"出勤",-1)),o("h2",null,[a(g,{style:{"white-space":"nowrap"}},{default:n(()=>[...e[33]||(e[33]=[r(" 应到",-1)])]),_:1}),e[34]||(e[34]=r(" : ",-1)),a(g,{style:{"white-space":"nowrap"}},{default:n(()=>[r(x(s.state.studentList.length-s.state.boardData.attendance.exclude.length)+"人 ",1)]),_:1})]),o("h2",null,[a(g,{style:{"white-space":"nowrap"}},{default:n(()=>[...e[35]||(e[35]=[r(" 实到",-1)])]),_:1}),e[36]||(e[36]=r(" : ",-1)),a(g,{style:{"white-space":"nowrap"}},{default:n(()=>[r(x(s.state.studentList.length-s.state.boardData.attendance.absent.length-s.state.boardData.attendance.late.length-s.state.boardData.attendance.exclude.length)+"人 ",1)]),_:1})]),o("h2",null,[a(g,{style:{"white-space":"nowrap"}},{default:n(()=>[...e[37]||(e[37]=[r(" 请假",-1)])]),_:1}),e[38]||(e[38]=r(" : ",-1)),a(g,{style:{"white-space":"nowrap"}},{default:n(()=>[r(x(s.state.boardData.attendance.absent.length)+"人 ",1)]),_:1})]),(f(!0),w(P,null,O(s.state.boardData.attendance.absent,(h,N)=>(f(),w("h3",{key:"absent-"+N,class:"gray-text"},[s.useDisplay().lgAndUp.value?(f(),w("span",Hn,x(`${N+1}. `),1)):_("",!0),o("span",qn,x(h),1)]))),128)),o("h2",null,[a(g,{style:{"white-space":"nowrap"}},{default:n(()=>[...e[39]||(e[39]=[r("迟到",-1)])]),_:1}),e[40]||(e[40]=r(" : ",-1)),a(g,{style:{"white-space":"nowrap"}},{default:n(()=>[r(x(s.state.boardData.attendance.late.length)+"人 ",1)]),_:1})]),(f(!0),w(P,null,O(s.state.boardData.attendance.late,(h,N)=>(f(),w("h3",{key:"late-"+N,class:"gray-text"},[s.useDisplay().lgAndUp.value?(f(),w("span",Gn,x(`${N+1}. `),1)):_("",!0),o("span",Yn,x(h),1)]))),128)),o("h2",null,[a(g,{style:{"white-space":"nowrap"}},{default:n(()=>[...e[41]||(e[41]=[r("不参与",-1)])]),_:1}),e[42]||(e[42]=r(" : ",-1)),a(g,{style:{"white-space":"nowrap"}},{default:n(()=>[r(x(s.state.boardData.attendance.exclude.length)+"人 ",1)]),_:1})]),(f(!0),w(P,null,O(s.state.boardData.attendance.exclude,(h,N)=>(f(),w("h3",{key:"exclude-"+N,class:"gray-text"},[s.useDisplay().lgAndUp.value?(f(),w("span",Jn,x(`${N+1}. `),1)):_("",!0),o("span",Wn,x(h),1)]))),128))]),_:1})),[[xe,{class:`text-${["primary","secondary","info","success","warning","error"][Math.floor(Math.random()*6)]}`}]]):_("",!0)])),a(b,{modelValue:s.state.dialogVisible,"onUpdate:modelValue":e[7]||(e[7]=h=>s.state.dialogVisible=h),"auto-save":i.autoSave,"initial-content":s.state.textarea,title:s.state.dialogTitle,onSave:i.handleHomeworkSave},null,8,["modelValue","auto-save","initial-content","title","onSave"]),a(is,{modelValue:s.state.snackbar,"onUpdate:modelValue":e[8]||(e[8]=h=>s.state.snackbar=h),timeout:2e3},{default:n(()=>[r(x(s.state.snackbarText),1)]),_:1},8,["modelValue"]),a(fe,{modelValue:s.state.attendanceDialog,"onUpdate:modelValue":[e[14]||(e[14]=h=>s.state.attendanceDialog=h),i.handleAttendanceDialogClose],"fullscreen-breakpoint":"sm","max-width":"900"},{default:n(()=>[a(A,null,{default:n(()=>[a(ie,{class:"d-flex align-center"},{default:n(()=>[a(T,{class:"mr-2",icon:"mdi-account-group"}),e[44]||(e[44]=r(" 出勤状态管理 ",-1)),a(oe),a(J,{class:"ml-2",color:"primary",size:"small"},{default:n(()=>[r(x(s.state.dateString),1)]),_:1})]),_:1}),a(Q,null,{default:n(()=>[a(Me,{class:"mb-4"},{default:n(()=>[a(_e,{cols:"12",md:"12"},{default:n(()=>[a(ke,{modelValue:s.attendanceSearch,"onUpdate:modelValue":[e[9]||(e[9]=h=>s.attendanceSearch=h),t.handleSearchChange],clearable:"",hint:"支持筛选姓氏,如输入'孙'可筛选所有姓孙的学生",label:"搜索学生","prepend-inner-icon":"mdi-magnify",variant:"outlined"},null,8,["modelValue","onUpdate:modelValue"]),o("div",Qn,[(f(!0),w(P,null,O(i.extractedSurnames,h=>(f(),V(k,{key:h.name,color:s.attendanceSearch===h.name?"primary":"",variant:s.attendanceSearch===h.name?"elevated":"text",onClick:N=>s.attendanceSearch=s.attendanceSearch===h.name?"":h.name},{default:n(()=>[r(x(h.name)+" ("+x(h.count)+") ",1)]),_:2},1032,["color","variant","onClick"]))),128))])]),_:1})]),_:1}),o("div",Xn,[o("div",null,[a(J,{"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[10]||(e[10]=h=>i.toggleFilter("present"))},{default:n(()=>[...e[45]||(e[45]=[r(" 到课 ",-1)])]),_:1},8,["append-icon","color","variant"]),a(J,{"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[11]||(e[11]=h=>i.toggleFilter("absent"))},{default:n(()=>[...e[46]||(e[46]=[r(" 请假 ",-1)])]),_:1},8,["append-icon","color","variant"]),a(J,{"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[12]||(e[12]=h=>i.toggleFilter("late"))},{default:n(()=>[...e[47]||(e[47]=[r(" 迟到 ",-1)])]),_:1},8,["append-icon","color","variant"]),a(J,{"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[13]||(e[13]=h=>i.toggleFilter("exclude"))},{default:n(()=>[...e[48]||(e[48]=[r(" 不参与 ",-1)])]),_:1},8,["append-icon","color","variant"])])]),a(Me,null,{default:n(()=>[(f(!0),w(P,null,O(i.filteredStudents,h=>(f(),V(_e,{key:h,cols:"12",lg:"4",md:"6",sm:"6"},{default:n(()=>[a(A,{border:"",class:"student-card"},{default:n(()=>[a(Q,{class:"d-flex align-center pa-2"},{default:n(()=>[o("div",Zn,[o("div",el,[a(je,{color:i.getStudentStatusColor(s.state.studentList.indexOf(h)),class:"mr-2",size:"24"},{default:n(()=>[a(T,{size:"small"},{default:n(()=>[r(x(i.getStudentStatusIcon(s.state.studentList.indexOf(h))),1)]),_:2},1024)]),_:2},1032,["color"]),o("div",tl,x(h),1)])]),o("div",sl,[a(k,{color:i.isPresent(s.state.studentList.indexOf(h))?"success":"",title:"设为到课",icon:"mdi-account-check",size:"small",variant:"text",onClick:N=>i.setPresent(s.state.studentList.indexOf(h))},null,8,["color","onClick"]),a(k,{color:i.isAbsent(s.state.studentList.indexOf(h))?"error":"",title:"设为请假",icon:"mdi-account-off",size:"small",variant:"text",onClick:N=>i.setAbsent(s.state.studentList.indexOf(h))},null,8,["color","onClick"]),a(k,{color:i.isLate(s.state.studentList.indexOf(h))?"warning":"",title:"设为迟到",icon:"mdi-clock-alert",size:"small",variant:"text",onClick:N=>i.setLate(s.state.studentList.indexOf(h))},null,8,["color","onClick"]),a(k,{color:i.isExclude(s.state.studentList.indexOf(h))?"grey":"",title:"设为不参与",icon:"mdi-account-cancel",size:"small",variant:"text",onClick:N=>i.setExclude(s.state.studentList.indexOf(h))},null,8,["color","onClick"])])]),_:2},1024)]),_:2},1024)]),_:2},1024))),128))]),_:1}),a(Me,null,{default:n(()=>[a(_e,{cols:"12",md:"12"},{default:n(()=>[a(A,{class:"mb-4",color:"primary",variant:"tonal"},{default:n(()=>[a(Q,null,{default:n(()=>[e[53]||(e[53]=o("div",{class:"text-subtitle-2 mb-2"},"批量操作",-1)),a(Ue,null,{default:n(()=>[a(k,{color:"success","prepend-icon":"mdi-account-check",onClick:i.setAllPresent},{default:n(()=>[...e[49]||(e[49]=[r(" 全部到齐 ",-1)])]),_:1},8,["onClick"]),a(k,{color:"error","prepend-icon":"mdi-account-off",onClick:i.setAllAbsent},{default:n(()=>[...e[50]||(e[50]=[r(" 全部请假 ",-1)])]),_:1},8,["onClick"])]),_:1}),a(Ue,null,{default:n(()=>[a(k,{color:"warning","prepend-icon":"mdi-clock-alert",onClick:i.setAllLate},{default:n(()=>[...e[51]||(e[51]=[r(" 全部迟到 ",-1)])]),_:1},8,["onClick"]),a(k,{color:"grey","prepend-icon":"mdi-account-cancel",onClick:i.setAllExclude},{default:n(()=>[...e[52]||(e[52]=[r(" 全部不参与 ",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})]),_:1}),a(De),a(ve,null,{default:n(()=>[a(oe),a(k,{color:"primary",onClick:i.saveAttendance},{default:n(()=>[a(T,{start:""},{default:n(()=>[...e[54]||(e[54]=[r("mdi-content-save",-1)])]),_:1}),e[55]||(e[55]=r(" 保存 ",-1))]),_:1},8,["onClick"])]),_:1})]),_:1})]),_:1},8,["modelValue","onUpdate:modelValue"]),a(p,{ref:"messageLog"},null,512),a(D,{"is-today":i.isToday,loading:s.loading.download,"selected-date":s.state.selectedDateObj,"unread-count":i.unreadCount,onRefresh:i.downloadData,onZoom:i.zoom,onOpenMessages:e[15]||(e[15]=h=>t.$refs.messageLog.drawer=!0),onOpenSettings:e[16]||(e[16]=h=>t.$router.push("/settings")),onDateSelect:i.handleDateSelect,onPrevDay:e[17]||(e[17]=h=>i.navigateDay(-1)),onNextDay:e[18]||(e[18]=h=>i.navigateDay(1))},null,8,["is-today","loading","selected-date","unread-count","onRefresh","onZoom","onDateSelect"]),a(K),a(te,{modelValue:s.isChatOpen,"onUpdate:modelValue":e[19]||(e[19]=h=>s.isChatOpen=h),"show-button":!1},null,8,["modelValue"]),a(fe,{modelValue:s.confirmDialog.show,"onUpdate:modelValue":e[20]||(e[20]=h=>s.confirmDialog.show=h),"max-width":"400"},{default:n(()=>[a(A,null,{default:n(()=>[a(ie,{class:"text-h6"},{default:n(()=>[...e[56]||(e[56]=[r(" 确认保存",-1)])]),_:1}),a(Q,null,{default:n(()=>[r(" 您正在修改 "+x(s.state.dateString)+" 的数据,确定要保存吗? ",1)]),_:1}),a(ve,null,{default:n(()=>[a(oe),a(k,{color:"grey",variant:"text",onClick:s.confirmDialog.reject},{default:n(()=>[...e[57]||(e[57]=[r(" 取消 ",-1)])]),_:1},8,["onClick"]),a(k,{color:"primary",onClick:s.confirmDialog.resolve},{default:n(()=>[...e[58]||(e[58]=[r(" 确认保存",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1})]),_:1},8,["modelValue"]),a(M,{ref:"randomPicker",attendance:s.state.boardData.attendance,"student-list":s.state.studentList},null,8,["attendance","student-list"]),a(fe,{modelValue:s.urlConfigDialog.show,"onUpdate:modelValue":e[21]||(e[21]=h=>s.urlConfigDialog.show=h),"max-width":"500"},{default:n(()=>[a(A,null,{default:n(()=>[a(ie,{class:"text-h6"},{default:n(()=>[...e[59]||(e[59]=[r(" 确认应用URL配置",-1)])]),_:1}),a(Q,null,{default:n(()=>[e[60]||(e[60]=o("p",null,"以下配置将应用于当前班级:",-1)),a(qe,{density:"compact"},{default:n(()=>[(f(!0),w(P,null,O(s.urlConfigDialog.changes,h=>(f(),V(Be,{key:h.key},{prepend:n(()=>[a(T,{icon:h.icon,class:"mr-2",size:"small"},null,8,["icon"])]),default:n(()=>[a(os,{class:"d-flex align-center"},{default:n(()=>[o("span",al,x(h.name),1),a(Je,{activator:"parent",location:"top"},{default:n(()=>[r(x(h.description||h.key),1)]),_:2},1024)]),_:2},1024),a(rs,null,{default:n(()=>[o("span",nl,x(h.oldValue),1),a(T,{class:"mx-1",icon:"mdi-arrow-right",size:"small"}),o("span",ll,x(h.newValue),1)]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1}),a(ve,null,{default:n(()=>[a(oe),a(k,{color:"grey",variant:"text",onClick:s.urlConfigDialog.cancelHandler},{default:n(()=>[...e[61]||(e[61]=[r(" 取消 ",-1)])]),_:1},8,["onClick"]),a(k,{color:"primary",onClick:s.urlConfigDialog.confirmHandler},{default:n(()=>[...e[62]||(e[62]=[r(" 确认应用 ",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1})]),_:1},8,["modelValue"]),e[63]||(e[63]=o("br",null,null,-1)),e[64]||(e[64]=o("br",null,null,-1)),e[65]||(e[65]=o("br",null,null,-1))],64)}const Vl=he(Bn,[["render",il]]);export{Vl as default};