1
0
mirror of https://github.com/ZeroCatDev/Classworks.git synced 2025-12-07 21:13:11 +00:00
Classworks/assets/ExamConfigEditor-WIp6TnH6.js

3 lines
34 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

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

import{d as X}from"./dataProvider-C5fw6Cxr.js";import{g as ke,p as we,W as V,Z as je,aE as qe,a1 as z,a2 as ye,c as Ce,i as f,n as Te,e as H,b2 as Ye,U as Be,d as l,y as C,t as m,$ as Se,ah as $e,ac as Fe,E as te,b3 as _e,_ as We,A as P,o as k,j as x,B as S,w as a,v as p,C as N,a6 as Ne,F as me,G as ce,a7 as Ie,an as Ge,z as R,l as A,D as Ke,q,x as Z,O as Xe,b4 as Ze,I as Qe,J as et,M as ge,H as tt}from"./index-DOEvZ9Qk.js";import{V as he}from"./VAlert-D41nMnUE.js";import{V as lt}from"./VSkeletonLoader-CRMuGlO0.js";import{V as at}from"./VTooltip-D2dhyC79.js";import{V as Ee,b as nt}from"./VChip-Dl_Bn8pI.js";import{a as U,V as Q}from"./VRow-x5XK8bac.js";import{V as ee}from"./VTextField-CR6V5zqO.js";import{V as ot}from"./VTextarea-BQ9B8-sy.js";import{V as Pe}from"./VMenu-BgmgY7zV.js";import{a as Ue,m as it,V as He}from"./VDatePicker-C9uf6Ccq.js";function Y(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:2;return String(e).padStart(t,"0")}const st=we({allowedValues:Function,ampm:Boolean,color:String,disabled:Boolean,displayedValue:null,double:Boolean,format:{type:Function,default:e=>e},max:{type:Number,required:!0},min:{type:Number,required:!0},scrollable:Boolean,readonly:Boolean,rotate:{type:Number,default:0},step:{type:Number,default:1},modelValue:{type:Number}},"VTimePickerClock"),ze=ke()({name:"VTimePickerClock",props:st(),emits:{change:e=>!0,input:e=>!0},setup(e,t){let{emit:i}=t;const d=V(null),o=V(null),s=V(void 0),n=V(!1),v=V(null),c=V(null),T=Ye(r=>i("change",r),750),{textColorClasses:le,textColorStyles:L}=je(()=>e.color),{backgroundColorClasses:_,backgroundColorStyles:fe}=qe(()=>e.color),O=z(()=>e.max-e.min+1),I=z(()=>e.double?O.value/2:O.value),E=z(()=>360/I.value),ae=z(()=>E.value*Math.PI/180),D=z(()=>e.modelValue==null?e.min:e.modelValue),K=z(()=>.62),ne=z(()=>{const r=[];for(let g=e.min;g<=e.max;g=g+e.step)r.push(g);return r});ye(()=>e.modelValue,r=>{s.value=r});function oe(r){s.value!==r&&(s.value=r),i("input",r)}function B(r){return!e.allowedValues||e.allowedValues(r)}function ie(r){if(!e.scrollable||e.disabled)return;r.preventDefault();const g=Math.sign(-r.deltaY||1);let y=D.value;do y=y+g,y=(y-e.min+O.value)%O.value+e.min;while(!B(y)&&y!==D.value);y!==e.displayedValue&&oe(y),T(y)}function se(r){return e.double&&r-e.min>=I.value}function $(r){return se(r)?K.value:1}function ve(r){const g=e.rotate*Math.PI/180;return{x:Math.sin((r-e.min)*ae.value+g)*$(r),y:-Math.cos((r-e.min)*ae.value+g)*$(r)}}function re(r,g){const y=(Math.round(r/E.value)+(g?I.value:0))%O.value+e.min;return r<360-E.value/2?y:g?e.max-I.value+1:e.min}function u(r){const{x:g,y}=ve(r);return{left:`${Math.round(50+g*50)}%`,top:`${Math.round(50+y*50)}%`}}function w(r,g){const y=g.x-r.x,W=g.y-r.y;return Math.sqrt(y*y+W*W)}function b(r,g){const y=2*Math.atan2(g.y-r.y-w(r,g),g.x-r.x);return Math.abs(y*180/Math.PI)}function h(r){v.value===null&&(v.value=r),c.value=r,oe(r)}function M(r){var De,Me;if(r.preventDefault(),!n.value&&r.type!=="click"||!d.value)return;const{width:g,top:y,left:W}=(De=d.value)==null?void 0:De.getBoundingClientRect(),{width:j}=((Me=o.value)==null?void 0:Me.getBoundingClientRect())??{width:0},{clientX:ue,clientY:Re}="touches"in r?r.touches[0]:r,pe={x:g/2,y:-g/2},be={x:ue-W,y:y-Re},xe=Math.round(b(pe,be)-e.rotate+360)%360,Ve=e.double&&w(pe,be)<(j+j*K.value)/4,Oe=Math.ceil(15/E.value);let G;for(let de=0;de<Oe;de++)if(G=re(xe+de*E.value,Ve),B(G)||(G=re(xe-de*E.value,Ve),B(G)))return h(G)}function F(r){e.disabled||(r.preventDefault(),window.addEventListener("mousemove",M),window.addEventListener("touchmove",M),window.addEventListener("mouseup",J),window.addEventListener("touchend",J),v.value=null,c.value=null,n.value=!0,M(r))}function J(r){r.stopPropagation(),window.removeEventListener("mousemove",M),window.removeEventListener("touchmove",M),window.removeEventListener("mouseup",J),window.removeEventListener("touchend",J),n.value=!1,c.value!==null&&B(c.value)&&i("change",c.value)}Ce(()=>f("div",{class:H([{"v-time-picker-clock":!0,"v-time-picker-clock--indeterminate":e.modelValue==null,"v-time-picker-clock--readonly":e.readonly}]),onMousedown:F,onTouchstart:F,onWheel:ie,ref:d},[f("div",{class:"v-time-picker-clock__inner",ref:o},[f("div",{class:H([{"v-time-picker-clock__hand":!0,"v-time-picker-clock__hand--inner":se(e.modelValue)},le.value]),style:Te([{transform:`rotate(${e.rotate+E.value*(D.value-e.min)}deg) scaleY(${$(D.value)})`},L.value])},null),ne.value.map(r=>{const g=r===D.value;return f("div",{class:H([{"v-time-picker-clock__item":!0,"v-time-picker-clock__item--active":g,"v-time-picker-clock__item--disabled":e.disabled||!B(r)},g&&_.value]),style:Te([u(r),g&&fe.value])},[f("span",null,[e.format(r)])])})])]))}}),rt=we({ampm:Boolean,color:String,disabled:Boolean,hour:Number,minute:Number,second:Number,period:String,readonly:Boolean,useSeconds:Boolean,value:Number,viewMode:String},"VTimePickerControls"),Le=ke()({name:"VTimePickerControls",props:rt(),emits:{"update:period":e=>!0,"update:viewMode":e=>!0},setup(e,t){let{emit:i,slots:d}=t;const{t:o}=Be();return Ce(()=>{let s=e.hour;return e.ampm&&(s=s?(s-1)%12+1:12),f("div",{class:"v-time-picker-controls"},[f("div",{class:H({"v-time-picker-controls__time":!0,"v-time-picker-controls__time--with-seconds":e.useSeconds})},[l(C,{active:e.viewMode==="hour",color:e.viewMode==="hour"?e.color:void 0,disabled:e.disabled,variant:"tonal",class:H({"v-time-picker-controls__time__btn":!0,"v-time-picker-controls__time--with-ampm__btn":e.ampm,"v-time-picker-controls__time--with-seconds__btn":e.useSeconds}),text:e.hour==null?"--":Y(`${s}`),onClick:()=>i("update:viewMode","hour")},null),f("span",{class:H(["v-time-picker-controls__time__separator",{"v-time-picker-controls--with-seconds__time__separator":e.useSeconds}])},[m(":")]),l(C,{active:e.viewMode==="minute",color:e.viewMode==="minute"?e.color:void 0,class:H({"v-time-picker-controls__time__btn":!0,"v-time-picker-controls__time__btn__active":e.viewMode==="minute","v-time-picker-controls__time--with-ampm__btn":e.ampm,"v-time-picker-controls__time--with-seconds__btn":e.useSeconds}),disabled:e.disabled,variant:"tonal",text:e.minute==null?"--":Y(e.minute),onClick:()=>i("update:viewMode","minute")},null),e.useSeconds&&f("span",{class:H(["v-time-picker-controls__time__separator",{"v-time-picker-controls--with-seconds__time__separator":e.useSeconds}]),key:"secondsDivider"},[m(":")]),e.useSeconds&&l(C,{key:"secondsVal",active:e.viewMode==="second",color:e.viewMode==="second"?e.color:void 0,variant:"tonal",onClick:()=>i("update:viewMode","second"),class:H({"v-time-picker-controls__time__btn":!0,"v-time-picker-controls__time__btn__active":e.viewMode==="second","v-time-picker-controls__time--with-seconds__btn":e.useSeconds}),disabled:e.disabled,text:e.second==null?"--":Y(e.second)},null),e.ampm&&f("div",{class:"v-time-picker-controls__ampm"},[l(C,{active:e.period==="am",color:e.period==="am"?e.color:void 0,class:H({"v-time-picker-controls__ampm__am":!0,"v-time-picker-controls__ampm__btn":!0,"v-time-picker-controls__ampm__btn__active":e.period==="am"}),disabled:e.disabled,text:o("$vuetify.timePicker.am"),variant:e.disabled&&e.period==="am"?"elevated":"tonal",onClick:()=>e.period!=="am"?i("update:period","am"):null},null),l(C,{active:e.period==="pm",color:e.period==="pm"?e.color:void 0,class:H({"v-time-picker-controls__ampm__pm":!0,"v-time-picker-controls__ampm__btn":!0,"v-time-picker-controls__ampm__btn__active":e.period==="pm"}),disabled:e.disabled,text:o("$vuetify.timePicker.pm"),variant:e.disabled&&e.period==="pm"?"elevated":"tonal",onClick:()=>e.period!=="pm"?i("update:period","pm"):null},null)])])])}),{}}}),ut=_e(24),Je=_e(12),dt=Je.map(e=>e+12);_e(60);const mt=we({allowedHours:[Function,Array],allowedMinutes:[Function,Array],allowedSeconds:[Function,Array],disabled:Boolean,format:{type:String,default:"ampm"},max:String,min:String,viewMode:{type:String,default:"hour"},period:{type:String,default:"am",validator:e=>["am","pm"].includes(e)},modelValue:null,readonly:Boolean,scrollable:Boolean,useSeconds:Boolean,...Fe(it({title:"$vuetify.timePicker.title"}),["landscape"])},"VTimePicker"),Ae=ke()({name:"VTimePicker",props:mt(),emits:{"update:hour":e=>!0,"update:minute":e=>!0,"update:period":e=>!0,"update:second":e=>!0,"update:modelValue":e=>!0,"update:viewMode":e=>!0},setup(e,t){let{emit:i,slots:d}=t;const{t:o}=Be(),s=V(null),n=V(null),v=V(null),c=V(null),T=V(null),le=V(null),L=Se(e,"period","am"),_=Se(e,"viewMode","hour"),fe=V(null),O=V(null),I=z(()=>{let u;if(e.allowedHours instanceof Array?u=h=>e.allowedHours.includes(h):u=e.allowedHours,!e.min&&!e.max)return u;const w=e.min?Number(e.min.split(":")[0]):0,b=e.max?Number(e.max.split(":")[0]):23;return h=>h>=Number(w)&&h<=Number(b)&&(!u||u(h))}),E=z(()=>{let u;const w=!I.value||s.value===null||I.value(s.value);if(e.allowedMinutes instanceof Array?u=g=>e.allowedMinutes.includes(g):u=e.allowedMinutes,!e.min&&!e.max)return w?u:()=>!1;const[b,h]=e.min?e.min.split(":").map(Number):[0,0],[M,F]=e.max?e.max.split(":").map(Number):[23,59],J=b*60+Number(h),r=M*60+Number(F);return g=>{const y=60*s.value+g;return y>=J&&y<=r&&w&&(!u||u(g))}}),ae=z(()=>{let u;const b=(!I.value||s.value===null||I.value(s.value))&&(!E.value||n.value===null||E.value(n.value));if(e.allowedSeconds instanceof Array?u=j=>e.allowedSeconds.includes(j):u=e.allowedSeconds,!e.min&&!e.max)return b?u:()=>!1;const[h,M,F]=e.min?e.min.split(":").map(Number):[0,0,0],[J,r,g]=e.max?e.max.split(":").map(Number):[23,59,59],y=h*3600+M*60+Number(F||0),W=J*3600+r*60+Number(g||0);return j=>{const ue=3600*s.value+60*n.value+j;return ue>=y&&ue<=W&&b&&(!u||u(j))}}),D=z(()=>e.format==="ampm");ye(()=>e.period,u=>$(u)),ye(()=>e.modelValue,u=>ie(u)),$e(()=>{ie(e.modelValue)});function K(){return s.value!=null&&n.value!=null&&(!e.useSeconds||v.value!=null)?`${Y(s.value)}:${Y(n.value)}`+(e.useSeconds?`:${Y(v.value)}`:""):null}function ne(){const u=K();u!==null&&i("update:modelValue",u)}function oe(u){return u?(u-1)%12+1:12}function B(u,w){return u%12+(w==="pm"?12:0)}function ie(u){if(u==null||u==="")s.value=null,n.value=null,v.value=null;else if(u instanceof Date)s.value=u.getHours(),n.value=u.getMinutes(),v.value=u.getSeconds();else{const[w,,b,,h,M]=u.trim().toLowerCase().match(/^(\d+):(\d+)(:(\d+))?([ap]m)?$/)||new Array(6);s.value=M?B(parseInt(w,10),M):parseInt(w,10),n.value=parseInt(b,10),v.value=parseInt(h||0,10)}L.value=s.value==null||s.value<12?"am":"pm"}function se(u,w){const b=I.value;if(!b)return w;const h=D.value?w<12?Je:dt:ut;return((h.find(F=>b((F+w)%h.length+h[0]))||0)+w)%h.length+h[0]}function $(u){if(L.value=u,s.value!=null){const w=s.value+(L.value==="am"?-12:12);s.value=se("hour",w)}return i("update:period",u),ne(),!0}function ve(u){_.value==="hour"?s.value=D.value?B(u,L.value):u:_.value==="minute"?n.value=u:v.value=u}function re(u){switch(_.value||"hour"){case"hour":i("update:hour",u);break;case"minute":i("update:minute",u);break;case"second":i("update:second",u);break}const w=s.value!==null&&n.value!==null&&(e.useSeconds?v.value!==null:!0);_.value==="hour"?_.value="minute":e.useSeconds&&_.value==="minute"&&(_.value="second"),!(s.value===c.value&&n.value===T.value&&(!e.useSeconds||v.value===le.value)||K()===null)&&(c.value=s.value,T.value=n.value,e.useSeconds&&(le.value=v.value),w&&ne())}Ce(()=>{const u=Ue.filterProps(e),w=Le.filterProps(e),b=ze.filterProps(Fe(e,["format","modelValue","min","max"]));return l(Ue,te(u,{color:void 0,class:["v-time-picker",e.class],style:e.style}),{title:()=>{var h;return((h=d.title)==null?void 0:h.call(d))??f("div",{class:"v-time-picker__title"},[o(e.title)])},header:()=>l(Le,te(w,{ampm:D.value,hour:s.value,minute:n.value,period:L.value,second:v.value,viewMode:_.value,"onUpdate:period":h=>$(h),"onUpdate:viewMode":h=>_.value=h,ref:fe}),null),default:()=>l(ze,te(b,{allowedValues:_.value==="hour"?I.value:_.value==="minute"?E.value:ae.value,double:_.value==="hour"&&!D.value,format:_.value==="hour"?D.value?oe:h=>h:h=>Y(h,2),max:_.value==="hour"?D.value&&L.value==="am"?11:23:59,min:_.value==="hour"&&D.value&&L.value==="pm"?12:0,size:20,step:_.value==="hour"?1:5,modelValue:_.value==="hour"?s.value:_.value==="minute"?n.value:v.value,onChange:re,onInput:ve,ref:O}),null),actions:d.actions})})}}),ct={name:"ExamConfigEditor",props:{configId:{type:String,required:!0},dialogMode:{type:Boolean,default:!1}},emits:["saved","error","opened","deleted"],data(){return{localConfig:{examName:"",message:"",room:"",examInfos:[]},loading:!1,saving:!1,deleting:!1,deleteDialog:!1,error:"",success:"",isEditMode:!1,showJsonPreview:!1,defaultExamTips:["请保持卷面整洁,字迹清晰,诚信应考。在听到终考铃时立刻起立,停止作答。","沉着 冷静 细心 守记","答题不守记,自己两行泪。"]}},computed:{formattedJson(){try{return JSON.stringify(this.localConfig,null,2)}catch(e){return console.error("格式化JSON时出错:",e),"无效的JSON格式"}},isValidConfig(){return this.localConfig.examName&&this.localConfig.message&&this.localConfig.examInfos&&this.localConfig.examInfos.length>0&&this.localConfig.examInfos.every(e=>e.name&&e.start&&e.end)},validationErrors(){const e=[];if((!this.localConfig.examName||this.localConfig.examName.trim()==="")&&e.push("考试名称不能为空"),(!this.localConfig.message||this.localConfig.message.trim()==="")&&e.push("考试提示不能为空"),!this.localConfig.examInfos||this.localConfig.examInfos.length===0)e.push("至少需要添加一个考试科目");else{this.localConfig.examInfos.forEach((t,i)=>{const d=`${i+1}个科目`;if((!t.name||t.name.trim()==="")&&e.push(`${d}的名称不能为空`),t.start||e.push(`${d}的开始时间不能为空`),t.end||e.push(`${d}的结束时间不能为空`),t.start&&t.end){const o=new Date(t.start),s=new Date(t.end);isNaN(o.getTime())&&e.push(`${d}的开始时间格式不正确`),isNaN(s.getTime())&&e.push(`${d}的结束时间格式不正确`),!isNaN(o.getTime())&&!isNaN(s.getTime())&&(s<=o&&e.push(`${d}的结束时间必须晚于开始时间`),(s-o)/(1e3*60*60)>24&&e.push(`${d}的考试时长不能超过24小时`))}});for(let t=0;t<this.localConfig.examInfos.length;t++)for(let i=t+1;i<this.localConfig.examInfos.length;i++){const d=this.localConfig.examInfos[t],o=this.localConfig.examInfos[i];if(d.start&&d.end&&o.start&&o.end){const s=new Date(d.start),n=new Date(d.end),v=new Date(o.start),c=new Date(o.end);!isNaN(s.getTime())&&!isNaN(n.getTime())&&!isNaN(v.getTime())&&!isNaN(c.getTime())&&s<c&&n>v&&e.push(`${t+1}个科目与第${i+1}个科目的时间有重叠`)}}}return e},hasValidationErrors(){return this.validationErrors.length>0}},watch:{configId:{immediate:!0,handler(e){e&&this.loadConfig()}}},methods:{async loadConfig(){var e;this.loading=!0,this.error="";try{const t=await X.loadData(`es_${this.configId}`);t?(this.localConfig={examName:"",message:"",room:"",examInfos:[],...t},Array.isArray(this.localConfig.examInfos)||(this.localConfig.examInfos=[]),this.localConfig.examInfos.forEach(i=>{if(i.start){const d=this.parseDateTime(i.start);i.start=this.formatDateTimeLocal(d),i.startDate=d,i.startTime=this.formatTimeOnly(d),i.startFormatted=this.formatDisplayDateTime(d),i.startDateMenu=!1}if(i.end){const d=this.parseDateTime(i.end);i.end=this.formatDateTimeLocal(d),i.endDate=d,i.endTime=this.formatTimeOnly(d),i.endFormatted=this.formatDisplayDateTime(d),i.endDateMenu=!1}})):(console.error("加载配置失败:",t),this.error="加载配置失败: "+(((e=t.error)==null?void 0:e.message)||"未知错误"),this.$emit("error",this.error))}catch(t){console.error(t),this.error="加载配置失败: "+t.message,this.$emit("error",this.error)}finally{this.loading=!1}},async saveConfig(){var e;if(!this.isValidConfig){const t=this.validationErrors;return t.length>0?this.error=`配置验证失败:${t.join("")}`:this.error="请填写完整的配置信息",!1}this.saving=!0,this.error="";try{const t={...this.localConfig,examInfos:this.localConfig.examInfos.map(d=>({...d,start:this.formatDisplayDateTime(d.start),end:this.formatDisplayDateTime(d.end)}))},i=await X.saveData(`es_${this.configId}`,t);return i?(this.success="配置保存成功",this.$emit("saved",t),!0):(this.error="保存配置失败: "+(((e=i.error)==null?void 0:e.message)||"未知错误"),this.$emit("error",this.error),!1)}catch(t){return this.error="保存配置失败: "+t,this.$emit("error",this.error),!1}finally{this.saving=!1}},addExamInfo(){const e=new Date,t=new Date(e.getTime()+60*60*1e3),i=new Date(t.getTime()+2*60*60*1e3),d={name:"新科目",start:this.formatDateTimeLocal(t),end:this.formatDateTimeLocal(i),startDate:t,startTime:this.formatTimeOnly(t),startFormatted:this.formatDisplayDateTime(t),startDateMenu:!1,endDate:i,endTime:this.formatTimeOnly(i),endFormatted:this.formatDisplayDateTime(i),endDateMenu:!1};this.localConfig.examInfos.push(d)},removeExamInfo(e){this.localConfig.examInfos.splice(e,1)},moveExamInfo(e,t){const i=e+t;if(i>=0&&i<this.localConfig.examInfos.length){const d=this.localConfig.examInfos.splice(e,1)[0];this.localConfig.examInfos.splice(i,0,d)}},async copyToClipboard(){try{await navigator.clipboard.writeText(this.formattedJson),this.success="JSON已复制到剪贴板"}catch(e){this.error="复制失败: "+e.message}},toggleEditMode(){this.isEditMode=!this.isEditMode,this.error="",this.success=""},quickEdit(){this.isEditMode=!0,this.error="",this.success=""},selectDefaultTip(e){this.localConfig.message&&this.localConfig.message.trim()!==""?this.localConfig.message+=`
`+e:this.localConfig.message=e},formatDateTimeLocal(e){if(!e)return"";let t;if(typeof e=="string"?e.includes("/")?t=new Date(e.replace(/\//g,"-")):t=new Date(e):t=new Date(e),isNaN(t.getTime()))return"";const i=t.getFullYear(),d=String(t.getMonth()+1).padStart(2,"0"),o=String(t.getDate()).padStart(2,"0"),s=String(t.getHours()).padStart(2,"0"),n=String(t.getMinutes()).padStart(2,"0");return`${i}-${d}-${o}T${s}:${n}`},formatDisplayDateTime(e){if(!e)return"";const t=new Date(e);if(isNaN(t.getTime()))return e;const i=t.getFullYear(),d=String(t.getMonth()+1).padStart(2,"0"),o=String(t.getDate()).padStart(2,"0"),s=String(t.getHours()).padStart(2,"0"),n=String(t.getMinutes()).padStart(2,"0");return`${i}/${d}/${o} ${s}:${n}`},parseDateTime(e){return e?typeof e=="string"?e.includes("/")?new Date(e.replace(/\//g,"-")):new Date(e):new Date(e):new Date},formatTimeOnly(e){if(!e)return"00:00";const t=new Date(e);if(isNaN(t.getTime()))return"00:00";const i=String(t.getHours()).padStart(2,"0"),d=String(t.getMinutes()).padStart(2,"0");return`${i}:${d}`},updateStartDateTime(e){const t=this.localConfig.examInfos[e];if(!t.startDate||!t.startTime)return;const i=new Date(t.startDate),[d,o]=t.startTime.split(":");i.setHours(parseInt(d),parseInt(o),0,0),t.start=this.formatDateTimeLocal(i),t.startFormatted=this.formatDisplayDateTime(i)},updateEndDateTime(e){const t=this.localConfig.examInfos[e];if(!t.endDate||!t.endTime)return;const i=new Date(t.endDate),[d,o]=t.endTime.split(":");i.setHours(parseInt(d),parseInt(o),0,0),t.end=this.formatDateTimeLocal(i),t.endFormatted=this.formatDisplayDateTime(i)},async openConfig(){try{const e=await X.getKeyCloudUrl(`es_${this.configId}`,{autoMigrate:!0,autoConfig:!0});if(e.success&&e.url){const t=`https://es.zerocat.dev/exam/?configUrl=${encodeURIComponent(e.url)}`;window.open(t,"_blank"),this.success="配置已在新窗口中打开",this.$emit("opened",{configId:this.configId,url:e.url})}else throw new Error(e.error||"获取云端地址失败")}catch(e){this.error="打开配置失败: "+e.message,this.$emit("error","打开配置失败: "+e.message)}},confirmDelete(){this.deleteDialog=!0},async deleteConfig(){this.deleting=!0;try{const i=(await X.loadData("es_list")||[]).filter(o=>o.id!==this.configId);if(!await X.saveData("es_list",i))throw new Error("更新云端列表失败");this.deleteDialog=!1,this.$emit("deleted",{success:!0,message:"配置删除成功",configId:this.configId})}catch(e){console.error("删除配置失败:",e),this.$emit("deleted",{success:!1,message:"删除失败: "+e.message})}finally{this.deleting=!1}}}},ft={class:"d-flex align-center"},vt={class:"d-flex align-center"},gt={key:4,class:"d-flex justify-space-between align-center mb-4"},ht={class:"d-flex align-center gap-2"},yt={key:5},kt={class:"mb-8"},wt={class:"text-h3 font-weight-bold",style:{"line-height":"1.2"}},Ct={class:"text-subtitle-1 text-grey",style:{"white-space":"pre-wrap","line-height":"1.8"}},_t={key:0,class:"mb-8"},pt={class:"d-flex align-center"},bt={class:""},xt={class:"mb-3"},Vt={class:"d-flex align-center mb-1"},Dt={class:"text-h6 font-weight-medium text-success"},Mt={class:"d-flex align-center mb-1"},Tt={class:"text-h6 font-weight-medium text-error"},St={key:1,class:"text-center py-12"},Nt={class:"json-preview"},It={key:6},Et={class:"text-caption text-medium-emphasis ml-2"},Pt={class:"w-100"},Ut={key:1,class:"text-center py-8"};function Ht(e,t,i,d,o,s){return k(),P("div",null,[o.error?(k(),x(he,{key:0,type:"error",class:"mb-4 mt-3 mx-2",variant:"tonal",border:"start",closable:"","onClick:close":t[0]||(t[0]=n=>o.error="")},{default:a(()=>[f("div",ft,[l(p,{class:"mr-2"},{default:a(()=>[...t[9]||(t[9]=[m("mdi-alert-circle",-1)])]),_:1}),m(" "+N(o.error),1)])]),_:1})):S("",!0),o.success?(k(),x(he,{key:1,type:"success",class:"mb-4 mt-3 mx-2",variant:"tonal",border:"start",closable:"","onClick:close":t[1]||(t[1]=n=>o.success="")},{default:a(()=>[f("div",vt,[l(p,{class:"mr-2"},{default:a(()=>[...t[10]||(t[10]=[m("mdi-check-circle",-1)])]),_:1}),m(" "+N(o.success),1)])]),_:1})):S("",!0),s.hasValidationErrors&&!o.loading?(k(),x(he,{key:2,type:"warning",class:"mb-4 mt-3 mx-2",variant:"tonal",border:"start"},{default:a(()=>[t[12]||(t[12]=f("div",{class:"d-flex align-center"},[f("span",{class:"font-weight-bold"},"配置验证失败,请检查以下问题:")],-1)),l(Ne,{density:"compact",class:"bg-transparent"},{default:a(()=>[(k(!0),P(me,null,ce(s.validationErrors,(n,v)=>(k(),x(Ie,{key:v,class:"px-0 py-0"},{prepend:a(()=>[l(p,{size:"small",color:"warning"},{default:a(()=>[...t[11]||(t[11]=[m("mdi-circle-small",-1)])]),_:1})]),default:a(()=>[l(Ge,{class:"text-body-2"},{default:a(()=>[m(N(n),1)]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1})):S("",!0),o.loading?(k(),x(A,{key:3,class:"my-4",outlined:""},{default:a(()=>[l(R,null,{default:a(()=>[l(lt,{type:"article",class:"mx-auto"})]),_:1})]),_:1})):S("",!0),o.loading?S("",!0):(k(),P("div",gt,[f("div",ht,[l(C,{color:"success",variant:"elevated","prepend-icon":"mdi-open-in-new",onClick:s.openConfig,class:"mr-2 text-none",disabled:!s.isValidConfig},{default:a(()=>[...t[13]||(t[13]=[m(" 打开 ExamSchedule ",-1)])]),_:1},8,["onClick","disabled"]),s.isValidConfig?S("",!0):(k(),x(at,{key:0,activator:"parent",location:"bottom"},{default:a(()=>[...t[14]||(t[14]=[f("span",null,"请先完善配置信息后再打开",-1)])]),_:1}))]),l(Ke,{modelValue:o.isEditMode,"onUpdate:modelValue":t[2]||(t[2]=n=>o.isEditMode=n),color:"primary",variant:"outlined",divided:""},{default:a(()=>[l(C,{class:"text-error","prepend-icon":"mdi-delete",onClick:s.confirmDelete},{default:a(()=>[...t[15]||(t[15]=[m(" 删除配置 ",-1)])]),_:1},8,["onClick"]),l(C,{value:!1,"prepend-icon":"mdi-eye"},{default:a(()=>[...t[16]||(t[16]=[m(" 预览 ",-1)])]),_:1}),l(C,{value:!0,"prepend-icon":"mdi-pencil"},{default:a(()=>[...t[17]||(t[17]=[m(" 编辑 ",-1)])]),_:1})]),_:1},8,["modelValue"])])),!o.loading&&!o.isEditMode?(k(),P("div",yt,[f("div",kt,[f("div",wt,N(o.localConfig.examName||"未设置考试名称"),1),f("div",Ct,N(o.localConfig.message||"未设置考试提示"),1),o.localConfig.room?(k(),x(Ee,{key:0,size:"large",class:"px-4 py-2"},{default:a(()=>[l(p,{start:""},{default:a(()=>[...t[18]||(t[18]=[m("mdi-home",-1)])]),_:1}),m(" 考场:"+N(o.localConfig.room),1)]),_:1})):S("",!0)]),o.localConfig.examInfos&&o.localConfig.examInfos.length>0?(k(),P("div",_t,[l(Q,null,{default:a(()=>[(k(!0),P(me,null,ce(o.localConfig.examInfos,(n,v)=>(k(),x(U,{key:v,cols:"12",md:"6",lg:"4"},{default:a(()=>[l(A,{variant:"tonal",class:"h-100",hover:""},{default:a(()=>[l(q,{class:"bg-primary-lighten-5 pa-4"},{default:a(()=>[f("div",pt,[l(p,{class:"mr-2"},{default:a(()=>[...t[19]||(t[19]=[m("mdi-book-open-page-variant",-1)])]),_:1}),f("span",bt,N(n.name||"未设置科目"),1)])]),_:2},1024),l(R,{class:"pa-4"},{default:a(()=>[f("div",xt,[f("div",Vt,[l(p,{size:"small",class:"mr-2",color:"success"},{default:a(()=>[...t[20]||(t[20]=[m("mdi-clock-start",-1)])]),_:1}),t[21]||(t[21]=f("span",{class:"text-body-2 text-grey-darken-1"},"开始时间",-1))]),f("div",Dt,N(n.startFormatted||n.start||"未设置"),1)]),f("div",null,[f("div",Mt,[l(p,{size:"small",class:"mr-2",color:"error"},{default:a(()=>[...t[22]||(t[22]=[m("mdi-clock-end",-1)])]),_:1}),t[23]||(t[23]=f("span",{class:"text-body-2 text-grey-darken-1"},"结束时间",-1))]),f("div",Tt,N(n.endFormatted||n.end||"未设置"),1)])]),_:2},1024)]),_:2},1024)]),_:2},1024))),128))]),_:1})])):(k(),P("div",St,[l(p,{size:"80",color:"grey-lighten-2",class:"mb-4"},{default:a(()=>[...t[24]||(t[24]=[m(" mdi-calendar-blank ",-1)])]),_:1}),t[27]||(t[27]=f("div",{class:"text-h5 text-grey-darken-1 mb-2"},"暂无考试科目安排",-1)),t[28]||(t[28]=f("div",{class:"text-body-1 text-grey mb-4"},' 点击上方"添加科目"按钮开始配置考试时间表 ',-1)),l(C,{color:"primary",variant:"outlined",onClick:s.quickEdit},{default:a(()=>[l(p,{start:""},{default:a(()=>[...t[25]||(t[25]=[m("mdi-plus",-1)])]),_:1}),t[26]||(t[26]=m(" 立即添加 ",-1))]),_:1},8,["onClick"])])),l(A,{class:"mb-4",elevation:"2",border:""},{default:a(()=>[l(q,{class:"d-flex align-center text-white cursor-pointer",onClick:t[3]||(t[3]=n=>o.showJsonPreview=!o.showJsonPreview)},{default:a(()=>[l(p,{class:"mr-2"},{default:a(()=>[...t[29]||(t[29]=[m("mdi-code-json",-1)])]),_:1}),t[31]||(t[31]=m(" JSON配置预览 ",-1)),l(Z),l(C,{color:"white",variant:"outlined","prepend-icon":"mdi-content-copy",size:"small",onClick:Xe(s.copyToClipboard,["stop"])},{default:a(()=>[...t[30]||(t[30]=[m(" 复制 ",-1)])]),_:1},8,["onClick"]),l(C,{color:"white",variant:"text",size:"small",icon:o.showJsonPreview?"mdi-chevron-up":"mdi-chevron-down",class:"ml-2"},null,8,["icon"])]),_:1}),l(Ze,null,{default:a(()=>[Qe(l(R,{class:"pa-4"},{default:a(()=>[l(A,{variant:"tonal",class:"pa-4"},{default:a(()=>[f("pre",Nt,[f("code",null,N(s.formattedJson),1)])]),_:1})]),_:1},512),[[et,o.showJsonPreview]])]),_:1})]),_:1})])):S("",!0),!o.loading&&o.isEditMode?(k(),P("div",It,[l(A,{class:"mb-4",elevation:"1",border:""},{default:a(()=>[l(q,{class:"d-flex align-center"},{default:a(()=>[l(p,{class:"mr-2"},{default:a(()=>[...t[32]||(t[32]=[m("mdi-information",-1)])]),_:1}),t[33]||(t[33]=m(" 基本信息 ",-1))]),_:1}),l(R,{class:"pa-4"},{default:a(()=>[l(Q,null,{default:a(()=>[l(U,{cols:"12",md:"6"},{default:a(()=>[l(ee,{modelValue:o.localConfig.examName,"onUpdate:modelValue":t[4]||(t[4]=n=>o.localConfig.examName=n),label:"考试名称","prepend-inner-icon":"mdi-calendar-text",variant:"outlined",rules:[n=>!!n||"考试名称不能为空"],required:""},null,8,["modelValue","rules"])]),_:1}),l(U,{cols:"12",md:"6"},{default:a(()=>[l(ee,{modelValue:o.localConfig.room,"onUpdate:modelValue":t[5]||(t[5]=n=>o.localConfig.room=n),label:"考场号标准ES尚不支持此配置","prepend-inner-icon":"mdi-home",variant:"outlined"},null,8,["modelValue"])]),_:1})]),_:1}),l(ot,{modelValue:o.localConfig.message,"onUpdate:modelValue":t[6]||(t[6]=n=>o.localConfig.message=n),label:"考试提示","prepend-inner-icon":"mdi-message-text",variant:"outlined",rows:"3",placeholder:"输入考试相关的提示信息..."},null,8,["modelValue"]),!o.localConfig.message||o.localConfig.message.trim()===""?(k(),x(nt,{key:0,class:"mt-2",column:""},{default:a(()=>[(k(!0),P(me,null,ce(o.defaultExamTips,(n,v)=>(k(),x(Ee,{key:v,color:"primary",variant:"outlined",size:"small",onClick:c=>s.selectDefaultTip(n),class:"ma-1"},{default:a(()=>[l(p,{start:"",size:"small"},{default:a(()=>[...t[34]||(t[34]=[m("mdi-plus",-1)])]),_:1}),m(" "+N(n),1)]),_:2},1032,["onClick"]))),128))]),_:1})):S("",!0),f("div",Et,[l(p,{size:"small",class:"mr-1"},{default:a(()=>[...t[35]||(t[35]=[m("mdi-lightbulb-outline",-1)])]),_:1}),t[36]||(t[36]=m(" 点击上方选项快速添加常用考试提示 ",-1))])]),_:1})]),_:1}),l(A,{class:"mb-4",elevation:"1",border:""},{default:a(()=>[l(q,{class:"d-flex align-center"},{default:a(()=>[l(p,{class:"mr-2"},{default:a(()=>[...t[37]||(t[37]=[m("mdi-format-list-bulleted",-1)])]),_:1}),t[39]||(t[39]=m(" 考试科目安排 ",-1)),l(Z),l(C,{color:"primary","prepend-icon":"mdi-plus",size:"small",onClick:s.addExamInfo},{default:a(()=>[...t[38]||(t[38]=[m(" 添加科目 ",-1)])]),_:1},8,["onClick"])]),_:1}),l(R,{class:"pa-0"},{default:a(()=>[o.localConfig.examInfos&&o.localConfig.examInfos.length>0?(k(),x(Ne,{key:0},{default:a(()=>[(k(!0),P(me,null,ce(o.localConfig.examInfos,(n,v)=>(k(),x(Ie,{key:v,class:"border-b pa-4"},{default:a(()=>[f("div",Pt,[l(Q,null,{default:a(()=>[l(U,{cols:"12",md:"4"},{default:a(()=>[l(ee,{modelValue:n.name,"onUpdate:modelValue":c=>n.name=c,label:"科目名称","prepend-inner-icon":"mdi-book",variant:"outlined",density:"comfortable",rules:[c=>!!c||"科目名称不能为空"]},null,8,["modelValue","onUpdate:modelValue","rules"])]),_:2},1024),l(U,{cols:"12",md:"3"},{default:a(()=>[l(Pe,{modelValue:n.startDateMenu,"onUpdate:modelValue":c=>n.startDateMenu=c,"close-on-content-click":!1,transition:"scale-transition","offset-y":"","min-width":"auto"},{activator:a(({props:c})=>[l(ee,te({modelValue:n.startFormatted,"onUpdate:modelValue":T=>n.startFormatted=T,label:"开始时间","prepend-inner-icon":"mdi-clock-start",variant:"outlined",density:"comfortable",readonly:""},{ref_for:!0},c,{rules:[T=>!!T||"开始时间不能为空"]}),null,16,["modelValue","onUpdate:modelValue","rules"])]),default:a(()=>[l(A,{"min-width":"600"},{default:a(()=>[l(q,{class:"text-center py-2"},{default:a(()=>[...t[40]||(t[40]=[m(" 选择开始时间 ",-1)])]),_:1}),l(R,{class:"pa-0"},{default:a(()=>[l(Q,{"no-gutters":""},{default:a(()=>[l(U,{cols:"6",class:"border-e"},{default:a(()=>[l(He,{modelValue:n.startDate,"onUpdate:modelValue":[c=>n.startDate=c,c=>s.updateStartDateTime(v)],color:"primary",locale:"zh-cn","show-adjacent-months":"",elevation:"0"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),l(U,{cols:"6"},{default:a(()=>[l(Ae,{modelValue:n.startTime,"onUpdate:modelValue":[c=>n.startTime=c,c=>s.updateStartDateTime(v)],color:"primary",format:"24hr",scrollable:"",elevation:"0"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024)]),_:2},1024)]),_:2},1024),l(ge,null,{default:a(()=>[l(Z),l(C,{color:"grey",variant:"text",onClick:c=>n.startDateMenu=!1},{default:a(()=>[...t[41]||(t[41]=[m(" 取消 ",-1)])]),_:1},8,["onClick"]),l(C,{color:"primary",variant:"text",onClick:c=>n.startDateMenu=!1},{default:a(()=>[...t[42]||(t[42]=[m(" 确定 ",-1)])]),_:1},8,["onClick"])]),_:2},1024)]),_:2},1024)]),_:2},1032,["modelValue","onUpdate:modelValue"])]),_:2},1024),l(U,{cols:"12",md:"3"},{default:a(()=>[l(Pe,{modelValue:n.endDateMenu,"onUpdate:modelValue":c=>n.endDateMenu=c,"close-on-content-click":!1,transition:"scale-transition","offset-y":"","min-width":"auto"},{activator:a(({props:c})=>[l(ee,te({modelValue:n.endFormatted,"onUpdate:modelValue":T=>n.endFormatted=T,label:"结束时间","prepend-inner-icon":"mdi-clock-end",variant:"outlined",density:"comfortable",readonly:""},{ref_for:!0},c,{rules:[T=>!!T||"结束时间不能为空"]}),null,16,["modelValue","onUpdate:modelValue","rules"])]),default:a(()=>[l(A,{"min-width":"600"},{default:a(()=>[l(q,{class:"text-center py-2"},{default:a(()=>[...t[43]||(t[43]=[m(" 选择结束时间 ",-1)])]),_:1}),l(R,{class:"pa-0"},{default:a(()=>[l(Q,{"no-gutters":""},{default:a(()=>[l(U,{cols:"6",class:"border-e"},{default:a(()=>[l(He,{modelValue:n.endDate,"onUpdate:modelValue":[c=>n.endDate=c,c=>s.updateEndDateTime(v)],color:"primary",locale:"zh-cn","show-adjacent-months":"",elevation:"0"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),l(U,{cols:"6"},{default:a(()=>[l(Ae,{modelValue:n.endTime,"onUpdate:modelValue":[c=>n.endTime=c,c=>s.updateEndDateTime(v)],color:"primary",format:"24hr",scrollable:"",elevation:"0"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024)]),_:2},1024)]),_:2},1024),l(ge,null,{default:a(()=>[l(Z),l(C,{color:"grey",variant:"text",onClick:c=>n.endDateMenu=!1},{default:a(()=>[...t[44]||(t[44]=[m(" 取消 ",-1)])]),_:1},8,["onClick"]),l(C,{color:"primary",variant:"text",onClick:c=>n.endDateMenu=!1},{default:a(()=>[...t[45]||(t[45]=[m(" 确定 ",-1)])]),_:1},8,["onClick"])]),_:2},1024)]),_:2},1024)]),_:2},1032,["modelValue","onUpdate:modelValue"])]),_:2},1024),l(U,{cols:"12",md:"2",class:"d-flex align-center"},{default:a(()=>[l(C,{icon:"mdi-delete",color:"error",variant:"text",size:"small",onClick:c=>s.removeExamInfo(v)},{default:a(()=>[l(p,null,{default:a(()=>[...t[46]||(t[46]=[m("mdi-delete",-1)])]),_:1})]),_:1},8,["onClick"]),v>0?(k(),x(C,{key:0,icon:"mdi-arrow-up",color:"primary",variant:"text",size:"small",onClick:c=>s.moveExamInfo(v,-1)},{default:a(()=>[l(p,null,{default:a(()=>[...t[47]||(t[47]=[m("mdi-arrow-up",-1)])]),_:1})]),_:1},8,["onClick"])):S("",!0),v<o.localConfig.examInfos.length-1?(k(),x(C,{key:1,icon:"mdi-arrow-down",color:"primary",variant:"text",size:"small",onClick:c=>s.moveExamInfo(v,1)},{default:a(()=>[l(p,null,{default:a(()=>[...t[48]||(t[48]=[m("mdi-arrow-down",-1)])]),_:1})]),_:1},8,["onClick"])):S("",!0)]),_:2},1024)]),_:2},1024)])]),_:2},1024))),128))]),_:1})):(k(),P("div",Ut,[l(p,{size:"48",color:"grey-lighten-1",class:"mb-2"},{default:a(()=>[...t[49]||(t[49]=[m(" mdi-book-plus ",-1)])]),_:1}),t[51]||(t[51]=f("p",{class:"text-body-2 text-grey-darken-1 mb-4"},' 暂无考试科目,点击"添加科目"按钮开始添加 ',-1)),l(C,{color:"primary","prepend-icon":"mdi-plus",onClick:s.addExamInfo},{default:a(()=>[...t[50]||(t[50]=[m(" 添加科目 ",-1)])]),_:1},8,["onClick"])]))]),_:1})]),_:1})])):S("",!0),l(tt,{modelValue:o.deleteDialog,"onUpdate:modelValue":t[8]||(t[8]=n=>o.deleteDialog=n),"max-width":"400"},{default:a(()=>[l(A,null,{default:a(()=>[l(q,{class:"d-flex align-center"},{default:a(()=>[l(p,{color:"error",class:"mr-2"},{default:a(()=>[...t[52]||(t[52]=[m("mdi-delete-alert",-1)])]),_:1}),t[53]||(t[53]=m(" 确认删除配置 ",-1))]),_:1}),l(R,null,{default:a(()=>[t[54]||(t[54]=m(" 确定要删除配置 ",-1)),f("strong",null,N(o.localConfig.examName||`配置 ${i.configId}`),1),t[55]||(t[55]=m(" 吗? ",-1)),t[56]||(t[56]=f("br",null,null,-1)),t[57]||(t[57]=f("small",{class:"text-grey"},"此操作不可撤销,将会删除所有相关数据",-1))]),_:1}),l(ge,null,{default:a(()=>[l(Z),l(C,{color:"grey",variant:"text",onClick:t[7]||(t[7]=n=>o.deleteDialog=!1)},{default:a(()=>[...t[58]||(t[58]=[m(" 取消 ",-1)])]),_:1}),l(C,{color:"error",variant:"outlined",onClick:s.deleteConfig,loading:o.deleting},{default:a(()=>[...t[59]||(t[59]=[m(" 删除 ",-1)])]),_:1},8,["onClick","loading"])]),_:1})]),_:1})]),_:1},8,["modelValue"])])}const $t=We(ct,[["render",Ht],["__scopeId","data-v-1be2a3fc"]]);export{$t as _};