import{d as ee}from"./dataProvider-D5waPBEc.js";import{x as Ve,H as $e,C as _e,f as ue,ag as te,h as z,b as Se,av as je,a as De,_ as Ue,e as Ce,c as Pe,g as K,i as ae,d as Te,j as ne,p as se,q as oe,r as le,t as ie,l as Ee,k as Ae}from"./index-Ceq_468-.js";import{f as Ie,h as Me,a0 as de,u as Be,s as Fe,p as Le,I as Ne,m as ze,k as Re}from"./vendor-vuetify-rtu3DHX4.js";import{V as Oe}from"./VTextField-DpXLMPq7.js";import{V as W}from"./VAlert-C02HdytA.js";import{V as re}from"./VCheckboxBtn-snLiE5D5.js";import{V as L}from"./VChip-BdtDOEwz.js";import{k as b,F as A,j as r,N as Ye,n as Ke,o as We,X as g,Y as x,Z as m,a1 as k,S as w,_ as E,$ as D,a2 as N,u as qe,b as U,e as C}from"./vendor-vue-BiQC5iF7.js";import{V as He}from"./VFileInput-D2ZU5WsA.js";import{V as Je,a as Xe,b as Ze,c as Ge}from"./VExpansionPanels-DbwaqF41.js";import{V as Qe}from"./VSelect-OEnAsVY5.js";import"./vendor-utils-2lvrqI0-.js";import"./serverRotation-Bs3NH0Jb.js";import"./VSwitch-d4Yvphn0.js";import"./VMenu-DqtPWEMI.js";import"./VSheet-MW0wxrpj.js";const I={subjectMax:200,contentMax:2e3,tagMax:50,tagCountMax:20};class M extends Error{constructor(c){super(c.join(";")),this.name="UafExportValidationError",this.issues=c}}function O(e){if(/^\d{8}$/.test(e))return`${e.slice(0,4)}-${e.slice(4,6)}-${e.slice(6,8)}`;if(/^\d{4}-\d{2}-\d{2}$/.test(e))return e;if(/^\d{4}-\d{2}-\d{2}T/.test(e)&&!Number.isNaN(Date.parse(e)))return e.slice(0,10);throw new M([`日期 ${e||"(空)"} 不是有效的 YYYYMMDD 或 YYYY-MM-DD 格式`])}function ce(e){return O(e).replaceAll("-","")}function R(e){return Array.isArray(e)?e.map(c=>String(c)):[]}function me(e,c=e.subject||"作业"){const o=[];e.subject||o.push(`${c}:科目名称不能为空`),e.subject.length>I.subjectMax&&o.push(`${c}:科目名称超过 ${I.subjectMax} 个字符`);try{O(e.date)}catch(a){o.push(...a.issues.map(u=>`${c}:${u}`))}return e.content||o.push(`${c}:正文不能为空`),e.content.length>I.contentMax&&o.push(`${c}:正文超过 ${I.contentMax} 个字符`),e.tags.length>I.tagCountMax&&o.push(`${c}:标签超过 ${I.tagCountMax} 个`),e.tags.some(a=>!a||a.length>I.tagMax||a.includes(";"))&&o.push(`${c}:包含无效标签`),o}function et(e,c){const o=O(c);return e.filter(a=>a&&(a.type==="homework"||a.type==="custom")).filter(a=>typeof a.content=="string"&&a.content.trim().length>0).map((a,u)=>{const f={subject:String(a.name||"").trim(),date:o,content:a.content,tags:R(a.tags)},d=me(f,f.subject||`第 ${u+1} 张卡片`);return{id:`${a.key||u}-${u}`,assignment:f,selected:d.length===0,issues:d}})}function tt(e,c=[]){var u,f;const o=(e==null?void 0:e.homework)||{},a=[];for(const d of c){const s=o[d.name];(u=s==null?void 0:s.content)!=null&&u.trim()&&a.push({key:d.name,name:d.name,type:"homework",content:s.content,tags:R(s.tags),order:d.order??0})}for(const[d,s]of Object.entries(o))d.startsWith("custom-")&&((f=s==null?void 0:s.content)!=null&&f.trim())&&a.push({key:d,name:s.name,type:"custom",content:s.content,tags:R(s.tags),order:9999});return a.sort((d,s)=>d.order-s.order)}async function fe(){return Ve(()=>import("./browser-BcesygxY.js"),[],import.meta.url)}async function at(e){var f;if(!e||!((f=e.name)!=null&&f.toLowerCase().endsWith(".pdf")))throw new M(["请选择 UAF PDF 文件"]);const c=new Uint8Array(await e.arrayBuffer()),{validateUafPdf:o,extractUafPayload:a}=await fe(),u=await o(c);if(!u.valid)throw new M(u.errors.length?u.errors:["文件不是有效的 UAF PDF"]);return u.payload||a(c)}async function nt(e,c,o){const a=new Set(c.map(s=>s.name)),u=[...new Set(e.map(s=>ce(s.date)))],f=new Map;for(const s of u)f.set(s,await o(s));return{rows:e.map((s,l)=>{var P,V,S;const p=ce(s.date),y=f.get(p),$=a.has(s.subject);let v=$?s.subject:null;$||(v=Object.keys(y.homework||{}).find(T=>{var j;return T.startsWith("custom-")&&((j=y.homework[T])==null?void 0:j.name)===s.subject}));const _=!!(v&&((S=(V=(P=y.homework)==null?void 0:P[v])==null?void 0:V.content)!=null&&S.trim()));return{id:`uaf-import-${l}`,index:l,date:p,assignment:{...s,tags:R(s.tags)},targetType:$?"homework":"custom",targetKey:v,conflict:_,action:_?"keep":"import"}}),boards:f}}function pe(e){const c=[],o=new Map;for(const a of e){if(a.action==="keep")continue;const u=a.targetKey?`${a.date}:${a.targetKey}`:null;u&&o.has(u)&&c.push(`${a.date} 的“${a.assignment.subject}”有多条记录指向同一卡片`),u&&o.set(u,a.id)}return c}async function st(e,c){const o=pe(e.rows);if(o.length)throw new M(o);const a=new Set;let u=0,f=0;for(const l of e.rows){if(l.action==="keep"){f+=1;continue}const p=e.boards.get(l.date);if(p.homework||(p.homework={}),l.targetType==="homework")p.homework[l.assignment.subject]={...p.homework[l.assignment.subject]||{},content:l.assignment.content,tags:l.assignment.tags};else if(l.targetKey)p.homework[l.targetKey]={...p.homework[l.targetKey],name:l.assignment.subject,type:"custom",content:l.assignment.content,tags:l.assignment.tags};else{const y=`custom-uaf-${Date.now()}-${l.index}`;p.homework[y]={name:l.assignment.subject,type:"custom",content:l.assignment.content,tags:l.assignment.tags}}u+=1,a.add(l.date)}const d=[],s=[];for(const l of a)try{await c(l,e.boards.get(l)),d.push(l)}catch(p){s.push({date:l,error:p})}return{imported:u,skipped:f,savedDates:d,failedDates:s}}async function ot(e,c){if(!e.length)throw new M(["请至少选择一项作业"]);const o=e.flatMap(v=>me(v));if(o.length)throw new M(o);const{createUafPdf:a}=await fe(),u="./",f=new URL(`${u}uaf/NotoSansSC-Regular.otf`,window.location.origin),d=new URL(`${u}uaf/hb-subset.wasm`,window.location.origin),s=await a(e,{fontUrl:f,wasmUrl:d,theme:"classworks-dark"}),l=new window.Blob([s],{type:"application/pdf"}),p=URL.createObjectURL(l),y=document.createElement("a"),$=O(c);return y.href=p,y.download=`Classworks-作业-${$}.uaf.pdf`,document.body.appendChild(y),y.click(),y.remove(),window.setTimeout(()=>URL.revokeObjectURL(p),1e3),y.download}const lt=Le({actionText:String,bgColor:String,color:String,icon:Ne,image:String,justify:{type:String,default:"center"},headline:String,title:String,text:String,textWidth:{type:[Number,String],default:500},href:String,to:String,...Re(),...De(),...je({size:void 0}),...ze()},"VEmptyState"),it=Ie()({name:"VEmptyState",props:lt(),emits:{"click:action":e=>!0},setup(e,c){let{emit:o,slots:a}=c;const{themeClasses:u}=Me(e),{backgroundColorClasses:f,backgroundColorStyles:d}=$e(()=>e.bgColor),{dimensionStyles:s}=Se(e),{displayClasses:l}=de();function p(y){o("click:action",y)}return Be(()=>{var S,T,j;const y=!!(a.actions||e.actionText),$=!!(a.headline||e.headline),v=!!(a.title||e.title),_=!!(a.text||e.text),P=!!(a.media||e.image||e.icon),V=e.size||(e.image?200:96);return b("div",{class:Ke(["v-empty-state",{[`v-empty-state--${e.justify}`]:!0},u.value,f.value,l.value,e.class]),style:Ye([d.value,s.value,e.style])},[P&&b("div",{key:"media",class:"v-empty-state__media"},[a.media?r(te,{key:"media-defaults",defaults:{VImg:{src:e.image,height:V},VIcon:{size:V,icon:e.icon}}},{default:()=>[a.media()]}):b(A,null,[e.image?r(_e,{key:"image",src:e.image,height:V},null):e.icon?r(ue,{key:"icon",color:e.color,size:V,icon:e.icon},null):void 0])]),$&&b("div",{key:"headline",class:"v-empty-state__headline"},[((S=a.headline)==null?void 0:S.call(a))??e.headline]),v&&b("div",{key:"title",class:"v-empty-state__title"},[((T=a.title)==null?void 0:T.call(a))??e.title]),_&&b("div",{key:"text",class:"v-empty-state__text",style:{maxWidth:Fe(e.textWidth)}},[((j=a.text)==null?void 0:j.call(a))??e.text]),a.default&&b("div",{key:"content",class:"v-empty-state__content"},[a.default()]),y&&b("div",{key:"actions",class:"v-empty-state__actions"},[r(te,{defaults:{VBtn:{class:"v-empty-state__action-btn",color:e.color??"surface-variant",href:e.href,text:e.actionText,to:e.to}}},{default:()=>{var B;return[((B=a.actions)==null?void 0:B.call(a,{props:{onClick:p}}))??r(z,{onClick:p},null)]}})])])}),{}}}),rt={key:2,class:"d-flex align-center mb-2"},ct={class:"text-caption text-medium-emphasis"},ut={class:"d-flex flex-wrap align-center mt-1 ga-1"},dt={key:0,class:"text-caption text-error"},mt={class:"text-body-2 mb-3"},ft={class:"text-caption text-medium-emphasis ml-2"},pt={__name:"UafTransferDialog",props:{modelValue:Boolean,mode:{type:String,default:"export"},currentDate:{type:String,required:!0},currentItems:{type:Array,default:()=>[]},currentBoardData:{type:Object,required:!0},subjects:{type:Array,default:()=>[]}},emits:["update:modelValue","success","error","imported"],setup(e,{emit:c}){const o=e,a=c,{mobile:u}=de(),f=C({get:()=>o.modelValue,set:t=>a("update:modelValue",t)}),d=U(""),s=U([]),l=U(""),p=U(!1),y=U(!1),$=U(null),v=U(null),_=U(""),P=U(!1),V=U(!1),S=C(()=>y.value||V.value||P.value),T=C(()=>s.value.filter(t=>t.selected).map(t=>t.assignment)),j=C(()=>s.value.filter(t=>t.issues.length===0)),B=C(()=>j.value.length>0&&j.value.every(t=>t.selected)),ve=C(()=>j.value.some(t=>t.selected)),q=C(()=>{if(!v.value)return[];const t=new Map;for(const n of v.value.rows)t.has(n.date)||t.set(n.date,[]),t.get(n.date).push(n);return[...t].map(([n,i])=>({date:n,rows:i}))}),Y=C(()=>{var t;return pe(((t=v.value)==null?void 0:t.rows)||[])}),ge=C(()=>o.mode==="export"?T.value.length===0||p.value:!v.value||Y.value.length>0||V.value),ye=C(()=>{if(o.mode==="export")return`文件日期:${d.value||"未选择"}`;if(!v.value)return"仅支持内嵌 uaf_payload.csv 的 UAF PDF";const t=v.value.rows.filter(n=>n.action!=="keep").length;return`将导入 ${t} 项,保留 ${v.value.rows.length-t} 项`});We(()=>o.modelValue,t=>{t&&(o.mode==="export"?(d.value=Q(o.currentDate),X()):($.value=null,v.value=null,_.value=""))});function H(t){return JSON.parse(JSON.stringify(t||{homework:{},attendance:{}}))}async function J(t){var i,h;if(t===o.currentDate)return H(o.currentBoardData);const n=await ee.loadData(`classworks-data-${t}`);if((n==null?void 0:n.success)===!1){if(((i=n.error)==null?void 0:i.code)==="NOT_FOUND")return{homework:{},attendance:{absent:[],late:[],exclude:[]}};throw new Error(((h=n.error)==null?void 0:h.message)||`无法读取 ${t} 的作业`)}return H(n)}async function X(){if(d.value){p.value=!0,l.value="";try{const t=d.value.replaceAll("-",""),n=t===o.currentDate?o.currentItems:tt(await J(t),o.subjects);s.value=et(n,d.value)}catch(t){s.value=[],l.value=t.message||"无法加载该日期的作业"}finally{p.value=!1}}}function he(){const t=!B.value;for(const n of j.value)n.selected=t}async function we(){y.value=!0;try{const t=await ot(T.value,d.value);a("success","导出成功",t),f.value=!1}catch(t){Z("导出失败",t)}finally{y.value=!1}}async function ke(t){const n=Array.isArray(t)?t[0]:t;if(v.value=null,_.value="",!!n){P.value=!0;try{const i=await at(n);v.value=await nt(i,o.subjects,J)}catch(i){_.value=G(i)}finally{P.value=!1}}}function xe(t){return t.conflict?[{title:"保留现有",value:"keep"},{title:"覆盖现有",value:"overwrite"}]:[{title:"导入",value:"import"},{title:"跳过",value:"keep"}]}async function be(){V.value=!0;try{const t=await st(v.value,async(n,i)=>{var F;const h=await ee.saveData(`classworks-data-${n}`,i);if((h==null?void 0:h.success)===!1)throw new Error(((F=h.error)==null?void 0:F.message)||"保存失败")});a("imported",t),t.failedDates.length?a("error","部分日期导入失败",`已保存:${t.savedDates.join("、")||"无"} 失败:${t.failedDates.map(n=>n.date).join("、")}`):(a("success","导入完成",`已导入 ${t.imported} 项,保留 ${t.skipped} 项`),f.value=!1)}catch(t){Z("导入失败",t)}finally{V.value=!1}}function Z(t,n){a("error",t,G(n))}function G(t){return t instanceof M?t.issues.join(` `):(t==null?void 0:t.message)||"发生未知错误"}function Q(t){return/^\d{8}$/.test(t)?`${t.slice(0,4)}-${t.slice(4,6)}-${t.slice(6,8)}`:t}return(t,n)=>(g(),x(Ae,{modelValue:f.value,"onUpdate:modelValue":n[5]||(n[5]=i=>f.value=i),fullscreen:qe(u),"max-width":"920",scrollable:""},{default:m(()=>[r(Ce,null,{default:m(()=>[r(Pe,{class:"d-flex align-center"},{default:m(()=>[r(ue,{icon:e.mode==="export"?"mdi-file-export-outline":"mdi-file-import-outline",class:"mr-2"},null,8,["icon"]),k(" "+w(e.mode==="export"?"导出 UAF":"导入 UAF")+" ",1),r(K),r(z,{icon:"mdi-close",variant:"text",onClick:n[0]||(n[0]=i=>f.value=!1)})]),_:1}),r(ae),r(Te,{class:"transfer-content"},{default:m(()=>[e.mode==="export"?(g(),E(A,{key:0},[r(Oe,{modelValue:d.value,"onUpdate:modelValue":[n[1]||(n[1]=i=>d.value=i),X],class:"mb-3",label:"导出日期","prepend-inner-icon":"mdi-calendar",type:"date","hide-details":"",disabled:S.value},null,8,["modelValue","disabled"]),p.value?(g(),x(ne,{key:0,class:"mb-3",indeterminate:""})):D("",!0),l.value?(g(),x(W,{key:1,class:"mb-3",type:"warning",variant:"tonal"},{default:m(()=>[k(w(l.value),1)]),_:1})):D("",!0),s.value.length?(g(),E("div",rt,[r(re,{"model-value":B.value,indeterminate:ve.value&&!B.value,onClick:he},null,8,["model-value","indeterminate"]),n[6]||(n[6]=b("span",{class:"text-body-2"},"选择全部有效作业",-1)),r(K),b("span",ct," 已选择 "+w(T.value.length)+" / "+w(s.value.length)+" 项 ",1)])):D("",!0),s.value.length?(g(),x(se,{key:3,border:"",lines:"three"},{default:m(()=>[(g(!0),E(A,null,N(s.value,i=>(g(),x(oe,{key:i.id},{prepend:m(()=>[r(re,{modelValue:i.selected,"onUpdate:modelValue":h=>i.selected=h,disabled:i.issues.length>0},null,8,["modelValue","onUpdate:modelValue","disabled"])]),default:m(()=>[r(le,null,{default:m(()=>[k(w(i.assignment.subject),1)]),_:2},1024),r(ie,{class:"content-preview"},{default:m(()=>[k(w(i.assignment.content),1)]),_:2},1024),b("div",ut,[r(L,{size:"x-small",variant:"tonal"},{default:m(()=>[k(w(i.assignment.date),1)]),_:2},1024),(g(!0),E(A,null,N(i.assignment.tags,h=>(g(),x(L,{key:h,size:"x-small",color:"primary",variant:"tonal"},{default:m(()=>[k(w(h),1)]),_:2},1024))),128)),i.issues.length?(g(),E("span",dt,w(i.issues.join(";")),1)):D("",!0)])]),_:2},1024))),128))]),_:1})):!p.value&&!l.value?(g(),x(it,{key:4,icon:"mdi-book-open-blank-variant-outline",text:"该日期没有可导出的作业",title:"暂无作业"})):D("",!0)],64)):(g(),E(A,{key:1},[r(He,{modelValue:$.value,"onUpdate:modelValue":[n[2]||(n[2]=i=>$.value=i),ke],accept:"application/pdf,.pdf",clearable:"",label:"选择 UAF PDF","prepend-icon":"mdi-file-pdf-box",disabled:S.value},null,8,["modelValue","disabled"]),P.value?(g(),x(ne,{key:0,class:"mb-3",indeterminate:""})):D("",!0),_.value?(g(),x(W,{key:1,class:"mb-3",type:"error",variant:"tonal"},{default:m(()=>[k(w(_.value),1)]),_:1})):D("",!0),Y.value.length?(g(),x(W,{key:2,class:"mb-3",type:"warning",variant:"tonal"},{default:m(()=>[k(w(Y.value.join(";")),1)]),_:1})):D("",!0),v.value?(g(),E(A,{key:3},[b("div",mt," 共 "+w(v.value.rows.length)+" 项作业,分布在 "+w(q.value.length)+" 个日期。 冲突项默认保留现有内容。 ",1),r(Je,{multiple:"",variant:"accordion"},{default:m(()=>[(g(!0),E(A,null,N(q.value,i=>(g(),x(Xe,{key:i.date},{default:m(()=>[r(Ze,null,{default:m(()=>[k(w(Q(i.date))+" ",1),r(L,{class:"ml-2",size:"small",variant:"tonal"},{default:m(()=>[k(w(i.rows.length)+" 项 ",1)]),_:2},1024)]),_:2},1024),r(Ge,null,{default:m(()=>[r(se,{lines:"three"},{default:m(()=>[(g(!0),E(A,null,N(i.rows,h=>(g(),x(oe,{key:h.id},{append:m(()=>[r(Qe,{modelValue:h.action,"onUpdate:modelValue":F=>h.action=F,class:"action-select",density:"compact","hide-details":"",items:xe(h),"item-title":"title","item-value":"value",variant:"outlined"},null,8,["modelValue","onUpdate:modelValue","items"])]),default:m(()=>[r(le,{class:"d-flex align-center"},{default:m(()=>[k(w(h.assignment.subject)+" ",1),h.conflict?(g(),x(L,{key:0,class:"ml-2",color:"warning",size:"x-small",variant:"tonal"},{default:m(()=>[...n[7]||(n[7]=[k(" 已有同名卡片 ",-1)])]),_:1})):D("",!0)]),_:2},1024),r(ie,{class:"content-preview"},{default:m(()=>[k(w(h.assignment.content),1)]),_:2},1024)]),_:2},1024))),128))]),_:2},1024)]),_:2},1024)]),_:2},1024))),128))]),_:1})],64)):D("",!0)],64))]),_:1}),r(ae),r(Ee,null,{default:m(()=>[b("span",ft,w(ye.value),1),r(K),r(z,{variant:"text",disabled:S.value,onClick:n[3]||(n[3]=i=>f.value=!1)},{default:m(()=>[...n[8]||(n[8]=[k(" 取消 ",-1)])]),_:1},8,["disabled"]),r(z,{color:"primary",disabled:ge.value,loading:S.value,"prepend-icon":e.mode==="export"?"mdi-download":"mdi-database-import-outline",onClick:n[4]||(n[4]=i=>e.mode==="export"?we():be())},{default:m(()=>[k(w(e.mode==="export"?"导出所选作业":"确认导入"),1)]),_:1},8,["disabled","loading","prepend-icon"])]),_:1})]),_:1})]),_:1},8,["modelValue","fullscreen"]))}},Pt=Ue(pt,[["__scopeId","data-v-a7cd526e"]]);export{Pt as default};