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