mirror of
https://github.com/ZeroCatDev/Classworks.git
synced 2026-08-12 17:40:32 +00:00
8 lines
25 KiB
JavaScript
8 lines
25 KiB
JavaScript
import{_ as J,e as j,c as N,f as k,E as I,d as P,F as q,h as V,l as Z,g as G}from"./index-BvGH7GyK.js";import{V as R,a as C}from"./VRow-CFI96Yew.js";import{V as E}from"./VAlert-DdY_LS-W.js";import{V as U,a as W}from"./VTabs-DTqS4Kso.js";import{a as L,V as Y}from"./VTooltip-CvIsrMQ_.js";import{c as z,d as M,b as X}from"./VTable-C8JDgtcy.js";import{V as K}from"./VTextarea-CCvrj_Hr.js";import{V as Q}from"./VFileInput-Ch1sS0Fm.js";import{a as $,V as v}from"./VChip-CyVmT8se.js";import{V as O}from"./VSwitch-DEARo61Y.js";import{V as ee}from"./VTextField-jDykTfh9.js";import{V as te}from"./VSkeletonLoader-BwErr64p.js";import{V as se}from"./VDataTable-C0z5sFU7.js";import{X as u,Y as g,Z as l,j as r,a1 as n,k as c,S as p,$ as b,_ as h,F as D,a2 as x,ad as le,m as B}from"./vendor-vue-Hxtt57UU.js";import{V as re}from"./VCheckbox-VrkfbZWi.js";import{V as ie}from"./VContainer-Cz0t7N-s.js";import"./vendor-vuetify-KiFW-YAv.js";import"./VPagination-DC48wzod.js";import"./VSelect-BdFWh1xd.js";import"./VMenu-CEn1TBeC.js";import"./VSheet-PSmzyJOR.js";import"./VCheckboxBtn-D_PchAC2.js";const F=()=>new Promise((i,e)=>{if(typeof window.jsyaml<"u")return i(window.jsyaml);const d=document.createElement("script");d.src="https://cdnjs.cloudflare.com/ajax/libs/js-yaml/4.1.0/js-yaml.min.js",d.async=!0,d.onload=()=>i(window.jsyaml),d.onerror=()=>e(new Error("无法加载YAML解析库")),document.head.appendChild(d)});class H{constructor(e){this.data=e,this.version=null,this.subjects=[],this.schedules=[],this._parseData()}_parseData(){if(!this.data)return;this.version=this.data.version||1;const e=this.data.subjects||[];for(const o of e)this.subjects.push({name:o.name,simplified_name:o.simplified_name||null,teacher:o.teacher||null,room:o.room||null});const d=this.data.schedules||[];for(const o of d){const t=[];for(const a of o.classes||[])t.push({subject:a.subject,start_time:a.start_time,end_time:a.end_time});this.schedules.push({name:o.name,enable_day:o.enable_day,weeks:o.weeks||"all",classes:t})}}getSubjects(){return this.subjects}getSchedules(){return this.schedules}getScheduleByDay(e){const d=this.schedules.find(o=>o.enable_day===e);return d?d.classes:[]}toCsesData(){return{version:this.version,subjects:this.subjects,schedules:this.schedules}}}const ae={name:"Cses2Wakeup",data(){return{activeTab:"text",file:null,jsonText:"",loading:!1,error:"",success:"",processedData:null,selectedRows:[],exportPeriods:[],selectedDays:[1,2,3,4,5,6,7],formatMode:"auto",yamlLibLoaded:!1,activeDay:null,subjectColors:{数学:"blue",语文:"red",英语:"green",物理:"purple",化学:"orange",生物:"teal",历史:"brown",地理:"indigo",政治:"pink",体育:"cyan",自习:"grey",早读:"amber",班会:"deep-purple",听力:"light-blue",信息技术:"light-green"},settings:{hideTeacherName:!1,hideRoom:!1,totalWeeks:30},tableHeaders:[{title:"",key:"data-table-select"},{title:"节次",key:"period"},{title:"周一",key:"1"},{title:"周二",key:"2"},{title:"周三",key:"3"},{title:"周四",key:"4"},{title:"周五",key:"5"},{title:"周六",key:"6"},{title:"周日",key:"7"}],timeTableHeaders:[{title:"节次",key:"period"},{title:"课程",key:"subject"},{title:"星期",key:"day"},{title:"开始时间",key:"startTime"},{title:"结束时间",key:"endTime"},{title:"教师",key:"teacher"},{title:"教室",key:"room"},{title:"周次",key:"weeks"}],dayNames:{1:"周一",2:"周二",3:"周三",4:"周四",5:"周五",6:"周六",7:"周日"}}},computed:{timeTableData(){if(!this.processedData||!this.processedData.tableData)return[];const i=[],e=this.processedData.tableData.filter(o=>this.exportPeriods.includes(o.period)),d={};return e.sort((o,t)=>o.period-t.period).forEach((o,t)=>{d[o.period]=t+1}),e.forEach(o=>{for(let t=1;t<=7;t++){if(!this.selectedDays.includes(t))continue;const a=o[t];if(a)if(Array.isArray(a))a.forEach(s=>{!s||!s.name||i.push({originalPeriod:o.period,period:d[o.period],subject:s.name,day:this.dayNames[t],startTime:s.startTime,endTime:s.endTime,teacher:this.settings.hideTeacherName?"":s.teacher||"",room:this.settings.hideRoom?"":s.room||"",weeks:s.weekType?`1-${this.settings.totalWeeks}${s.weekType}`:`1-${this.settings.totalWeeks}`})});else{if(!a.name)continue;i.push({originalPeriod:o.period,period:d[o.period],subject:a.name,day:this.dayNames[t],startTime:a.startTime,endTime:a.endTime,teacher:this.settings.hideTeacherName?"":a.teacher||"",room:this.settings.hideRoom?"":a.room||"",weeks:a.weekType?`1-${this.settings.totalWeeks}${a.weekType}`:`1-${this.settings.totalWeeks}`})}}}),i.sort((o,t)=>{if(o.period!==t.period)return o.period-t.period;const a={周一:1,周二:2,周三:3,周四:4,周五:5,周六:6,周日:7};return a[o.day]-a[t.day]})},hasExportData(){return this.processedData&&this.exportPeriods.length>0},totalClassHours(){return this.timeTableData.length},daysWithSchedule(){const i=[];for(let e=1;e<=7;e++)this.selectedDays.includes(e)&&this.getDaySchedule(e).length>0&&i.push(e);return i}},async mounted(){try{await F(),this.yamlLibLoaded=!0}catch(i){this.error=i.message}this.$watch("daysWithSchedule",i=>{i.length>0&&!this.activeDay&&(this.activeDay=i[0])})},methods:{async handleFileChange(){if(this.resetData(),!this.file)return;const i=this.file.name.toLowerCase();if(i.endsWith(".json")||i.endsWith(".js"))this.formatMode="json";else if((i.endsWith(".yml")||i.endsWith(".yaml"))&&(this.formatMode="yaml",!this.yamlLibLoaded))try{await F(),this.yamlLibLoaded=!0}catch(e){this.error=`无法加载YAML解析库: ${e.message}`;return}try{const e=new FileReader;e.onload=async d=>{try{this.jsonText=d.target.result,await this.processInput()}catch(o){this.error=`文件读取失败: ${o.message}`}},e.onerror=()=>{this.error="文件读取失败"},e.readAsText(this.file)}catch(e){this.error=`文件处理失败: ${e.message}`}},handleTextChange(){this.resetData()},resetData(){this.error="",this.success="",this.processedData=null,this.selectedRows=[],this.exportPeriods=[]},async processInput(){if(!this.jsonText&&!this.file){this.error="请粘贴文本或上传文件";return}this.loading=!0,this.error="",this.success="";try{await this.$nextTick();let i;try{if(this.formatMode==="yaml"||this.formatMode==="auto"&&this.isYaml(this.jsonText)){const d=this.parseYaml(this.jsonText);i=new H(d).toCsesData()}else i=JSON.parse(this.jsonText)}catch(d){throw new Error(`格式解析错误: ${d.message}`)}if(!this.validateCsesFormat(i))throw new Error("不是有效的CSES格式数据");const e=this.processCsesData(i);this.processedData=e,this.selectedDays=[1,2,3,4,5],this.success="数据处理成功!",e.tableData&&e.tableData.length>0&&(this.selectedRows=[...e.tableData],this.exportPeriods=e.tableData.map(d=>d.period))}catch(i){this.error="数据处理失败:"+i.message,console.error(i)}finally{this.loading=!1}},validateCsesFormat(i){return i instanceof H?i.version===1&&Array.isArray(i.subjects)&&Array.isArray(i.schedules):!(!i||typeof i!="object"||i.version!==1||!Array.isArray(i.subjects)||!Array.isArray(i.schedules))},processCsesData(i){const{schedules:e,subjects:d}=i,o=Object.fromEntries(d.map(s=>[s.name,s])),t=[];let a=0;e.forEach(s=>{s.classes&&s.classes.length>a&&(a=s.classes.length)});for(let s=1;s<=a;s++)t.push({period:s,1:null,2:null,3:null,4:null,5:null,6:null,7:null});return e.forEach(s=>{const m=s.enable_day;if(!m||m<1||m>7)return;let f="";s.weeks==="odd"?f="单":s.weeks==="even"&&(f="双"),s.classes.forEach((y,T)=>{if(!y.subject)return;const w=T+1;if(w>a)return;const _=o[y.subject]||{},A={name:y.subject,teacher:_.teacher||"",room:_.room||"",period:w,startTime:y.start_time,endTime:y.end_time,day:m,weekType:f},S=t[w-1][m];S?f&&S.weekType&&f!==S.weekType?(Array.isArray(t[w-1][m])||(t[w-1][m]=[S]),t[w-1][m].push(A)):f===S.weekType?t[w-1][m]=A:f||(t[w-1][m]=A):t[w-1][m]=A})}),{tableData:t,originalData:i}},updateSelectedPeriods(i){this.exportPeriods=[],i&&i.length>0&&(this.exportPeriods=[...new Set(i.filter(e=>e&&typeof e.period=="number").map(e=>e.period))])},getTimeTableData(){return this.timeTableData},downloadCSV(){var t;if(!((t=this.processedData)!=null&&t.tableData)){this.error="没有可下载的数据";return}if(this.exportPeriods.length===0){this.error="请至少选择一节要导出的课";return}if(this.daysWithSchedule.length===0||this.totalClassHours===0){this.error="没有课程数据可导出";return}let i=`课程名称,星期,开始节数,结束节数,老师,地点,周数
|
|
`;for(const a of this.daysWithSchedule){const s=this.groupByPeriod(this.getDaySchedule(a));for(const m of s)for(const f of m.items){const y={周一:1,周二:2,周三:3,周四:4,周五:5,周六:6,周日:7}[f.day],T=this.settings.hideTeacherName?"":f.teacher||"",w=this.settings.hideRoom?"":f.room||"";i+=`${f.subject},${y},${f.period},${f.period},${T},${w},${f.weeks}
|
|
`}}const e="\uFEFF",d=new Blob([e+i],{type:"text/csv;charset=utf-8"}),o=document.createElement("a");o.href=URL.createObjectURL(d),o.download=`course_schedule_${this.totalClassHours}课时.csv`,o.click(),URL.revokeObjectURL(o.href),this.success=`导出成功!共计 ${this.totalClassHours} 课时`},showExportPreview(){if(!this.hasExportData){this.error="请先选择要导出的节次";return}const i=this.timeTableData.slice(0,5).map(e=>`${e.subject} (${e.day} 第${e.period}节)`).join(`
|
|
`);this.timeTableData.length>5?this.success=`导出预览 (共${this.totalClassHours}课时):
|
|
${i}
|
|
...等${this.totalClassHours-5}节课程`:this.success=`导出预览 (共${this.totalClassHours}课时):
|
|
${i}`,this.$nextTick(()=>{this.daysWithSchedule.length>0&&!this.activeDay&&(this.activeDay=this.daysWithSchedule[0])})},isYaml(i){const e=i.trim();if(e.startsWith("{")||e.startsWith("["))try{return JSON.parse(e),!1}catch{}return/^\s*[a-zA-Z0-9_-]+\s*:/.test(e)||/\n\s*[a-zA-Z0-9_-]+\s*:/.test(e)},parseYaml(i){try{if(typeof window.jsyaml<"u")return window.jsyaml.load(i);throw new Error("YAML解析器未加载")}catch(e){throw new Error(`YAML解析错误: ${e.message}`)}},getDaySchedule(i){return this.timeTableData?this.getUnfilteredTimeTableData().filter(d=>({周一:1,周二:2,周三:3,周四:4,周五:5,周六:6,周日:7})[d.day]===i):[]},getUnfilteredTimeTableData(){if(!this.processedData||!this.processedData.tableData)return[];const i=[],e=this.processedData.tableData.filter(o=>this.exportPeriods.includes(o.period)),d={};return e.sort((o,t)=>o.period-t.period).forEach((o,t)=>{d[o.period]=t+1}),e.forEach(o=>{for(let t=1;t<=7;t++){const a=o[t];if(a)if(Array.isArray(a))a.forEach(s=>{!s||!s.name||i.push({originalPeriod:o.period,period:d[o.period],subject:s.name,day:this.dayNames[t],startTime:s.startTime,endTime:s.endTime,teacher:this.settings.hideTeacherName?"":s.teacher||"",room:this.settings.hideRoom?"":s.room||"",weeks:s.weekType?`1-${this.settings.totalWeeks}${s.weekType}`:`1-${this.settings.totalWeeks}`})});else{if(!a.name)continue;i.push({originalPeriod:o.period,period:d[o.period],subject:a.name,day:this.dayNames[t],startTime:a.startTime,endTime:a.endTime,teacher:this.settings.hideTeacherName?"":a.teacher||"",room:this.settings.hideRoom?"":a.room||"",weeks:a.weekType?`1-${this.settings.totalWeeks}${a.weekType}`:`1-${this.settings.totalWeeks}`})}}}),i.sort((o,t)=>{if(o.period!==t.period)return o.period-t.period;const a={周一:1,周二:2,周三:3,周四:4,周五:5,周六:6,周日:7};return a[o.day]-a[t.day]})},groupByPeriod(i){const e={};return i.forEach(d=>{e[d.period]||(e[d.period]={period:d.period,originalPeriod:d.originalPeriod,items:[],timeSlots:[]}),e[d.period].items.push(d),e[d.period].timeSlots.push({startTime:d.startTime,endTime:d.endTime})}),Object.values(e).forEach(d=>{d.uniqueTimeSlots=[],d.timeSlots.forEach(o=>{d.uniqueTimeSlots.some(t=>t.startTime===o.startTime&&t.endTime===o.endTime)||d.uniqueTimeSlots.push(o)}),d.uniqueTimeSlots.sort((o,t)=>o.startTime.localeCompare(t.startTime))}),Object.values(e).sort((d,o)=>d.period-o.period)},formatTime(i){return i?i.substring(0,5):""},getSubjectColor(i){return this.subjectColors[i]||"grey"},selectAllDays(){this.selectedDays=[1,2,3,4,5,6,7]},clearSelectedDays(){this.selectedDays=[]}}},oe={class:"d-flex align-center"},ne={class:"d-flex align-center"},de={key:2,class:"text-caption mb-2"},ue={class:"d-flex align-center mb-2"},me={class:"d-flex align-center mb-3"},ce={class:"d-flex align-center mb-3"},pe={key:0,class:"course-cell"},he={key:0},fe={key:1},ye={key:2,class:"week-type"},be={key:0},ge={key:1},ke={key:2,class:"week-type"},Te={class:"text-center font-weight-bold"};function De(i,e,d,o,t,a){return u(),g(ie,{class:"fill-height"},{default:l(()=>[r(R,null,{default:l(()=>[r(C,{cols:"12"},{default:l(()=>[r(j,{class:"elevation-12",border:""},{default:l(()=>[r(N,{class:"d-flex align-center primary lighten-1 white--text py-3 px-4"},{default:l(()=>[r(k,{color:"white",class:"mr-2"},{default:l(()=>[...e[15]||(e[15]=[n(" mdi-swap-horizontal ",-1)])]),_:1}),e[16]||(e[16]=n(" 课程表转换工具 ",-1))]),_:1}),r(I,null,{default:l(()=>[...e[17]||(e[17]=[n(" 将CSES格式的JSON或YAML文本转换为WakeUp软件使用的课程表 ",-1)])]),_:1}),r(P,null,{default:l(()=>[t.error?(u(),g(E,{key:0,type:"error",class:"mb-4 mt-3 mx-2",variant:"tonal",border:"start",closable:"","onClick:close":e[0]||(e[0]=s=>t.error="")},{default:l(()=>[c("div",oe,[r(k,{class:"mr-2"},{default:l(()=>[...e[18]||(e[18]=[n(" mdi-alert-circle ",-1)])]),_:1}),n(" "+p(t.error),1)])]),_:1})):b("",!0),t.success?(u(),g(E,{key:1,type:"success",class:"mb-4 mt-3 mx-2",variant:"tonal",border:"start",closable:"","onClick:close":e[1]||(e[1]=s=>t.success="")},{default:l(()=>[c("div",ne,[r(k,{class:"mr-2"},{default:l(()=>[...e[19]||(e[19]=[n(" mdi-check-circle ",-1)])]),_:1}),n(" "+p(t.success),1)])]),_:1})):b("",!0),r(U,{modelValue:t.activeTab,"onUpdate:modelValue":e[2]||(e[2]=s=>t.activeTab=s),class:"mb-4 mx-2",color:"primary",rounded:""},{default:l(()=>[r(W,{value:"text",class:"px-5"},{default:l(()=>[r(k,{start:""},{default:l(()=>[...e[20]||(e[20]=[n(" mdi-text-box ",-1)])]),_:1}),e[21]||(e[21]=n(" 文本粘贴 ",-1))]),_:1}),r(W,{value:"file",class:"px-5"},{default:l(()=>[r(k,{start:""},{default:l(()=>[...e[22]||(e[22]=[n(" mdi-file-upload ",-1)])]),_:1}),e[23]||(e[23]=n(" 文件上传 ",-1))]),_:1})]),_:1},8,["modelValue"]),r(q,{modelValue:t.formatMode,"onUpdate:modelValue":e[3]||(e[3]=s=>t.formatMode=s),color:"primary",class:"mb-4 mx-2",mandatory:"",density:"comfortable",border:"",rounded:""},{default:l(()=>[r(V,{value:"auto"},{default:l(()=>[...e[24]||(e[24]=[n(" 自动检测 ",-1)])]),_:1}),r(V,{value:"json"},{default:l(()=>[...e[25]||(e[25]=[n(" JSON ",-1)])]),_:1}),r(V,{value:"yaml",disabled:!t.yamlLibLoaded},{default:l(()=>[e[26]||(e[26]=n(" YAML ",-1)),r(L,{activator:"parent",location:"bottom"},{default:l(()=>[n(p(t.yamlLibLoaded?"YAML解析库已加载":"正在加载YAML解析库..."),1)]),_:1})]),_:1},8,["disabled"])]),_:1},8,["modelValue"]),t.jsonText&&t.formatMode==="auto"?(u(),h("div",de," 检测到的格式: "+p(a.isYaml(t.jsonText)?"YAML":"JSON"),1)):b("",!0),r(z,{modelValue:t.activeTab,"onUpdate:modelValue":e[6]||(e[6]=s=>t.activeTab=s)},{default:l(()=>[r(M,{value:"text"},{default:l(()=>[c("div",ue,[r(K,{modelValue:t.jsonText,"onUpdate:modelValue":e[4]||(e[4]=s=>t.jsonText=s),label:"粘贴JSON或YAML文本",loading:t.loading,disabled:t.loading,"row-height":"25",rows:"6",placeholder:"请在此粘贴CSES格式的数据...",onInput:a.handleTextChange},null,8,["modelValue","loading","disabled","onInput"])])]),_:1}),r(M,{value:"file"},{default:l(()=>[r(Q,{modelValue:t.file,"onUpdate:modelValue":e[5]||(e[5]=s=>t.file=s),accept:".js,.json,.yml,.yaml",label:"选择课程表文件","prepend-icon":"mdi-file-upload",loading:t.loading,disabled:t.loading,hint:"支持JSON、YAML格式文件","persistent-hint":"",rules:[s=>!s||s.size<2e6||"文件大小不能超过 2 MB"],onChange:a.handleFileChange},null,8,["modelValue","loading","disabled","rules","onChange"]),t.file&&t.formatMode==="auto"?(u(),g(E,{key:0,type:"info",class:"mb-4",variant:"tonal",density:"compact"},{default:l(()=>[...e[27]||(e[27]=[n(" 将根据文件扩展名自动检测格式 ",-1)])]),_:1})):b("",!0)]),_:1})]),_:1},8,["modelValue"]),r(C,{cols:"12"},{default:l(()=>[r(j,{flat:"",class:"pa-4 rounded-lg",border:""},{default:l(()=>[c("div",me,[r(k,{color:"primary",class:"mr-2"},{default:l(()=>[...e[28]||(e[28]=[n(" mdi-calendar-multiselect ",-1)])]),_:1}),e[33]||(e[33]=c("h3",{class:"text-subtitle-1 font-weight-medium mr-auto"}," 选择导出天数 ",-1)),r(V,{variant:"text",color:"primary",class:"ml-2",onClick:a.selectAllDays},{default:l(()=>[r(k,{start:"",size:"small"},{default:l(()=>[...e[29]||(e[29]=[n(" mdi-checkbox-multiple-marked ",-1)])]),_:1}),e[30]||(e[30]=n(" 全选 ",-1))]),_:1},8,["onClick"]),r(V,{variant:"text",color:"error",class:"ml-2",onClick:a.clearSelectedDays},{default:l(()=>[r(k,{start:"",size:"small"},{default:l(()=>[...e[31]||(e[31]=[n(" mdi-checkbox-multiple-blank-outline ",-1)])]),_:1}),e[32]||(e[32]=n(" 清除 ",-1))]),_:1},8,["onClick"])]),r($,{modelValue:t.selectedDays,"onUpdate:modelValue":e[7]||(e[7]=s=>t.selectedDays=s),multiple:"",class:"mb-2",color:"primary"},{default:l(()=>[(u(),h(D,null,x(7,s=>r(v,{key:s,value:s,filter:"",variant:"tonal",class:"filter-chip",label:""},{default:l(()=>[n(p(t.dayNames[s])+" ",1),a.getDaySchedule(s).length>0?(u(),g(Y,{key:0,content:a.getDaySchedule(s).length,color:"primary",inline:""},null,8,["content"])):b("",!0)]),_:2},1032,["value"])),64))]),_:1},8,["modelValue"])]),_:1})]),_:1}),r(C,{cols:"12"},{default:l(()=>[r(j,{flat:"",class:"pa-4 rounded-lg",border:""},{default:l(()=>[c("div",ce,[r(k,{color:"primary",class:"mr-2"},{default:l(()=>[...e[34]||(e[34]=[n(" mdi-cog ",-1)])]),_:1}),e[35]||(e[35]=c("h3",{class:"text-subtitle-1 font-weight-medium"}," 显示配置 ",-1))]),r(R,null,{default:l(()=>[r(C,{cols:"12",sm:"6"},{default:l(()=>[r(O,{modelValue:t.settings.hideTeacherName,"onUpdate:modelValue":e[8]||(e[8]=s=>t.settings.hideTeacherName=s),label:"不显示教师姓名",color:"primary",inset:"","hide-details":""},null,8,["modelValue"])]),_:1}),r(C,{cols:"12",sm:"6"},{default:l(()=>[r(O,{modelValue:t.settings.hideRoom,"onUpdate:modelValue":e[9]||(e[9]=s=>t.settings.hideRoom=s),label:"不显示教室信息",color:"primary",inset:"","hide-details":""},null,8,["modelValue"])]),_:1}),r(C,{cols:"12",sm:"6"},{default:l(()=>[r(ee,{modelValue:t.settings.totalWeeks,"onUpdate:modelValue":e[10]||(e[10]=s=>t.settings.totalWeeks=s),modelModifiers:{number:!0},label:"总周数",type:"number",min:"1",max:"30",rules:[s=>s>0||"周数必须大于0"],density:"comfortable",variant:"outlined","prepend-inner-icon":"mdi-calendar-week",class:"mt-3"},null,8,["modelValue","rules"])]),_:1})]),_:1})]),_:1})]),_:1}),t.loading?(u(),g(j,{key:3,class:"my-4",outlined:""},{default:l(()=>[r(P,null,{default:l(()=>[r(te,{type:"table",class:"mx-auto"})]),_:1})]),_:1})):b("",!0),t.processedData?(u(),g(v,{key:4,color:"primary",class:"ml-2","prepend-icon":"mdi-book-open-variant"},{default:l(()=>[n(p(t.processedData.tableData.length)+" 节课程 ",1)]),_:1})):b("",!0),t.processedData&&t.exportPeriods.length===0?(u(),g(E,{key:5,type:"warning",class:"mb-4",closable:""},{default:l(()=>[...e[36]||(e[36]=[n(" 请选择要导出的节次 ",-1)])]),_:1})):b("",!0),t.processedData?(u(),g(j,{key:6,class:"my-4",elevation:"1"},{default:l(()=>[r(N,{class:"d-flex align-center pa-4 bg-primary-lighten-5"},{default:l(()=>[r(k,{color:"primary",class:"mr-2"},{default:l(()=>[...e[37]||(e[37]=[n(" mdi-table ",-1)])]),_:1}),e[39]||(e[39]=c("span",{class:"font-weight-bold"},"课程表",-1)),r(v,{color:"primary",class:"ml-3",size:"small",pill:""},{default:l(()=>[r(k,{start:"",size:"x-small"},{default:l(()=>[...e[38]||(e[38]=[n(" mdi-book-open-variant ",-1)])]),_:1}),n(" "+p(t.processedData.tableData.length)+" 节课程 ",1)]),_:1})]),_:1}),r(P,{class:"pa-0"},{default:l(()=>[r(se,{"items-selected":t.selectedRows,"onUpdate:itemsSelected":[e[12]||(e[12]=s=>t.selectedRows=s),a.updateSelectedPeriods],headers:t.tableHeaders,items:t.processedData.tableData,"hide-default-footer":"",class:"elevation-1","items-per-page":-1,"item-value":"period","show-select":"","select-strategy":"single-independent","sort-by":[],"disable-sort":""},le({"item.data-table-select":l(({item:s})=>[r(re,{modelValue:t.exportPeriods,"onUpdate:modelValue":e[11]||(e[11]=m=>t.exportPeriods=m),value:s.period,"hide-details":"",density:"compact"},null,8,["modelValue","value"])]),_:2},[x(7,s=>({name:`item.${s}`,fn:l(({item:m})=>[m[s]?(u(),h("div",pe,[Array.isArray(m[s])?(u(!0),h(D,{key:0},x(m[s],(f,y)=>(u(),h("div",{key:y,class:"course-item"},[n(p(f.name)+" ",1),!t.settings.hideTeacherName&&f.teacher?(u(),h("span",he,[e[40]||(e[40]=c("br",null,null,-1)),n(p(f.teacher),1)])):b("",!0),!t.settings.hideRoom&&f.room?(u(),h("span",fe,[e[41]||(e[41]=c("br",null,null,-1)),n(p(f.room),1)])):b("",!0),f.weekType?(u(),h("span",ye,p(f.weekType)+"周 ",1)):b("",!0)]))),128)):(u(),h(D,{key:1},[n(p(m[s].name)+" ",1),!t.settings.hideTeacherName&&m[s].teacher?(u(),h("span",be,[e[42]||(e[42]=c("br",null,null,-1)),n(p(m[s].teacher),1)])):b("",!0),!t.settings.hideRoom&&m[s].room?(u(),h("span",ge,[e[43]||(e[43]=c("br",null,null,-1)),n(p(m[s].room),1)])):b("",!0),m[s].weekType?(u(),h("span",ke,p(m[s].weekType)+"周 ",1)):b("",!0)],64))])):b("",!0)])}))]),1032,["items-selected","headers","items","onUpdate:itemsSelected"])]),_:1})]),_:1})):b("",!0),a.hasExportData?(u(),g(j,{key:7,class:"my-4",elevation:"1"},{default:l(()=>[r(N,{class:"d-flex align-center pa-4 bg-primary-lighten-5"},{default:l(()=>[r(k,{color:"primary",class:"mr-2"},{default:l(()=>[...e[44]||(e[44]=[n(" mdi-timetable ",-1)])]),_:1}),e[48]||(e[48]=c("span",{class:"font-weight-bold"},"每日课程时间表",-1)),r(v,{class:"ml-3",size:"small",color:"primary",pill:""},{default:l(()=>[r(k,{start:"",size:"x-small"},{default:l(()=>[...e[45]||(e[45]=[n(" mdi-clock-outline ",-1)])]),_:1}),n(" "+p(a.totalClassHours)+" 课时 ",1)]),_:1}),t.exportPeriods.length>0?(u(),g(L,{key:0},{activator:l(({props:s})=>[r(v,B({class:"ml-2",size:"small",color:"info"},s,{pill:""}),{default:l(()=>[r(k,{start:"",size:"x-small"},{default:l(()=>[...e[46]||(e[46]=[n(" mdi-information-outline ",-1)])]),_:1}),e[47]||(e[47]=n(" 节次已重排 ",-1))]),_:1},16)]),default:l(()=>[c("span",null,"已将选中的节次 "+p(t.exportPeriods.join(", "))+" 重新排序为连续的 1-"+p(t.exportPeriods.length),1)]),_:1})):b("",!0)]),_:1}),r(P,null,{default:l(()=>[a.daysWithSchedule.length>0?(u(),g(U,{key:0,modelValue:t.activeDay,"onUpdate:modelValue":e[13]||(e[13]=s=>t.activeDay=s),class:"mb-4",color:"primary",grow:"","align-tabs":"center"},{default:l(()=>[(u(!0),h(D,null,x(a.daysWithSchedule,s=>(u(),g(W,{key:s,value:s,class:"px-2 font-weight-medium"},{default:l(()=>[n(p(t.dayNames[s])+" ",1),r(Y,{content:a.getDaySchedule(s).length,color:"primary",inline:""},null,8,["content"])]),_:2},1032,["value"]))),128))]),_:1},8,["modelValue"])):b("",!0),r(z,{modelValue:t.activeDay,"onUpdate:modelValue":e[14]||(e[14]=s=>t.activeDay=s)},{default:l(()=>[(u(!0),h(D,null,x(a.daysWithSchedule,s=>(u(),g(M,{key:s,value:s},{default:l(()=>[r(X,{density:"compact",class:"rounded","headers-length":6,"disable-sort":""},{default:l(()=>[e[50]||(e[50]=c("thead",null,[c("tr",null,[c("th",{class:"text-center"}," 节次 "),c("th",null,"课程"),c("th",null,"时间"),c("th",null,"教师"),c("th",null,"教室"),c("th",null,"周次")])],-1)),c("tbody",null,[(u(!0),h(D,null,x(a.groupByPeriod(a.getDaySchedule(s)),(m,f)=>(u(),h("tr",{key:f},[c("td",Te,[n(p(m.period)+" ",1),m.originalPeriod!==m.period?(u(),g(L,{key:0},{activator:l(({props:y})=>[r(k,B({size:"x-small"},{ref_for:!0},y,{color:"info",class:"ml-1"}),{default:l(()=>[...e[49]||(e[49]=[n(" mdi-sync ",-1)])]),_:1},16)]),default:l(()=>[n(" 原节次: "+p(m.originalPeriod),1)]),_:2},1024)):b("",!0)]),c("td",null,[(u(!0),h(D,null,x(m.items,(y,T)=>(u(),h("div",{key:T,class:"mb-1"},[r(v,{size:"small",color:a.getSubjectColor(y.subject),label:"","text-color":"white",class:"mr-1"},{default:l(()=>[n(p(y.subject),1)]),_:2},1032,["color"]),m.items.length>1?(u(),g(v,{key:0,size:"x-small",class:"ml-1",color:y.weekType==="单"?"warning":"success"},{default:l(()=>[n(p(y.weekType)+"周 ",1)]),_:2},1032,["color"])):b("",!0)]))),128))]),c("td",null,[(u(!0),h(D,null,x(m.uniqueTimeSlots,(y,T)=>(u(),h("div",{key:T,class:"mb-1"},[r(v,{size:"x-small",class:"time-chip"},{default:l(()=>[n(p(a.formatTime(y.startTime))+" - "+p(a.formatTime(y.endTime)),1)]),_:2},1024)]))),128))]),c("td",null,[t.settings.hideTeacherName?(u(),h(D,{key:1},[n(" - ")],64)):(u(!0),h(D,{key:0},x(m.items,(y,T)=>(u(),h("div",{key:T,class:"mb-1"},p(y.teacher||"-"),1))),128))]),c("td",null,[t.settings.hideRoom?(u(),h(D,{key:1},[n(" - ")],64)):(u(!0),h(D,{key:0},x(m.items,(y,T)=>(u(),h("div",{key:T,class:"mb-1"},p(y.room||"-"),1))),128))]),c("td",null,[(u(!0),h(D,null,x(m.items,(y,T)=>(u(),h("div",{key:T,class:"mb-1"},p(y.weeks),1))),128))])]))),128))])]),_:2},1024)]),_:2},1032,["value"]))),128))]),_:1},8,["modelValue"]),a.hasExportData&&a.daysWithSchedule.length===0?(u(),g(E,{key:1,type:"info",class:"mt-3"},{default:l(()=>[...e[51]||(e[51]=[n(" 没有找到任何课程数据 ",-1)])]),_:1})):b("",!0)]),_:1})]),_:1})):b("",!0)]),_:1}),r(Z,{class:""},{default:l(()=>[r(G),r(V,{color:"primary",variant:"outlined",loading:t.loading,disabled:!t.jsonText&&!t.file||t.loading,"prepend-icon":"mdi-cog-refresh",onClick:a.processInput},{default:l(()=>[...e[52]||(e[52]=[n(" 处理数据 ",-1)])]),_:1},8,["loading","disabled","onClick"]),r(V,{color:"info",disabled:!a.hasExportData,class:"ml-2","prepend-icon":"mdi-eye",border:"",onClick:a.showExportPreview},{default:l(()=>[...e[53]||(e[53]=[n(" 刷新 ",-1)])]),_:1},8,["disabled","onClick"]),r(V,{color:"success",variant:"outlined",disabled:!a.hasExportData,class:"ml-2","prepend-icon":"mdi-download",border:"",onClick:a.downloadCSV},{default:l(()=>[...e[54]||(e[54]=[n(" 下载CSV ",-1)])]),_:1},8,["disabled","onClick"])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})}const He=J(ae,[["render",De],["__scopeId","data-v-7ebae639"]]);export{He as default};
|