1import{d as ge,y as be,A as k,D as l,B as e,C as t,O as te,aw as il,b as d,ab as a,t as n,u as se,P as s,X as Oe,al as Je,r as Ae,n as dt,L as Me,R as it,v as N,Q as S,E as ft,c as Le,ac as Ee,V as ct,I as ue,a5 as fe,F as Ye,q as Et,a4 as Ot,w as je,at as ul}from"./@vue-BmGsfn0j.js";import{u as Ie,a as st,c as dl,b as cl}from"./vue-router-Dg7Jw2c_.js";import{Q as qt,n as ht,R as pl,S as Vt,T as ml,U as _t,j as vl,g as Ct,V as Nt,F as vt,W as fl,X as _l,Y as jt,f as Wt,Z as Tt,l as yl,J as gl,_ as Kt,O as kt,$ as bl,a0 as Gt,a1 as Rt,a2 as At,h as wl,a3 as kl,a4 as Ut,a5 as Ft,a6 as hl,a7 as $l,a8 as Vl,a9 as Cl,B as xl,aa as Dl,ab as Sl,ac as Ml,ad as Ul,c as Il,ae as Tl,af as Al,ag as zl}from"./@element-plus-CPyxi4h5.js";import{a as Ll}from"./axios-Dnk_-Q5K.js";import{E as b,a as et,b as Bt,c as nt,i as Yl}from"./element-plus-7oZcWGxi.js";import{d as de,u as pt,t as xt}from"./dayjs-CeYBYhWn.js";import{M as Jt}from"./markdown-it-C44Roubk.js";import{k as Pt}from"./katex-CmXvOE4_.js";import{i as ut}from"./echarts-DZPOz0gw.js";import{Y as Ht}from"./zrender-B4ySFyXH.js";import"./lodash-es-DPM5whWy.js";import"./@vueuse-BONkDHvq.js";import"./@popperjs-D_chPuIy.js";import"./@ctrl-r5W6hzzQ.js";import"./async-validator-9PlIezaS.js";import"./memoize-one-BdPwpGay.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./@floating-ui-BC47QiC6.js";import"./mdurl-k9Sl0PQj.js";import"./uc.micro-kMc2yuuw.js";import"./entities-C20TfXL6.js";import"./linkify-it-DmNjr4Kv.js";import"./punycode.js-Dj65hjkv.js";import"./tslib-BDyQ-Jie.js";(function(){const c=document.createElement("link").relList;if(c&&c.supports&&c.supports("modulepreload"))return;for(const y of document.querySelectorAll('link[rel="modulepreload"]'))v(y);new MutationObserver(y=>{for(const C of y)if(C.type==="childList")for(const h of C.addedNodes)h.tagName==="LINK"&&h.rel==="modulepreload"&&v(h)}).observe(document,{childList:!0,subtree:!0});function w(y){const C={};return y.integrity&&(C.integrity=y.integrity),y.referrerPolicy&&(C.referrerPolicy=y.referrerPolicy),y.crossOrigin==="use-credentials"?C.credentials="include":y.crossOrigin==="anonymous"?C.credentials="omit":C.credentials="same-origin",C}function v(y){if(y.ep)return;y.ep=!0;const C=w(y);fetch(y.href,C)}})();const El="/assets/siliconflow-DAWLKsZu.png",Rl={class:"home-container"},Fl={class:"features-section"},Bl={key:0,class:"teachers-showcase-section"},Pl={class:"showcase-content"},Hl={class:"cta-section"},Ol=ge({__name:"Home",setup(q){const c=Ie(),w=d(-1);function v(){c.push("/student?tab=dictation")}function y(){sessionStorage.getItem("token")?c.push("/student"):(b.info("请å
ç»å½ä»¥é¢çº¦è¯¾ç¨"),c.push("/login"))}function C(){sessionStorage.getItem("token")?c.push("/ai-dictionary"):(b.info("请å
ç»å½ä»¥ä½¿ç¨AIè¯å
¸"),c.push("/login"))}function h(){sessionStorage.getItem("token")?c.push("/student?tab=my-mistakes"):(b.info("请å
ç»å½ä»¥ä½¿ç¨éé¢éåè½"),c.push("/login"))}function u(){c.push(`/institution/${w.value}/showcase`)}function f(){c.push("/login")}function m(){c.push("/register")}function _(){const r=document.createElement("a");r.href="/api/public/download-apk",r.download="open-course.apk",r.target="_blank",document.body.appendChild(r),r.click(),document.body.removeChild(r)}const p=async()=>{A.get("/api/public/institutions-showcase").then(r=>{r.data&&r.data.length>0&&(w.value=r.data[0].id)}).catch(r=>{console.error("Failed to load institution showcase:",r)})};return be(()=>{p()}),(r,o)=>{const g=a("el-icon"),V=a("el-col"),z=a("el-row"),M=a("el-button");return n(),k("div",Rl,[o[16]||(o[16]=l("div",{class:"hero-section"},[l("h1",null,"æ¬¢è¿æ¥å°å¼æ¾è¯¾ç¨ç³»ç»"),l("p",{class:"subtitle"},"ä¸ä¸ªåè½ä¸°å¯çå¨çº¿å¦ä¹ å课ç¨ç®¡çç³»ç»")],-1)),l("div",Fl,[e(z,{gutter:30,justify:"center"},{default:t(()=>[e(V,{xs:24,sm:12,md:6},{default:t(()=>[l("div",{class:"feature-card",onClick:v},[e(g,{class:"feature-icon"},{default:t(()=>[e(se(qt))]),_:1}),o[0]||(o[0]=l("h3",null,"åè¯å¬åç»ä¹ ",-1)),o[1]||(o[1]=l("p",{class:"feature-description"},"éè¿äºå¨å¼å¬åç»ä¹ æåè¯æ±éï¼æ¯ææå¹´çº§ååå
éæ©",-1))])]),_:1}),e(V,{xs:24,sm:12,md:6},{default:t(()=>[l("div",{class:"feature-card",onClick:y},[e(g,{class:"feature-icon"},{default:t(()=>[e(se(ht))]),_:1}),o[2]||(o[2]=l("h3",null,"课ç¨é¢çº¦",-1)),o[3]||(o[3]=l("p",{class:"feature-description"},"æµè§å¯ç¨è¯¾ç¨æ¶é´å¹¶é¢çº¦é忍ç课ç¨",-1)),o[4]||(o[4]=l("p",{class:"login-required"},"(éè¦ç»å½)",-1))])]),_:1}),e(V,{xs:24,sm:12,md:6},{default:t(()=>[l("div",{class:"feature-card",onClick:C},[e(g,{class:"feature-icon"},{default:t(()=>[e(se(pl))]),_:1}
1),o[5]||(o[5]=l("h3",null,"AIè±è¯è¯å
¸",-1)),o[6]||(o[6]=l("p",{class:"feature-description"},"使ç¨AIææ¯æä¾è¯¦ç»çåè¯è§£éãä¾å¥åè®°å¿æå·§",-1)),o[7]||(o[7]=l("p",{class:"login-required"},"(éè¦ç»å½)",-1))])]),_:1}),e(V,{xs:24,sm:12,md:6},{default:t(()=>[l("div",{class:"feature-card",onClick:h},[e(g,{class:"feature-icon"},{default:t(()=>[e(se(Vt))]),_:1}),o[8]||(o[8]=l("h3",null,"éé¢é",-1)),o[9]||(o[9]=l("p",{class:"feature-description"},"管çåç»ä¹ æ¨çéé¢ï¼æ¯ææå¦ç§å年级åç±»",-1)),o[10]||(o[10]=l("p",{class:"login-required"},"(éè¦ç»å½)",-1))])]),_:1}),e(V,{xs:24,sm:12,md:6},{default:t(()=>[l("div",{class:"feature-card",onClick:_},[e(g,{class:"feature-icon"},{default:t(()=>[e(se(ml))]),_:1}),o[11]||(o[11]=l("h3",null,"ä¸è½½APP",-1)),o[12]||(o[12]=l("p",{class:"feature-description"},"ä¸è½½æä»¬çç§»å¨åºç¨ï¼éæ¶éå°å¦ä¹ ",-1))])]),_:1})]),_:1})]),w.value!=-1?(n(),k("div",Bl,[e(z,{gutter:30,justify:"center"},{default:t(()=>[e(V,{span:24},{default:t(()=>[l("div",{class:"teachers-showcase-card",onClick:u},[l("div",Pl,[e(g,{class:"showcase-icon"},{default:t(()=>[e(se(_t))]),_:1}),o[13]||(o[13]=l("div",{class:"showcase-text"},[l("h3",null,"寻æ¾å¹ä¼ãè¡¥ä¹ çä¼ç§èå¸"),l("p",null,"æ±èåé¢åèµæ·±æå¸ï¼ä¸ºæ¨æä¾ä¸ä¸çè¾
导æå¡")],-1)),e(g,{class:"arrow-icon"},{default:t(()=>[e(se(vl))]),_:1})])])]),_:1})]),_:1})])):te("",!0),o[17]||(o[17]=il('<div class="partners-section" data-v-2ea2b5af><h2 class="section-title" data-v-2ea2b5af>åä½ä¼ä¼´</h2><div class="partner-logo" data-v-2ea2b5af><a href="https://cloud.siliconflow.cn/i/Hpf6kA2O" target="_blank" data-v-2ea2b5af><img src="'+El+'" data-v-2ea2b5af></a></div><div class="partners-slider" data-v-2ea2b5af><div class="slider-track" data-v-2ea2b5af></div></div></div>',1)),l("div",Hl,[e(z,{gutter:20,justify:"center"},{default:t(()=>[e(V,{span:12},{default:t(()=>[e(M,{type:"primary",size:"large",onClick:f,class:"cta-button"},{default:t(()=>[...o[14]||(o[14]=[s("ç«å³ç»å½",-1)])]),_:1})]),_:1}),e(V,{span:12},{default:t(()=>[e(M,{size:"large",onClick:m,class:"cta-button"},{default:t(()=>[...o[15]||(o[15]=[s("注åè´¦æ·",-1)])]),_:1})]),_:1})]),_:1})])])}}}),Ce=(q,c)=>{const w=q.__vccOpts||q;for(const[v,y]of c)w[v]=y;return w},ql=Ce(Ol,[["__scopeId","data-v-2ea2b5af"]]),Nl={class:"auth-page"},jl={class:"auth-container"},Wl={class:"auth-card"},Kl={class:"auth-header"},Gl={class:"auth-links"},Jl={class:"auth-home-link"},Xl=ge({__name:"Login",setup(q){const c=Ie(),w=d(!1),v=Ae({email:"",password:""}),y=d(!1);async function C(){var h,u;if(!v.email||!v.password){b.error("请è¾å
¥ç¨æ·åæé®ç®±åå¯ç ");return}w.value=!0;try{const f=await A.post("/api/login",v),m=f.data.token,_=f.data.user,p=_.role;sessionStorage.setItem("token",m),sessionStorage.setItem("user",JSON.stringify(_)),p==="admin"?c.push("/admin"):p==="teacher"?c.push("/teacher"):p==="institution"?c.push("/institution"):c.push("/student"),y.value=!1,window.dispatchEvent(new Event("loginSuccess"))}catch(f){b.error(((u=(h=f.response)==null?void 0:h.data)==null?void 0:u.error)||"ç»å½å¤±è´¥"),y.value=!0}finally{w.value=!1}}return(h,u)=>{const f=a("el-icon"),m=a("el-input"),_=a("el-form-item"),p=a("el-button"),r=a("el-form"),o=a("router-link");return n(),k("div",Nl,[l("div",jl,[l("div",Wl,[l("div",Kl,[e(f,{class:"auth-icon"},{default:t(()=>[e(se(_t))]),_:1}),u[2]||(u[2]=l("h2",null,"欢è¿ç»å½",-1)),u[3]||(u[3]=l("p",{class:"auth-subtitle"},"弿¾è¯¾ç¨ç³»ç»",-1))]),e(r,{model:v,onSubmit:Oe(C,["prevent"]),class:"auth-form"},{default:t(()=>[e(_,null,{default:t(()=>[e(m,{modelValue:v.email,"onUpdate:modelValue":u[0]||(u[0]=g=>v.email=g),placeholder:"请è¾å
¥ç¨æ·åæé®ç®±","prefix-icon":"User",size:"large",class:"auth-input"},null,8,["modelValue"])]),_:1}),e(_,null,{default:t(()=>[e(m,{type:"password",modelValue:v.password,"onUpdate:modelValue":u[1]||(u[1]=g=>v.password=g),placeholder:"请è¾å
¥å¯ç ","prefix-icon":"Lock",size:"large","show-password":"",class:"auth-input",onKeyup:Je(C,["enter"])},null,8,["modelValue"])]),_:1}),e(_,null,{default:t(()=>
1[e(p,{type:"primary",onClick:C,class:"auth-button",loading:w.value,size:"large"},{default:t(()=>[...u[4]||(u[4]=[s(" ç»å½ ",-1)])]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"]),l("div",Gl,[e(o,{to:"/forgot-password",class:"auth-link-item"},{default:t(()=>[...u[5]||(u[5]=[s("å¿è®°å¯ç ï¼",-1)])]),_:1}),e(o,{to:"/register",class:"auth-link-item"},{default:t(()=>[...u[6]||(u[6]=[s("注åå¦çè´¦æ·",-1)])]),_:1})]),l("div",Jl,[e(o,{to:"/",class:"auth-back-home"},{default:t(()=>[e(f,null,{default:t(()=>[e(se(Ct))]),_:1}),u[7]||(u[7]=s(" è¿åé¦é¡µ ",-1))]),_:1})])])]),u[8]||(u[8]=l("div",{class:"auth-bg"},[l("div",{class:"auth-bg-pattern"})],-1))])}}}),Ql=Ce(Xl,[["__scopeId","data-v-12936464"]]),Xt="/assets/admin-wechat-qrcode-f9CgmCLF.jpg",Zl={class:"auth-page"},ea={class:"auth-container"},ta={class:"auth-card"},la={class:"auth-header"},aa={class:"form-label"},oa={class:"form-label"},na={class:"form-label"},sa={class:"form-label"},ra={class:"form-label"},ia={class:"auth-links"},ua={class:"auth-home-link"},da={class:"qrcode-container"},ca={key:0,class:"qrcode-error"},pa=ge({__name:"Register",setup(q){const c=Ie(),w=d(!1),v=d(),y=d(!1),C=d(!1);function h(){y.value=!0}function u(){C.value=!0,b.error("äºç»´ç å 载失败ï¼è¯·è系管çå")}const m={name:[{required:!0,message:"请è¾å
¥ç¨æ·å",trigger:"blur"},{min:2,max:20,message:"ç¨æ·åé¿åº¦å¨2-20个å符ä¹é´",trigger:"blur"}],email:[{required:!0,message:"请è¾å
¥é®ç®±å°å",trigger:"blur"},{type:"email",message:"请è¾å
¥æ£ç¡®çé®ç®±å°å",trigger:"blur"}],inviteCode:[{required:!0,message:"请è¾å
¥é请ç ",trigger:"blur"}],password:[{required:!0,message:"请è¾å
¥å¯ç ",trigger:"blur"},{min:6,message:"å¯ç é¿åº¦è³å°ä¸º6ä½",trigger:"blur"}],confirmPassword:[{required:!0,validator:(r,o,g)=>{o===""?g(new Error("è¯·åæ¬¡è¾å
¥å¯ç ")):o!==_.password?g(new Error("两次è¾å
¥çå¯ç ä¸ä¸è´")):g()},trigger:"blur"}]},_=Ae({name:"",email:"",inviteCode:"",password:"",confirmPassword:""});be(()=>{const o=new URLSearchParams(window.location.search.split("?")[1]).get("inviteCode");o&&(_.inviteCode=o),dt(()=>{const g=document.querySelector(".auth-form input");g==null||g.focus()})});async function p(){if(!v.value){b.error("表ååå§å失败ï¼è¯·å·æ°é¡µé¢éè¯");return}await v.value.validate(async r=>{var o,g;if(!r){b.error("è¯·æ£æ¥è¡¨å填忝妿£ç¡®");const V=document.querySelector(".el-form-item.is-error");if(V){const z=V.querySelector("input");z==null||z.focus()}return}w.value=!0;try{await A.post("/api/register",{name:_.name,email:_.email,invite_code:_.inviteCode,password:_.password}),b.success("注åæåï¼è¯·ç»å½"),v.value&&v.value.resetFields(),setTimeout(()=>{c.push("/login")},1500)}catch(V){console.error(V);const M=(g=(o=V.response)==null?void 0:o.data)==null?void 0:g.error,I={USER_EXISTS:"è¯¥ç¨æ·å已被注åï¼è¯·æ´æ¢ç¨æ·å",EMAIL_EXISTS:"该é®ç®±å·²è¢«æ³¨åï¼è¯·ä½¿ç¨å
¶ä»é®ç®±æç´æ¥ç»å½",INVALID_INVITE_CODE:"éè¯·ç æ æï¼è¯·æ£æ¥åéè¯",WEAK_PASSWORD:"å¯ç 强度ä¸è¶³ï¼è¯·ä½¿ç¨æ´å¤æçå¯ç ç»å"}[M||""]||M||"注å失败ï¼è¯·ç¨åéè¯";b.error(I)}finally{w.value=!1}})}return(r,o)=>{const g=a("el-icon"),V=a("el-tooltip"),z=a("el-input"),M=a("el-form-item"),L=a("el-button"),I=a("el-form"),O=a("router-link"),j=a("el-dialog");return n(),k("div",Zl,[l("div",ea,[l("div",ta,[l("div",la,[e(g,{class:"auth-icon"},{default:t(()=>[e(se(Nt))]),_:1}),o[6]||(o[6]=l("h2",null,"å¦ç注å",-1)),o[7]||(o[7]=l("p",{class:"auth-subtitle"},"å å
¥å¼æ¾è¯¾ç¨ç³»ç»",-1))]),e(I,{model:_,rules:m,ref_key:"formRef",ref:v,onSubmit:Oe(p,["prevent"]),class:"auth-form","label-position":"left"},{default:t(()=>[e(M,{prop:"name"},{label:t(()=>[l("div",aa,[o[8]||(o[8]=l("span",null,"ç¨æ·å",-1)),e(V,{content:"ç¨äºç»å½ç³»ç»çå¯ä¸æ è¯ï¼å»ºè®®ä½¿ç¨è±æåæ¯ãæ°åæä¸å线ç»å",placement:"top","show-after":500},{default:t(()=>[e(g,{class:"info-icon",tabindex:"0",role:"button","aria-label":"æ¥çç¨æ·å说æ"},{default:t(()=>[e(se(vt))]),_:1})]),_:1})])]),default:t(()=>[e(z,{id:"username",modelValue:_.name,"onUpdate:modelValue":o[0]||(o[0]=R=>_.name=R),placeholder:"请è¾å
¥ç¨æ·å","prefix-icon":"User",size:"large",class:"auth-input","aria-label":"ç¨æ·åè¾å
¥æ¡",autocomplete:"username"},null,8,["modelValue"])]),_:1}),e(M,{prop:"email"},{label:t(()=>[l("div",oa,[o[9]||(o[9]=l("span",null,"é®ç®±å°å",-1)),e(V,{content:"ç¨äºæ¾åå¯ç 忥æ¶ç³»ç»éç¥ï¼è¯·å¡«åç宿æçé®ç®±",placement:"top","show-after":500},{default:t(()=>[e(g,{class:"info-icon",tabindex:"0",role:"button","aria-label":"æ¥çé®ç®±è¯´æ"},{default:t(()=>[e(se(vt))]),_:1})]),_:1})])]),default:t(()=>[e(z,{id:"email",modelValue:_.email,"onUpdate:modelValue":o[1]||(o[1]=R=>_.email=R),type:"email",placeholder:"请è¾å
¥é®ç®±å°å","prefix-icon":"Message",size:"large",class:"auth-input","aria-label":"é®ç®±å°åè¾å
¥æ¡",autocomplete:"email"},null,8,["modelValue"])]),_:1}),e(M,{prop:"inviteCode"},{label:t(()=>[l("div",na,[o[10]||(o[10]=l("span",null,"é请ç ",-1)),e(g,{class:"info-icon clickable-icon",onClick:h,onKeydown:[Je(h,["enter"]),Je(Oe(h,["prevent"]),["space"])],tabindex:"0",role:"button","aria-label":"æ¥çé请ç è·åæ¹å¼"},{default:t(()=>[e(se(vt))]),_:1},8,["onKeydown"])])]),default:t(()=>[e(z,{id:"inviteCode",modelValue:_.inviteCode,"onUpdate:modelValue":o[2]||(o[2]=R=>_.inviteCode=R),placeholder:"请è¾å
¥é请ç ","prefix-icon":"Ticket",size:"large",class:"auth-input","aria-label":"é请ç è¾å
¥æ¡"},null,8,["modelValue"])]),_:1}),e(M,{prop:"password"},{label:t(()=>[l("div",sa,[o[11]||(o[11]=l("span",null,"å¯ç ",-1)),e(V,{content:"å¯ç é¿åº¦è³å°6ä½ï¼å»ºè®®ä½¿ç¨åæ¯ãæ°åå符å·ç»å以æé«å®å
¨æ§",placement:"top","show-after":500},{default:t(()=>[e(g,{class:"info-icon",tabindex:"0",role:"button","aria-label":"æ¥çå¯ç 说æ"},{default:t(()=>[e(se(vt))]),_:1})]),_:1})])]),default:t(()=>[e(z,{id:"password",type:"password",modelValue:_.password,"onUpdate:modelValue":o[3]||(o[3]=R=>_.password=R),placeholder:"请è¾å
¥å¯ç ","prefix-icon":"Lock",
1size:"large","show-password":"",class:"auth-input","aria-label":"å¯ç è¾å
¥æ¡",autocomplete:"new-password"},null,8,["modelValue"])]),_:1}),e(M,{prop:"confirmPassword"},{label:t(()=>[l("div",ra,[o[12]||(o[12]=l("span",null,"确认å¯ç ",-1)),e(V,{content:"è¯·åæ¬¡è¾å
¥å¯ç 以确ä¿å¯ç è¾å
¥æ£ç¡®",placement:"top","show-after":500},{default:t(()=>[e(g,{class:"info-icon",tabindex:"0",role:"button","aria-label":"æ¥ç确认å¯ç 说æ"},{default:t(()=>[e(se(vt))]),_:1})]),_:1})])]),default:t(()=>[e(z,{id:"confirmPassword",type:"password",modelValue:_.confirmPassword,"onUpdate:modelValue":o[4]||(o[4]=R=>_.confirmPassword=R),placeholder:"è¯·åæ¬¡è¾å
¥å¯ç ","prefix-icon":"Lock",size:"large","show-password":"",class:"auth-input","aria-label":"确认å¯ç è¾å
¥æ¡",autocomplete:"new-password",onKeyup:Je(p,["enter"])},null,8,["modelValue"])]),_:1}),e(M,null,{default:t(()=>[e(L,{type:"primary",onClick:p,class:"auth-button",loading:w.value,size:"large"},{default:t(()=>[...o[13]||(o[13]=[s(" 注å ",-1)])]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"]),l("div",ia,[e(O,{to:"/forgot-password",class:"auth-link-item"},{default:t(()=>[...o[14]||(o[14]=[s("å¿è®°å¯ç ï¼",-1)])]),_:1}),e(O,{to:"/login",class:"auth-link-item"},{default:t(()=>[...o[15]||(o[15]=[s("å·²æè´¦æ·ï¼å»ç»å½",-1)])]),_:1})]),l("div",ua,[e(O,{to:"/",class:"auth-back-home"},{default:t(()=>[e(g,null,{default:t(()=>[e(se(Ct))]),_:1}),o[16]||(o[16]=s(" è¿åé¦é¡µ ",-1))]),_:1})])])]),o[20]||(o[20]=l("div",{class:"auth-bg"},[l("div",{class:"auth-bg-pattern"})],-1)),e(j,{modelValue:y.value,"onUpdate:modelValue":o[5]||(o[5]=R=>y.value=R),title:"æ«ç æ·»å 管çå微信è·åé请ç ",width:"320px",center:"",class:"qrcode-dialog"},{default:t(()=>[l("div",da,[Me(l("img",{src:Xt,alt:"管çå微信äºç»´ç ",class:"qrcode-image",onError:u},null,544),[[it,!C.value]]),C.value?(n(),k("div",ca,[...o[17]||(o[17]=[l("p",null,"äºç»´ç å 载失败ï¼è¯·è系管çå",-1)])])):te("",!0),o[18]||(o[18]=l("p",{class:"qrcode-tip"},"æ«æä¸æ¹äºç»´ç æ·»å 管çå微信",-1)),o[19]||(o[19]=l("p",{class:"qrcode-subtip"},'夿³¨"弿¾è¯¾ç¨æ³¨å"è·åé请ç ',-1))])]),_:1},8,["modelValue"])])}}}),ma=Ce(pa,[["__scopeId","data-v-07f7bb45"]]),va={class:"auth-page"},fa={class:"auth-container"},_a={class:"auth-card"},ya={class:"auth-header"},ga={class:"auth-links"},ba={class:"auth-home-link"},wa=ge({__name:"ResetPassword",setup(q){const c=st(),w=Ie(),v=d(!1),y=Ae({password:"",confirmPassword:"",token:""});be(()=>{y.token=c.query.token,y.token||(b.error("éç½®é¾æ¥æ ææå·²è¿æ"),setTimeout(()=>{w.push("/forgot-password")},2e3))});async function C(){var h,u;if(!y.password){b.error("请è¾å
¥æ°å¯ç ");return}if(y.password.length<6){b.error("å¯ç é¿åº¦è³å°ä¸º6ä½");return}if(y.password!==y.confirmPassword){b.error("两次è¾å
¥çå¯ç ä¸ä¸è´");return}if(!y.token){b.error("é置令ç缺失");return}v.value=!0;try{await A.post("/api/reset-password",{token:y.token,password:y.password}),b.success("å¯ç éç½®æåï¼è¯·ç»å½"),setTimeout(()=>{w.push("/login")},1500)}catch(f){b.error(((u=(h=f.response)==null?void 0:h.data)==null?void 0:u.error)||"å¯ç é置失败")}finally{v.value=!1}}return(h,u)=>{const f=a("el-icon"),m=a("el-input"),_=a("el-form-item"),p=a("el-button"),r=a("el-form"),o=a("router-link");return n(),k("div",va,[l("div",fa,[l("div",_a,[l("div",ya,[e(f,{class:"auth-icon"},{default:t(()=>[e(se(fl))]),_:1}),u[2]||(u[2]=l("h2",null,"éç½®å¯ç ",-1)),u[3]||(u[3]=l("p",{class:"auth-subtitle"},"设置æ°å¯ç ",-1))]),e(r,{model:y,onSubmit:Oe(C,["prevent"]),class:"auth-form"},{default:t(()=>[e(_,null,{default:t(()=>[e(m,{type:"password",modelValue:y.password,"onUpdate:modelValue":u[0]||(u[0]=g=>y.password=g),placeholder:"请è¾å
¥æ°å¯ç ï¼è³å°6ä½ï¼","prefix-icon":"Lock",size:"large","show-password":"",class:"auth-input"},null,8,["modelValue"])]),_:1}),e(_,null,{default:t(()=>[e(m,{type:"password",modelValue:y.confirmPassword,"onUpdate:modelValue":u[1]||(u[1]=g=>y.confirmPassword=g),placeholder:"请确认æ°å¯ç ","prefix-icon":"Lock",
1size:"large","show-password":"",class:"auth-input",onKeyup:Je(C,["enter"])},null,8,["modelValue"])]),_:1}),e(_,null,{default:t(()=>[e(p,{type:"primary",onClick:C,class:"auth-button",loading:v.value,size:"large"},{default:t(()=>[...u[4]||(u[4]=[s(" éç½®å¯ç ",-1)])]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"]),l("div",ga,[e(o,{to:"/login",class:"auth-link-item"},{default:t(()=>[...u[5]||(u[5]=[s("è¿åç»å½",-1)])]),_:1}),e(o,{to:"/forgot-password",class:"auth-link-item"},{default:t(()=>[...u[6]||(u[6]=[s("éæ°åé龿¥",-1)])]),_:1})]),l("div",ba,[e(o,{to:"/",class:"auth-back-home"},{default:t(()=>[e(f,null,{default:t(()=>[e(se(Ct))]),_:1}),u[7]||(u[7]=s(" è¿åé¦é¡µ ",-1))]),_:1})])])]),u[8]||(u[8]=l("div",{class:"auth-bg"},[l("div",{class:"auth-bg-pattern"})],-1))])}}}),ka=Ce(wa,[["__scopeId","data-v-38270fe6"]]),ha={class:"auth-page"},$a={class:"auth-container"},Va={class:"auth-card"},Ca={class:"auth-header"},xa={class:"auth-links"},Da={class:"auth-home-link"},Sa=ge({__name:"ForgotPassword",setup(q){const c=Ie(),w=d(!1),v=Ae({email:""});async function y(){var C,h;if(!v.email){b.error("请è¾å
¥é®ç®±å°å");return}w.value=!0;try{await A.post("/api/request-password-reset",{email:v.email}),b.success("妿é®ç®±å·²æ³¨åï¼æ¨å°æ¶å°å¯ç éç½®é¾æ¥"),setTimeout(()=>{c.push("/login")},2e3)}catch(u){b.error(((h=(C=u.response)==null?void 0:C.data)==null?void 0:h.error)||"åééç½®é¾æ¥å¤±è´¥")}finally{w.value=!1}}return(C,h)=>{const u=a("el-icon"),f=a("el-input"),m=a("el-form-item"),_=a("el-button"),p=a("el-form"),r=a("router-link");return n(),k("div",ha,[l("div",$a,[l("div",Va,[l("div",Ca,[e(u,{class:"auth-icon"},{default:t(()=>[e(se(_l))]),_:1}),h[1]||(h[1]=l("h2",null,"å¿è®°å¯ç ",-1)),h[2]||(h[2]=l("p",{class:"auth-subtitle"},"éç½®æ¨çå¯ç ",-1))]),e(p,{model:v,onSubmit:Oe(y,["prevent"]),class:"auth-form"},{default:t(()=>[e(m,null,{default:t(()=>[e(f,{modelValue:v.email,"onUpdate:modelValue":h[0]||(h[0]=o=>v.email=o),type:"email",placeholder:"请è¾å
¥æ³¨åé®ç®±","prefix-icon":"Message",size:"large",class:"auth-input"},null,8,["modelValue"])]),_:1}),e(m,null,{default:t(()=>[e(_,{type:"primary",onClick:y,class:"auth-button",loading:w.value,size:"large"},{default:t(()=>[...h[3]||(h[3]=[s(" åééç½®é¾æ¥ ",-1)])]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"]),l("div",xa,[e(r,{to:"/login",class:"auth-link-item"},{default:t(()=>[...h[4]||(h[4]=[s("è¿åç»å½",-1)])]),_:1}),e(r,{to:"/register",class:"auth-link-item"},{default:t(()=>[...h[5]||(h[5]=[s("注åè´¦æ·",-1)])]),_:1})]),l("div",Da,[e(r,{to:"/",class:"auth-back-home"},{default:t(()=>[e(u,null,{default:t(()=>[e(se(Ct))]),_:1}),h[6]||(h[6]=s(" è¿åé¦é¡µ ",-1))]),_:1})])])]),h[7]||(h[7]=l("div",{class:"auth-bg"},[l("div",{class:"auth-bg-pattern"})],-1))])}}}),Ma=Ce(Sa,[["__scopeId","data-v-8f3258d6"]]),Ua={class:"note-manager"},Ia={key:2},Ta=["innerHTML"],Aa={key:1},za={key:1,class:"no-notes"},La={class:"toolbar"},Ya={class:"dialog-footer"},Ea=ge({__name:"NoteManager",props:{bookingId:{},studentId:{},teacherId:{},noteId:{},role:{},showContent:{type:Boolean}},emits:["notes-updated"],setup(q,{expose:c,emit:w}){const v=q,y=w,C=new Jt,h=d([]),u=d(!1),f=d(!1),m=d(null),_=d({content:"",is_public:!1,fontSize:"16px"}),p=Le(()=>v.role==="student"||v.role==="teacher"),r=Le(()=>v.role==="student"||v.role==="teacher"||v.role==="admin"),o=Le(()=>m.value&&m.value.teacher_id);be(()=>{g()});async function g(){try{u.value=!0;const R=await A.get(`/api/bookings/${v.bookingId}/notes`);h.value=R.data.map(K=>({...K,creator_type:K.teacher_id?"teacher":"student"}))||[]}catch(R){console.error("Failed to load notes:",R)}finally{u.value=!1}}const V=async R=>{try{u.value=!0;const K=await A.get(`/api/notes/${R}`);m.value=K.data,_.value.content=K.data.content,_.value.is_public=K.data.is_public||!1,_.value.fontSize=K.data.font_size||"16px",f.value=!0}catch(K){console.error("Failed to load note:",K)}finally{u.value=!1}};function z(R){const K=JSON.parse(sessionStorage.getItem("user")||"{}");return v.role==="student"?R.student_id===K.id:v.role==="teacher"?R.teacher_id===K.id:!1}function M(R){R?(m.value=R,_.value.content=R.content,_.value.is_public=R.is_public||!1,_.value.fontSize=R.fontSize||"16px"):(m.value=null,_.value.content="",_.value.is_public=!1,_.value.fontSize="16px"),f.value=!0}async function L(){try{const R={booking_id:v.bookingId,content:_.value.content,font_size:_.value.fontSize};(v.role==="student"||v.role==="teacher")&&(R.is_public=_.value.is_public),await A.post("/api/notes",R),f.value=!1,g(),y("notes-updated")}catch(R){console.error("Failed to save note:",R),alert("ä¿åç¬è®°å¤±è´¥")}}async function I(R){try{await A.delete(`/api/notes/${R}`),g(),y("notes-updated")}catch(K){console.error("Failed to delete note:",K),alert("å é¤ç¬è®°å¤±è´¥")}}function O(R){return C.render(R)}function j(R){return de(R).format("YYYY-MM-DD HH:mm")}return c({loadNotes:g}),(R,K)=>{const H=a("el-button"),x=a("el-table-column"),B=a("el-tag"),D=a("el-table"),U=a("el-option"),F=a("el-select"),i=a("el-input"),$=a("el-form-item"),X=a("el-radio"),G=a("el-radio-group"),E=a("el-form"),oe=a("el-dialog"),Q=Ee("loading");
1return n(),k("div",Ua,[q.noteId?(n(),N(H,{key:0,type:"primary",size:"small",onClick:K[0]||(K[0]=re=>V(q.noteId))},{default:t(()=>[...K[7]||(K[7]=[s(" æ¥çç¬è®° ",-1)])]),_:1})):p.value?(n(),N(H,{key:1,type:"primary",size:"small",onClick:K[1]||(K[1]=re=>M(null))},{default:t(()=>[...K[8]||(K[8]=[s(" æ·»å ç¬è®° ",-1)])]),_:1})):te("",!0),q.showContent?(n(),k("div",Ia,[h.value.length>0?Me((n(),N(D,{key:0,data:h.value,style:{width:"100%","margin-top":"10px"}},{default:t(()=>[e(x,{prop:"content",label:"ç¬è®°å
容"},{default:t(({row:re})=>[l("div",{innerHTML:O(re.content)},null,8,Ta)]),_:1}),e(x,{prop:"creator_type",label:"ç±»å",width:"100"},{default:t(({row:re})=>[e(B,{type:re.teacher_id?"warning":"primary"},{default:t(()=>[s(S(re.teacher_id?"æå¸ç¬è®°":"å¦çç¬è®°"),1)]),_:2},1032,["type"])]),_:1}),e(x,{prop:"is_public",label:"å¯è§æ§",width:"100"},{default:t(({row:re})=>[re.teacher_id?(n(),k("span",Aa,"-")):(n(),N(B,{key:0,type:re.is_public?"success":"info"},{default:t(()=>[s(S(re.is_public?"å
¬å¼":"ç§æ"),1)]),_:2},1032,["type"]))]),_:1}),e(x,{prop:"created_at",label:"å建æ¶é´",width:"180"},{default:t(({row:re})=>[s(S(j(re.created_at)),1)]),_:1}),r.value?(n(),N(x,{key:0,label:"æä½",width:"150"},{default:t(({row:re})=>[z(re)?(n(),N(H,{key:0,type:"primary",size:"small",onClick:me=>M(re)},{default:t(()=>[...K[9]||(K[9]=[s(" ç¼è¾ ",-1)])]),_:1},8,["onClick"])):te("",!0),z(re)?(n(),N(H,{key:1,type:"danger",size:"small",onClick:me=>I(re.id)},{default:t(()=>[...K[10]||(K[10]=[s(" å é¤ ",-1)])]),_:1},8,["onClick"])):te("",!0)]),_:1})):te("",!0)]),_:1},8,["data"])),[[Q,u.value]]):te("",!0),h.value.length===0&&!u.value?(n(),k("div",za," ææ ç¬è®° ")):te("",!0)])):te("",!0),e(oe,{modelValue:f.value,"onUpdate:modelValue":K[6]||(K[6]=re=>f.value=re),title:m.value?"ç¼è¾ç¬è®°":"æ·»å ç¬è®°",draggable:"",width:"600px"},{footer:t(()=>[l("span",Ya,[e(H,{onClick:K[5]||(K[5]=re=>f.value=!1)},{default:t(()=>[...K[14]||(K[14]=[s("åæ¶",-1)])]),_:1}),e(H,{type:"primary",onClick:L},{default:t(()=>[...K[15]||(K[15]=[s("ä¿å",-1)])]),_:1})])]),default:t(()=>[e(E,{model:_.value,"label-width":"80px"},{default:t(()=>[e($,{label:"ç¬è®°å
容"},{default:t(()=>[l("div",La,[K[11]||(K[11]=l("span",null,"åä½å¤§å°: ",-1)),e(F,{modelValue:_.value.fontSize,"onUpdate:modelValue":K[2]||(K[2]=re=>_.value.fontSize=re),placeholder:"éæ©åä½å¤§å°",size:"small",style:{width:"120px","margin-right":"10px"}},{default:t(()=>[e(U,{label:"å°",value:"14px"}),e(U,{label:"ä¸",value:"16px"}),e(U,{label:"大",value:"18px"}),e(U,{label:"è¶
大",value:"24px"})]),_:1},8,["modelValue"])]),e(i,{modelValue:_.value.content,"onUpdate:modelValue":K[3]||(K[3]=re=>_.value.content=re),type:"textarea",rows:6,style:ft({fontSize:_.value.fontSize||"16px"}),placeholder:"æ¯æMarkdownæ ¼å¼"},null,8,["modelValue","style"])]),_:1}),q.role==="student"&&!o.value?(n(),N($,{key:0,label:"å¯è§æ§"},{default:t(()=>[e(G,{modelValue:_.value.is_public,"onUpdate:modelValue":K[4]||(K[4]=re=>_.value.is_public=re)},{default:t(()=>[e(X,{label:!0},{default:t(()=>[...K[12]||(K[12]=[s("å
¬å¼",-1)])]),_:1}),e(X,{label:!1},{default:t(()=>[...K[13]||(K[13]=[s("ç§æ",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1})):te("",!0)]),_:1},8,["model"])]),_:1},8,["modelValue","title"])])}}}),Qt=Ce(Ea,[["__scopeId","data-v-2e842300"]]),Ra={key:0},Fa={class:"header"},Ba={class:"header-toolbar"},Pa={class:"hours-info"},Ha=["onClick"],Oa={class:"day-num"},qa={key:0,class:"dot available"},Na={key:1,class:"dot mine"},ja={key:0},Wa={key:0,class:"timeslot-list"},Ka={key:1},Ga={key:1},Ja={key:1},Xa=ge({__name:"StudentCourses",setup(q){const c=Ie(),w=d([]),v=d(null),y=d([]),C=d(0),h=d("student"),u=d(!1),f=d(null),m=d(new Date),_=d(null),p=d([]),r=d(new Map),o=d(new Set),g=d(window.innerWidth<=480),V=d(!1),z=()=>{g.value=window.innerWidth<=480,g.value||(V.value=!0)};be(async()=>{window.addEventListener("resize",z),z();const G=await A.get("/api/teachers");w.value=G.data,await I();try{const E=await A.get("/api/me");h.value=E.data.role,C.value=E.data.balance||0}catch(E){console.error("Failed to get user info:",E)}}),ct(()=>{window.removeEventListener("resize",z)});const M=async(G,E)=>{f.value=G,u.value=!0},L=d({});async function I(){try{const G=await A.get("/api/mybookings"),E=new Map,oe=new Set;L.value={};for(const Q of G.data||[])if(E.set(Q.timeslot_id,Q.id),Q.start){const re=de(Q.start).format("YYYY-MM-DD");oe.add(re),L.value[re]=Q}r.value=E,o.value=oe}catch{r.value=new Map,o.value=new Set}}async function O(G){v.value=G;const E=await A.get(`/api/teachers/${G.id}/courses`);y.value=E.data,_.value=null,g.value&&(V.value=!1)}function j(){v.value&&c.push(`/teacher/${v.value.id}/detail`).catch(G=>{console.error("Navigation failed:",G),b.error("页é¢è·³è½¬å¤±è´¥")})}const R=Le(()=>{const G=new Map;for(const E of y.value){const oe=E.title;
1for(const Q of E.timeslots||[]){const re=de(Q.start).format("YYYY-MM-DD"),me=G.get(re)||[];me.push({...Q,courseTitle:oe}),G.set(re,me)}}return G});function K(G){let E="";return G?(G instanceof Date?E=de(G).format("YYYY-MM-DD"):typeof G=="string"?E=de(G).format("YYYY-MM-DD"):G.day?E=de(G.day).format("YYYY-MM-DD"):G.date&&(E=de(G.date).format("YYYY-MM-DD")),(R.value.get(E)||[]).length>0):!1}function H(G){let E="";if(!G)return!1;G instanceof Date?E=de(G).format("YYYY-MM-DD"):typeof G=="string"?E=de(G).format("YYYY-MM-DD"):G.day?E=de(G.day).format("YYYY-MM-DD"):G.date&&(E=de(G.date).format("YYYY-MM-DD"));const oe=L.value[E];if(!oe)return!1;for(const Q of y.value)if(Q.id===oe.id)return!0;return!1}async function x(G){const E=G&&G.day?G.day:G&&G.date?G.date:G;if(_.value=E?de(E).toDate():null,p.value=[],g.value&&(V.value=!0),!(!v.value||!E))try{const Q=(await A.get(`/api/teachers/${v.value.id}/timeslots`,{params:{date:de(E).format("YYYY-MM-DD")}})).data||[];for(const re of Q)re.mine=r.value.has(re.id),re.bookingId=r.value.get(re.id);p.value=Q}catch(oe){console.error("failed to fetch timeslots",oe)}}function B(G){return de(G).format("YYYY-MM-DD")}function D(G,E){return`${de(G).format("HH:mm")} - ${de(E).format("HH:mm")}`}async function U(G){var oe,Q;const E=p.value.find(re=>re.id===G);if(E&&new Date(E.start)<new Date){b.error("ä¸è½é¢çº¦è¿å»çæ¶é´");return}try{if(await A.post("/api/book",{timeslot_id:G}),b.success("Booked successfully"),g.value&&(V.value=!1),v.value&&_.value){const re=de(_.value).format("YYYY-MM-DD");try{const me=await A.get(`/api/teachers/${v.value.id}/timeslots`,{params:{date:re}});await I();const ie=me.data||[];for(const ce of ie)ce.mine=r.value.has(ce.id),ce.bookingId=r.value.get(ce.id);p.value=ie;try{const ce=await A.get("/api/me");C.value=ce.data.balance||0}catch{}}catch(me){console.error("failed to refresh timeslots",me)}}}catch(re){const me=((Q=(oe=re==null?void 0:re.response)==null?void 0:oe.data)==null?void 0:Q.error)||"Failed to book";b.error(me)}}async function F(G){var oe,Q;if(!G||!confirm("Cancel this booking?"))return;const E=Array.from(r.value.entries()).find(([re,me])=>me===G);if(E){const re=E[0],me=p.value.find(ie=>ie.id===re);if(me&&new Date(me.start)<new Date){b.error("ä¸è½åæ¶è¿å»çæ¶é´é¢çº¦");return}}try{if(await A.delete(`/api/bookings/${G}`),b.success("Cancelled successfully"),g.value&&(V.value=!1),await I(),v.value&&_.value){const re=de(_.value).format("YYYY-MM-DD");try{const ie=(await A.get(`/api/teachers/${v.value.id}/timeslots`,{params:{date:re}})).data||[];for(const ce of ie)ce.mine=r.value.has(ce.id),ce.bookingId=r.value.get(ce.id);p.value=ie;try{const ce=await A.get("/api/me");C.value=ce.data.balance||0}catch{}}catch(me){console.error("failed to refresh timeslots",me)}}}catch(re){const me=((Q=(oe=re==null?void 0:re.response)==null?void 0:oe.data)==null?void 0:Q.error)||"Failed to cancel";b.error(me)}}function i(G){return new Date(G)<new Date}function $(){console.log("Notes updated")}async function X(){try{const G=document.createElement("a");G.href="/api/my-calendar-export",G.setAttribute("download",`课ç¨å®æ-${de().format("YYYY-MM-DD")}.ics`),G.style.display="none",document.body.appendChild(G),G.click(),document.body.removeChild(G),b.success("æ¥åå¯¼åºæå")}catch{b.error("å¯¼åºæ¥å失败")}}return(G,E)=>{const oe=a("el-menu-item"),Q=a("el-menu"),re=a("el-col"),me=a("el-button"),ie=a("el-calendar"),ce=a("el-row"),ke=a("el-card"),De=a("el-dialog");return n(),k(ue,null,[e(ke,{class:"student-courses"},{default:t(()=>[E[14]||(E[14]=l("h2",null,"Teachers & Courses",-1)),e(ce,{gutter:20,class:"main-content"},{default:t(()=>[e(re,{span:g.value?14:4,class:"teacher-list"},{default:t(()=>[e(Q,null,{default:t(()=>[(n(!0),k(ue,null,fe(w.value,ve=>(n(),N(oe,{key:ve.id,onClick:W=>O(ve)},{default:t(()=>[s(S(ve.name),1)]),_:2},1032,["onClick"]))),128))]),_:1})]),_:1},8,["span"]),e(re,{span:g.value?14:20,class:"course-details"},{default:t(()=>[v.value?(n(),k("div",Ra,[l("div",Fa,[l("h3",null,"Courses for "+S(v.value.name),1),l("div",Ba,[e(me,{size:"small",onClick:j,class:"teacher-detail"},{default:t(()=>[...E[2]||(E[2]=[s("æ¥çæå¸è¯¦æ
",-1)])]),_:1}),e(me,{size:"small",onClick:X},{default:t(()=>[...E[3]||(E[3]=[s("导åºä¸ºæ¥å",-1)])]),_:1}
1)])]),l("div",Pa,[E[4]||(E[4]=s("ä½é¢: ",-1)),l("strong",null,S(C.value),1),E[5]||(E[5]=s(" å
",-1))]),e(ce,{gutter:20},{default:t(()=>[e(re,{span:g.value?24:16,class:"calendar-section"},{default:t(()=>[e(ie,{modelValue:m.value,"onUpdate:modelValue":E[0]||(E[0]=ve=>m.value=ve)},{"date-cell":t(({data:ve})=>[l("div",{class:"date-cell",onClick:W=>x(ve)},[l("div",Oa,S(ve.day.split("-").slice(1)[1]),1),K(ve)?(n(),k("div",qa)):te("",!0),H(ve)?(n(),k("div",Na)):te("",!0)],8,Ha)]),_:1},8,["modelValue"])]),_:1},8,["span"]),e(re,{span:g.value?24:8,class:Ye(["timeslots-section",{"mobile-hidden":g.value&&!V.value}])},{default:t(()=>[_.value?(n(),k("div",ja,[l("h4",null,"Timeslots for "+S(B(_.value)),1),p.value.length?(n(),k("div",Wa,[(n(!0),k(ue,null,fe(p.value,ve=>(n(),k("div",{key:ve.id,class:"timeslot-item"},[l("div",null,[l("div",null,[l("strong",null,S(ve.courseTitle),1)]),l("div",null,S(D(ve.start,ve.end)),1)]),l("div",null,[l("div",null,[!ve.booked||ve.available>0?(n(),N(me,{key:0,type:"success",size:"small",onClick:W=>U(ve.id)},{default:t(()=>[...E[6]||(E[6]=[s("Book",-1)])]),_:1},8,["onClick"])):ve.booked&&ve.mine&&!i(ve.start)?(n(),N(me,{key:1,type:"warning",size:"small",onClick:W=>F(ve.bookingId)},{default:t(()=>[...E[7]||(E[7]=[s("Cancel",-1)])]),_:1},8,["onClick"])):ve.booked&&ve.mine&&i(ve.start)?(n(),N(me,{key:2,type:"info",size:"small",disabled:""},{default:t(()=>[...E[8]||(E[8]=[s("已宿",-1)])]),_:1})):(n(),N(me,{key:3,disabled:"",size:"small"},{default:t(()=>[...E[9]||(E[9]=[s("Booked",-1)])]),_:1})),ve.booked&&ve.mine?(n(),N(me,{key:4,type:"info",size:"small",onClick:W=>M(ve.bookingId,ve.id)},{default:t(()=>[...E[10]||(E[10]=[s("ç¬è®°",-1)])]),_:1},8,["onClick"])):te("",!0)])])]))),128))])):(n(),k("div",Ka,[...E[11]||(E[11]=[l("p",null,"No timeslots on this day.",-1)])]))])):(n(),k("div",Ga,[...E[12]||(E[12]=[l("p",null,"Click a date to view available timeslots.",-1)])]))]),_:1},8,["span","class"])]),_:1})])):(n(),k("div",Ja,[...E[13]||(E[13]=[l("p",null,"Select a teacher to view courses.",-1)])]))]),_:1},8,["span"])]),_:1})]),_:1}),e(De,{title:"Notes",modelValue:u.value,"onUpdate:modelValue":E[1]||(E[1]=ve=>u.value=ve)},{default:t(()=>[e(Qt,{"booking-id":f.value,role:h.value,"show-content":"",onNotesUpdated:$},null,8,["booking-id","role"])]),_:1},8,["modelValue"])],64)}}}),Qa=Ce(Xa,[["__scopeId","data-v-79cf3c45"]]),Za={key:0},eo={key:1,class:"pagination-container"},mt=ge({__name:"PaginationTable",props:{data:{type:Object,required:!1},columns:{type:Array,required:!0},dataURL:{type:String,required:!0},deleteKey:{type:String,default:""}},emits:["data-loaded"],setup(q,{expose:c,emit:w}){const v=d(!1),y=d(!1),C=q,h=w,u=d({page:1,page_size:10,total:0,data:[]}),f=async()=>{if(C.dataURL!=="")try{v.value=!0;let V;u&&(V={...o,page:u.value.page,page_size:u.value.page_size});const z=await A.get(C.dataURL,{params:V});Array.isArray(z.data)?u.value={page:0,page_size:0,total:0,data:z.data}:u.value=z.data}catch(V){console.error("Failed to load data:",V)}finally{v.value=!1,h("data-loaded",u.value.data)}},m=()=>{g.value.forEach(V=>{V.searchKey?o[V.searchKey]="":o[V.prop]=""}),f()},_=V=>{u.value.page=V,f()},p=V=>{u.value.page_size=V,u.value.page=1,f()},r=async V=>{try{await et.confirm("ç¡®å®è¦å é¤è¿ä¸ªè®°å½åï¼","确认å é¤",{confirmButtonText:"ç¡®å®",cancelButtonText:"åæ¶",type:"warning"}),await A.delete(`${C.dataURL}/${V.id}`),f()}catch(z){console.error("Failed to delete record:",z)}},o=Ae({}),g=d([]);return be(()=>{const V=window.innerHeight;V<=770?u.value.page_size=10:V>=1180&&(u.value.page_size=20),C.columns.forEach(z=>{z.searchable&&(y.value=!0,g.value.push(z))}),f()}),c({loadData:f}),(V,z)=>{const M=a("el-date-picker"),L=a("el-option"),I=a("el-select"),O=a("el-input"),j=a("el-col"),R=a("el-button"),K=a("el-row"),H=a("el-table-column"),x=a("el-table"),B=a("el-pagination"),D=Ee("loading");return n(),k(ue,null,[y.value?(n(),k("div",Za,[e(K,{gutter:10,style:{"margin-bottom":"10px"}},{default:t(()=>[(n(!0),k(ue,null,fe(g.value,U=>(n(),N(j,{span:4},{default:t(()=>[U.searchKind==="date"?(n(),N(M,{key:0,modelValue:o[U.searchKey?U.searchKey:U.prop],"onUpdate:modelValue":F=>o[U.searchKey?U.searchKey:U.prop]=F,type:"datetime",placeholder:U.label,format:"YYYY-MM-DD HH:mm","value-format":"YYYY-MM-DDTHH:mm:ss[Z]",onChange:f,clearable:""},null,8,["modelValue","onUpdate:modelValue","placeholder"])):U.searchKind==="select"&&U.options?(n(),N(I,{key:1,modelValue:o[U.searchKey?U.searchKey:U.prop],"onUpdate:modelValue":F=>o[U.searchKey?U.searchKey:U.prop]=F,placeholder:U.label,onChange:f,clearable:""},{default:t(()=>[(n(!0),k(ue,null,fe(U.options,F=>(n(),N(L,{key:F.value,label:F.label,value:F.value},null,8,["label","value"]))),128))]),_:2},1032,["modelValue","onUpdate:modelValue","placeholder"])):(n(),N(O,{key:2,modelValue:o[U.searchKey?U.searchKey:U.prop],"onUpdate:modelValue":F=>o[U.searchKey?U.searchKey:U.prop]=F,placeholder:U.label,onKeyup:Je(f,["enter"]),clearable:""},null,8,["modelValue","onUpdate:modelValue","placeholder"]))]),_:2},1024))),256)),e(j,{span:4},{default:t(()=>[e(R,{type:"primary",onClick:f},{default:t(()=>[...z[0]||(z[0]=[s("æç´¢",-1)])]),_:1}),e(R,{type:"primary",onClick:m},{default:t(()=>[...z[1]||(z[1]=[s("éç½®",-1)])]),_:1}),Et(V.$slots,"button-tail")]),_:3})]),_:3})])):te("",!0),Me((n(),N(x,{data:u.value?u.value.data:[]},{default:t(()=>[(n(!0),k(ue,null,fe(q.columns,U=>(n(),N(H,{key:U.prop,label:U.label,prop:U.prop,width:U.width?U.width:null,formatter:U.formatter?U.formatter:null},Ot({_:2},[U.kind==="slot"?{name:"default",fn:t(({row:F})=>[Et(V.$slots,U.prop,{row:F})]),key:"0"}:void 0]),1032,["label","prop","width","formatter"]))),128)),C.deleteKey!==""?(n(),N(H,{key:0,label:"æä½"},{default:t(({row:U})=>[e(R,{type:"danger",onClick:F=>r(U)},{default:t(()=>[...z[2]||(z[2]=[s("å é¤",-1)])]),_:1},8,["onClick"])]),_:1})):te("",!0)]),_:3},8,["data"])),[[D,v.value]]),u.value&&u.value.total>u.value.page_size?(n(),k("div",eo,[e(B,{onCurrentChange:_,onSizeChange:p,"current-page":u.value.page,"page-sizes":[10,20,50,100],"page-size":u.value.page_size,total:u.value.total,layout:"total, sizes, prev, pager, next, jumper",background:""},null,8,["current-page","page-size","total"])])):te("",!0)],64)}}}),to=ge({__name:"ClassHourRecords",setup(q,{expose:c}){const w=d(),v=[{label:"æ¶é´",prop:"created_at",width:"180",formatter:u=>C(u.created_at)},{label:"éé¢",prop:"amount",width:"100",kind:"slot"},{label:"缴费类å",prop:"payment_type",width:"120",kind:"slot"},{label:"夿³¨",prop:"remarks"},{label:"æä½åID",prop:"admin_id",width:"100"}];async function y(){var u;(u=w.value)==null||u.loadData()}function C(u){return de(u).format("YYYY-MM-DD HH:mm")}function h(u){return Math.abs(u).toFixed(2)}return c({loadRecords:y}),(u,f)=>{const m=a("el-tag"),_=a("el-card");return n(),N(_,null,{header:t(()=>[...f[0]||(f[0]=[l("div",{class:"card-header"},[l("span",null,"缴费记å½")],-1)])]),default:t(()=>[e(mt,{dataURL:"/api/my-payment-records",columns:v,ref_key:"paymentTable",ref:w}
1,{amount:t(({row:p})=>[l("span",{class:Ye(p.amount>0?"positive":"negative")},S(p.amount>0?"+":"")+S(h(p.amount)),3)]),payment_type:t(({row:p})=>[e(m,{type:p.payment_type==="regular"?"primary":"success"},{default:t(()=>[s(S(p.payment_type==="regular"?"æ£å¸¸ç¼´è´¹":"èµ ééé¢"),1)]),_:2},1032,["type"])]),_:1},512)]),_:1})}}}),lo=ge({__name:"PastBookings",setup(q,{expose:c}){de.extend(pt),de.extend(xt),Ie();const w=d([]),v=d(!1),y=d(1),C=d(10),h=d(0),u=d("student"),f=[{label:"课ç¨åç§°",prop:"courseTitle"},{label:"å¼å§æ¶é´",prop:"start",formatter:(_,p,r)=>de(r).local().format("YYYY-MM-DD HH:mm")},{label:"ç»ææ¶é´",prop:"end",formatter:(_,p,r)=>de(r).local().format("YYYY-MM-DD HH:mm")},{label:"æ¶é¿(å°æ¶)",formatter:_=>{const p=de(_.start).local(),r=de(_.end).local();return Math.ceil(r.diff(p,"hour",!0))}}];be(async()=>{try{const _=await A.get("/api/me");u.value=_.data.role}catch(_){console.error("Failed to get user info:",_)}m()});async function m(){try{v.value=!0;const _=await A.get("/api/my-past-bookings",{params:{page:y.value,page_size:C.value}});w.value=_.data.data||[],h.value=_.data.total||0}catch(_){console.error("Failed to load past bookings:",_)}finally{v.value=!1}}return c({loadBookings:m}),(_,p)=>{const r=a("el-card");return n(),N(r,null,{header:t(()=>[...p[0]||(p[0]=[l("div",{class:"card-header"},[l("span",null,"ä¸è¯¾è®°å½")],-1)])]),default:t(()=>[e(mt,{dataURL:"/api/my-past-bookings",columns:f})]),_:1})}}}),ao=Ce(lo,[["__scopeId","data-v-74762694"]]),oo=ge({__name:"MyNotes",props:{ownerRole:{type:String,default:""}},setup(q,{expose:c}){const w=Ie(),v=d([]),y=d(!1);be(()=>{C()});async function C(){try{y.value=!0;const _=await A.get("/api/my-notes");v.value=_.data||[]}catch(_){console.error("Failed to load notes:",_)}finally{y.value=!1}}function h(_){w.push(`/note/${_.id}`)}async function u(_){try{await A.delete(`/api/notes/${_}`),C()}catch(p){console.error("Failed to delete note:",p),alert("å é¤ç¬è®°å¤±è´¥")}}function f(_,p){return _?_.length>p?_.substring(0,p)+"...":_:""}function m(_){return de(_).format("YYYY-MM-DD HH:mm")}return c({loadNotes:C}),(_,p)=>{const r=a("el-button"),o=a("el-table-column"),g=a("el-tag"),V=a("el-table"),z=a("el-card"),M=Ee("loading");return n(),N(z,null,{header:t(()=>[...p[0]||(p[0]=[l("div",{class:"card-header"},[l("span",null,"æçç¬è®°")],-1)])]),default:t(()=>[e(r,{type:"primary",size:"small",onClick:C},{default:t(()=>[...p[1]||(p[1]=[s("å·æ°",-1)])]),_:1}),Me((n(),N(V,{data:v.value,style:{width:"100%"}},{default:t(()=>[e(o,{prop:"id",label:"ID",width:"80"}),e(o,{prop:"content",label:"ç¬è®°å
容"},{default:t(({row:L})=>[l("div",null,S(f(L.content,50)),1)]),_:1}),e(o,{prop:"is_public",label:"å¯è§æ§",width:"100"},{default:t(({row:L})=>[e(g,{type:L.is_public?"success":"info"},{default:t(()=>[s(S(L.is_public?"å
¬å¼":"ç§æ"),1)]),_:2},1032,["type"])]),_:1}),e(o,{prop:"created_at",label:"å建æ¶é´",width:"180"},{default:t(({row:L})=>[s(S(m(L.created_at)),1)]),_:1}),e(o,{label:"æä½",width:"150"},{default:t(({row:L})=>[e(r,{type:"primary",size:"small",onClick:I=>h(L)},{default:t(()=>[...p[2]||(p[2]=[s(" æ¥ç ",-1)])]),_:1},8,["onClick"]),L.student_id!==0&&q.ownerRole==="student"||L.teacher_id!==0&&q.ownerRole==="teacher"?(n(),N(r,{key:0,t
1ype:"danger",size:"small",onClick:I=>u(L.id)},{default:t(()=>[...p[3]||(p[3]=[s(" å é¤ ",-1)])]),_:1},8,["onClick"])):te("",!0)]),_:1})]),_:1},8,["data"])),[[M,y.value]])]),_:1})}}}),Zt=Ce(oo,[["__scopeId","data-v-89bc58c6"]]),no=ge({name:"AiDictionary",props:{word:{type:String,default:""}},components:{},setup(q){const c=d({word:q.word||"",providerId:0,model:""}),w=d(!1),v=d(null),y=d(""),C=d("definitions"),h=d(null),u=d([]),f=d(null),m=d(!1),_=d(""),p=d(""),r=async()=>{var O,j;try{const R=await A.get("/api/user/api-providers");u.value=R.data;const K=R.data.find(H=>H.is_default);K&&(c.value.providerId=K.id,f.value=K,c.value.model=K.model||"")}catch(R){console.error("Load API providers error:",R),b.error("å è½½AIæä¾å失败: "+(((j=(O=R.response)==null?void 0:O.data)==null?void 0:j.error)||R.message))}},o=O=>{const j=u.value.find(R=>R.id===O);j?(f.value=j,c.value.model=j.model||""):f.value=null},g=async()=>{var O,j;if(!c.value.word.trim()){b.error("请è¾å
¥è¦æ¥è¯¢çåè¯");return}if(!c.value.providerId){b.error("è¯·éæ©AIæä¾å");return}w.value=!0,y.value="";try{const R=await A.post("/api/dictionary/lookup",{word:c.value.word.trim(),provider_id:c.value.providerId,model:c.value.model},{timeout:9e4});v.value=R.data}catch(R){console.error("Dictionary lookup error:",R),y.value=((j=(O=R.response)==null?void 0:O.data)==null?void 0:j.error)||"æ¥è¯¢å¤±è´¥ï¼è¯·ç¨åéè¯",b.error(y.value)}finally{w.value=!1}},V=()=>{h.value&&h.value.play().catch(O=>{console.error("Audio playback failed:",O),b.error("ææ¾åé³å¤±è´¥")})},z=O=>{c.value.word=O,g()},M=O=>O.replace(/\n/g,"<br>"),L=O=>O.replace(/\n/g,"<br>"),I=async()=>{var O,j;if(!c.value.word.trim()){b.error("请è¾å
¥è¦æ¥è¯¢çåè¯");return}if(!c.value.providerId){b.error("è¯·éæ©AIæä¾å");return}m.value=!0,p.value="",_.value="";try{const R=await A.post("/api/dictionary/generate-image",{word:c.value.word.trim(),provider_id:c.value.providerId},{timeout:12e4});if(R.data.image_url)_.value=R.data.image_url;else if(R.data.image_data){const K=new Uint8Array(R.data.image_data.data||R.data.image_data);let H="";for(let x=0;x<K.byteLength;x++)H+=String.fromCharCode(K[x]);_.value=btoa(H)}else throw new Error("Invalid response format")}catch(R){console.error("Image generation error:",R),p.value=((j=(O=R.response)==null?void 0:O.data)==null?void 0:j.error)||"å¾åçæå¤±è´¥ï¼è¯·ç¨åéè¯",b.error(p.value)}finally{m.value=!1}};return be(()=>{r()}),{form:c,loading:w,result:v,error:y,activeTab:C,pronunciationAudio:h,apiProviders:u,selectedProvider:f,lookupWord:g,playPronunciation:V,searchSynonym:z,formatTips:M,formatEtymology:L,onProviderChange:o,loadApiProviders:r,imageLoading:m,generatedImage:_,imageError:p,generateImage:I}}}),so={class:"ai-dictionary"},ro={key:0,class:"result-section"},io={class:"word-title"},uo=["src"],co={class:"pos-type"},po={class:"pos-definition"},mo={class:"examples-section"},vo={class:"synonyms-list"},fo={key:0},_o={class:"antonyms-list"},yo={key:0},go=["innerHTML"],bo={key:0,class:"root-family-section"},wo={class:"root-family-tags"},ko=["innerHTML"],ho={class:"image-generation-section"},$o={key:0,class:"image-container"},Vo=["src"],Co=["src"],xo={key:1,class:"image-error"},Do={key:1,class:"error-section"};function So(q,c,w,v,y,C){const h=a("el-input"),u=a("el-form-item"),f=a("el-col"),m=a("el-option"),_=a("el-select"),p=a("el-row"),r=a("el-button"),o=a("el-form"),g=a("el-card"),V=a("video-play"),z=a("el-icon"),M=a("el-tab-pane"),L=a("el-tag"),I=a("el-alert"),O=a("el-tabs"),j=Ee("loading");return n(),k("div",so,[c[11]||(c[11]=l("div",{class:"main-header header"},[l("h2",null,"AI è±è¯è¯å
¸")],-1)),Me((n(),N(g,{class:"search-card"},{default:t(()=>[e(o,{model:q.form,onSubmit:Oe(q.lookupWord,["prevent"]),"label-width":"auto"},{default:t(()=>[e(p,{gutter:20},{default:t(()=>[e(f,{span:12},{default:t(()=>[e(u,{label:"åè¯"},{default:t(()=>[e(h,{modelValue:q.form.word,"onUpdate:modelValue":c[0]||(c[0]=R=>q.form.word=R),placeholder:"请è¾å
¥è¦æ¥è¯¢çè±æåè¯",onKeyup:Je(q.lookupWord,["enter"])},null,8,["modelValue","onKeyup"])]),_:1})]),_:1}),e(f,{span:12},{default:t(()=>[e(u,{label:"AIæä¾å"},{default:t(()=>[e(_,{modelValue:q.form.providerId,"onUpdate:modelValue":c[1]||(c[1]=R=>q.form.providerId=R),placeholder:"è¯·éæ©AIæä¾å",onChange:q.onProviderChange},{default:t(()=>[(n(!0),k(ue,null,fe(q.apiProviders,R=>(n(),N(m,{key:R.id,label:R.name,value:R.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue","onChange"])]),_:1})]),_:1})]),_:1}),e(u,null,{default:t(()=>[e(r,{type:"primary",onClick:q.lookupWord,loading:q.loading,disabled:!q.form.word||!q.form.providerId},{default:t(()=>[...c[5]||(c[5]=[s(" æ¥è¯¢åè¯ ",-1)])]),_:1},8,["onClick","loading","disabled"])]),_:1})]),_:1},8,["model","onSubmit"])]),_:1})),[[j,q.loading]]),q.result?Me((n(),k("div",ro,[e(g,{class:"word-header"},{default:t(()=>[l("div",io,[l("h3",null,S(q.result.word),1),e(r,{type:"primary",circle:"",onClick:q.playPronunciation,title:"ææ¾åé³"},{default:t(()=>[e(z,null,{default:t(()=>[e(V)]),_:1})]),_:1},8,["onClick"])])]),_:1}),l("audio",{ref:"pronunciationAudio",src:`https://dict.youdao.com/dictvoice?type=0&audio=${q.result.word}`,preload:"none"},null,8,uo),e(O,{modelValue:q.activeTab,"onUpdate:modelValue":c[3]||(c[3]=R=>q.activeTab=R)},{default:t(()=>[e(M,{label:"è¯æ§ä¸éä¹",name:"definitions"},{default:t(()=>[(n(!0),k(ue,null,fe(q.result.parts_of_speech,(R,K)=>(n(),k("div",{key:K,class:"part-of-speech"},[e(g,{class:"pos-card"},{default:t(()=>[l("div",co,S(R.type),1),l("div",po,S(R.definition),1),l("div",mo,[c[6]||(c[6]=l("h4",null,"ä¾å¥:",-1)),l("ul",null,[(n(!0),k(ue,null,fe(R.examples,(H,x)=>(n(),k("li",{key:x},S(H),1))),128))])])]),_:2},1024)]))),128))]),_:1}),e(M,{label:"åä¹è¯ä¸åä¹è¯",name:"synonyms_antonyms"},{default:t(()=>[e(p,{gutter:20},{default:t(()=>[e(f,{span:12},{default:t(()=>[e(g,{class:"synonyms-card"},{header:t(()=>[...c[7]||(c[7]=[l("div",{class:"card-header"},[l("span",null,"åä¹è¯")],-1)])]),default:t(()=>[l("div",vo,[(n(!0),k(ue,null,fe(q.result.synonyms,(R,K)=>(n(),N(L,{key:K,type:"primary",class:"synonym-tag",onClick:H=>q.searchSynonym(R)},{default:t(()=>[s(S(R),1)]),_:2},1032,["onClick"]))),128)),!q.result.synonyms||q.result.synonyms.length===0?(n(),k("p",fo,"ææ åä¹è¯ä¿¡æ¯")):te("",!0)])]),_:1})]),_:1}),e(f,{span:12},{default:t(()=>[e(g,{class:"antonyms-card"},{header:t(()=>[...c[8]||(c[8]=[l("div",{class:"card-header"},[l("span",null,"åä¹è¯")],-1)])]),default:t(()=>[l("div",_o,[(n(!0),k(ue,null,fe(q.result.antonyms,(R,K)=>(n(),N(L,{key:K,type:"danger",class:"antonym-tag",onClick:H=>q.searchSynonym(R)},{default:t(()=>[s(S(R),1)]),_:2},1032,["onClick"]))),128)),!q.result.antonyms||q.result.antonyms.length===0?(n(),k("p",yo,"ææ åä¹è¯ä¿¡æ¯")):te("",!0)])]),_:1})]),_:1})]),_:1})]),_:1}),e(M,{label:"è¯æ ¹è¯ç¼",name:"etymology"},{default:t(()=>[e(g,{class:"etymology-card"},{default:t(()=>[l("div",{class:"etymology-content",innerHTML:q.formatEtymology(q.result.etymology)},null,8,go),q.result.root_family&&q.result.root_family.length>0?(n(),k("div",bo,[c[9]||(c[9]=l("h4",null,"ç¸åè¯æ ¹çåè¯:",-1)),l("div",w
1o,[(n(!0),k(ue,null,fe(q.result.root_family,(R,K)=>(n(),N(L,{key:K,type:"info",class:"root-family-tag",onClick:H=>q.searchSynonym(R)},{default:t(()=>[s(S(R),1)]),_:2},1032,["onClick"]))),128))])])):te("",!0)]),_:1})]),_:1}),e(M,{label:"è®°å¿æå·§",name:"memorization"},{default:t(()=>[e(g,{class:"tips-card"},{default:t(()=>[l("div",{class:"tips-content",innerHTML:q.formatTips(q.result.memorization_tips)},null,8,ko)]),_:1})]),_:1}),e(M,{label:"åè¯å¾å",name:"image"},{default:t(()=>[e(g,{class:"image-card"},{default:t(()=>[l("div",ho,[e(r,{type:"primary",onClick:q.generateImage,loading:q.imageLoading,disabled:!q.form.word||!q.form.providerId},{default:t(()=>[...c[10]||(c[10]=[s(" çæå¾å ",-1)])]),_:1},8,["onClick","loading","disabled"]),q.generatedImage?(n(),k("div",$o,[q.generatedImage.startsWith("http")?(n(),k("img",{key:0,src:q.generatedImage,alt:"Generated image",class:"generated-image"},null,8,Vo)):(n(),k("img",{key:1,src:"data:image/png;base64,"+q.generatedImage,alt:"Generated image",class:"generated-image"},null,8,Co))])):te("",!0),q.imageError?(n(),k("div",xo,[e(I,{title:q.imageError,type:"error","show-icon":"",closable:"",onClose:c[2]||(c[2]=R=>q.imageError="")},null,8,["title"])])):te("",!0)])]),_:1})]),_:1})]),_:1},8,["modelValue"])])),[[j,q.loading]]):te("",!0),q.error?(n(),k("div",Do,[e(I,{title:q.error,type:"error","show-icon":"",closable:"",onClose:c[4]||(c[4]=R=>q.error="")},null,8,["title"])])):te("",!0)])}const yt=Ce(no,[["render",So],["__scopeId","data-v-7b479e9c"]]),Ke={"1st-grade":"ä¸å¹´çº§","1st-grade-season-2":"ä¸å¹´çº§ä¸å","2nd-grade":"äºå¹´çº§","2nd-grade-season-2":"äºå¹´çº§ä¸å","3rd-grade":"ä¸å¹´çº§","3rd-grade-season-2":"ä¸å¹´çº§ä¸å","4th-grade":"å年级","4th-grade-season-2":"å年级ä¸å","4th-grade-seasson-2":"å年级ä¸å","5th-grade":"äºå¹´çº§","5th-grade-season-2":"äºå¹´çº§ä¸å","6th-grade":"å
年级","6th-grade-season-2":"å
年级ä¸å","7th-grade":"ä¸å¹´çº§","7th-grade-season-2":"ä¸å¹´çº§ä¸å","8th-grade":"å
«å¹´çº§","8th-grade-season-2":"å
«å¹´çº§ä¸å","9th-grade":"ä¹å¹´çº§","9th-grade-season-2":"ä¹å¹´çº§ä¸å","10th-grade":"é«ä¸","10th-grade-season-2":"é«ä¸ä¸å","11th-grade":"é«äº","11th-grade-season-2":"é«äºä¸å","12th-grade":"é«ä¸","12th-grade-season-2":"é«ä¸ä¸å","high-school-mandatory-1":"é«ä¸å¿
ä¿®ä¸","high-school-mandatory-2":"é«ä¸å¿
ä¿®äº","high-school-mandatory-3":"é«ä¸å¿
ä¿®ä¸","high-school-optional-1":"é«ä¸å¿
ä¿®ä¸","high-school-optional-2":"é«ä¸å¿
ä¿®äº","high-school-optional-3":"é«ä¸å¿
ä¿®ä¸","high-school-optional-4":"é«ä¸éä¿®å"},Mo={class:"vocabulary-learning"},Uo={class:"header"},Io={class:"grade-selector"},To={key:0,class:"progress-info"},Ao={class:"dialog-footer"},zo={key:1,class:"game-area"},Lo={class:"words-column"},Yo={class:"word-text"},Eo={class:"words-audio"},Ro=["src"],Fo=["src"],Bo={class:"definitions-column"},Po={class:"definition-text"},Ho={key:2,class:"game-area"},Oo={key:3,class:"no-vocabulary"},qo={key:4,class:"no-grade"},No={class:"stats"},jo=ge({__name:"VocabularyLearning",setup(q){const c=Ie(),w=d(!1),v=d(null),y=d(null),C=d(!1),h=d([]),u=d(""),f=d([]),m=d(null),_=d([]),p=d(null),r=d(null),o=d([]),g=d({learned:0,remaining:0,total:0}),V=d(!1),z=d(!1),M=d(""),L=()=>{c.push("/vocabulary-leaderboard")},I=Le(()=>o.value.filter(oe=>oe.was_correct).length),O=Le(()=>o.value.filter(oe=>!oe.was_correct).length),j=Le(()=>o.value.length===0?0:Math.round(I.value/o.value.length*100)),R=async()=>{if(!u.value){b.warning("è¯·éæ©å¹´çº§");return}try{const oe=await A.get(`/api/vocabulary/grade/${u.value}`);f.value=oe.data,X(),await H(),await K(),x()}catch(oe){b.error("å è½½è¯æ±å¤±è´¥"),console.error(oe)}},K=async()=>{if(u.value)try{const oe=await A.get(`/api/vocabulary/progress/${u.value}`);g.value=oe.data}catch(oe){b.error("å è½½å¦ä¹ è¿åº¦å¤±è´¥"),console.error(oe)}},H=async()=>{try{const oe=await A.get("/api/vocabulary/practice-records");o.value=oe.data}catch(oe){b.error("å è½½å¦ä¹ è®°å½å¤±è´¥"),console.error(oe)}},x=()=>{V.value=!1;const oe=f.value.filter(De=>!o.value.some(ve=>ve.word_id===De.id&&ve.was_correct));if(oe.length===0){m.value=null,_.value=[];return}const Q=Math.floor(Math.random()*oe.length);m.value=oe[Q];const re=m.value.definitions[Math.floor(Math.random()*m.value.definitions.length)];if(!re)return;const me=[];f.value.forEach(De=>{o.value.some(ve=>ve.word_id===De.id&&ve.was_correct)||De.definitions.forEach(ve=>{ve.id!==re.id&&me.push(ve)})});const ce=[...me].sort(()=>.5-Math.random()).slice(0,3),ke=[re,...ce];_.value=[...ke].sort(()=>.5-Math.random())},B=oe=>{p.value=oe,r.value=null},D=oe=>m.value?m.value.definitions.some(Q=>Q.id===oe.id):!1,U=oe=>{V.value||(r.value=oe,p.value&&F(oe))}
1,F=async oe=>{if(!m.value)return;const Q=m.value.definitions.some(re=>re.id===oe.id);try{if(w.value=!0,await A.post("/api/vocabulary/practice-records",{word_id:m.value.id,definition_id:oe.id,was_correct:Q}),o.value.push({word_id:m.value.id,definition_id:oe.id,was_correct:Q}),Q)await K(),b.success("å¹é
æ£ç¡®!"),setTimeout(()=>{x()},1e3);else{V.value=!0;const re=m.value.definitions.find(me=>{var ie;return(ie=m.value)==null?void 0:ie.definitions.some(ce=>ce.id===me.id)});M.value=(re==null?void 0:re.text)||"",z.value=!0,await K()}p.value=null,r.value=null}catch(re){b.error("è®°å½ç»ä¹ ç»æå¤±è´¥"),console.error(re)}finally{w.value=!1}},i=()=>{z.value=!1,setTimeout(()=>{x()},500)},$=()=>{z.value=!1,setTimeout(()=>{x()},500)},X=()=>{p.value=null,r.value=null,m.value=null,_.value=[],V.value=!1,z.value=!1},G=oe=>{oe&&oe.play()};be(async()=>{await E(),H()});async function E(){try{const oe=await A.get("/api/public/vocabulary/grades");h.value=oe.data.map(Q=>({value:Q,label:Ke[Q]||Q}))}catch(oe){b.error("å 载年级é项失败"),console.error(oe)}}return(oe,Q)=>{var De,ve;const re=a("el-button"),me=a("el-option"),ie=a("el-select"),ce=a("el-card"),ke=Ee("loading");return n(),k(ue,null,[l("div",Mo,[l("div",Uo,[Q[8]||(Q[8]=l("h2",null,"è±è¯è¯æ±å¦ä¹ ",-1)),e(re,{onClick:L,type:"primary",plain:""},{default:t(()=>[...Q[7]||(Q[7]=[s("æ¥çæè¡æ¦",-1)])]),_:1})]),l("div",Io,[e(ie,{modelValue:u.value,"onUpdate:modelValue":Q[0]||(Q[0]=W=>u.value=W),placeholder:"éæ©å¹´çº§",onChange:R},{default:t(()=>[(n(!0),k(ue,null,fe(h.value,W=>(n(),N(me,{key:W.value,label:W.label,value:W.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),e(re,{onClick:R,type:"primary",style:{"margin-left":"10px"}},{default:t(()=>[...Q[9]||(Q[9]=[s("å è½½è¯æ±",-1)])]),_:1})]),u.value&&f.value.length>0?(n(),k("div",To,[l("p",null,"å·²å¦åè¯: "+S(g.value.learned)+" | æªå¦åè¯: "+S(g.value.remaining)+" | æ»è®¡: "+S(g.value.total),1)])):te("",!0),e(se(Bt),{modelValue:z.value,"onUpdate:modelValue":Q[1]||(Q[1]=W=>z.value=W),title:"æ£ç¡®çæ¡",width:"30%","before-close":$},{footer:t(()=>[l("span",Ao,[e(re,{type:"primary",onClick:i},{default:t(()=>[...Q[10]||(Q[10]=[s("ç¡®å®",-1)])]),_:1})])]),default:t(()=>{var W;return[l("span",null,'æ£ç¡®çæ¡æ¯: "'+S((W=m.value)==null?void 0:W.word)+'" - '+S(M.value),1)]}),_:1},8,["modelValue"]),m.value?Me((n(),k("div",zo,[l("div",Lo,[Q[14]||(Q[14]=l("h3",null,"åè¯",-1)),Me((n(),N(ce,{key:m.value.id,class:Ye([{selected:((De=p.value)==null?void 0:De.id)===m.value.id,highlighted:((ve=p.value)==null?void 0:ve.id)===m.value.id},"word-card"]),onClick:Q[2]||(Q[2]=W=>B(m.value))},{default:t(()=>[l("div",Yo,S(m.value.word),1)]),_:1},8,["class"])),[[ke,w.value]]),l("div",Eo,[l("audio",{ref_key:"usAudio",ref:v,src:`https://dict.youdao.com/dictvoice?type=0&audio=${m.value.word}`},null,8,Ro),l("audio",{ref_key:"ukAudio",ref:y,src:`https://dict.youdao.com/dictvoice?type=1&audio=${m.value.word}`},null,8,Fo),e(re,{onClick:Q[3]||(Q[3]=W=>G(v.value)),type:"primary",size:"small"},{default:t(()=>[...Q[11]||(Q[11]=[s("è±é³",-1)])]),_:1}),e(re,{onClick:Q[4]||(Q[4]=W=>G(y.value)),type:"primary",size:"small"},{default:t(()=>[...Q[12]||(Q[12]=[s("ç¾é³",-1)])]),_:1}),e(re,{onClick:Q[5]||(Q[5]=W=>C.value=!0),type:"primary",size:"small"},{default:t(()=>[...Q[13]||(Q[13]=[s("æ¥åå
¸",-1)])]),_:1})])]),l("div",Bo,[Q[15]||(Q[15]=l("h3",null,"å®ä¹",-1)),(n(!0),k(ue,null,fe(_.value,W=>{var Z,Ve,xe;return Me((n(),N(ce,{key:W.id,class:Ye([{selected:((Z=r.value)==null?void 0:Z.id)===W.id,highlighted:((Ve=r.value)==null?void 0:Ve.id)===W.id,correct:V.value&&D(W),incorrect:V.value&&((xe=r.value)==null?void 0:xe.id)===W.id&&!D(W)},"definition-card"]),onClick:ae=>U(W)},{default:t(()=>[l("div",Po,S(W.text),1)]),_:2},1032,["class","onClick"])),[[ke,w.value]])}),128))])])),[[ke,w.value]]):u.value&&f.value.length>0?(n(),k("div",Ho,[...Q[16]||(Q[16]=[l("div",{class:"words-column"},[l("h3",null,"åè¯"),l("p",null,"已宿ææè¯æ±ç»ä¹ ")],-1),l("div",{class:"definitions-column"},[l("h3",null,"å®ä¹"),l("p",null,"已宿ææè¯æ±ç»ä¹ ")],-1)])])):u.value?(n(),k("div",Oo,[...Q[17]||(Q[17]=[l("p",null,"è¯¥å¹´çº§ææ è¯æ±æ°æ®",-1)])])):(n(),k("div",qo,[...Q[18]||(Q[18]=[l("p",null,"è¯·éæ©å¹´çº§å¼å§å¦ä¹ ",-1)])])),l("div",No,[Q[19]||(Q[19]=l("h3",null,"å¦ä¹ ç»è®¡",-1)),l("p",null,"æ£ç¡®: "+S(I.value)+" | é误: "+S(O.value)+" | æ£ç¡®ç: "+S(j.value)+"%",1)])]),e(se(Bt),{modelValue:C.value,"onUpdate:modelValue":Q[
16]||(Q[6]=W=>C.value=W),width:"50%",fullscreen:""},{default:t(()=>{var W;return[e(yt,{word:(W=m.value)==null?void 0:W.word},null,8,["word"])]}),_:1},8,["modelValue"])],64)}}}),Wo=Ce(jo,[["__scopeId","data-v-d08f074f"]]),Ko={class:"vocabulary-dictation"},Go={class:"main-header header"},Jo={class:"grade-selector"},Xo={class:"settings"},Qo={key:0,class:"dictation-area"},Zo={class:"progress-info"},en={key:0,class:"current-word"},tn={key:0},ln={key:1},an={key:2},on={key:3},nn={class:"controls"},sn=["src"],rn={key:1,class:"no-vocabulary"},un={key:2,class:"no-grade"},dn={key:3,class:"print-section"},cn={class:"print-controls"},pn={key:0,class:"exercise-sheet"},mn={class:"sheet-words"},vn={class:"word-index"},fn={class:"word-blank"},_n={class:"sheet-actions"},yn={class:"print-header"},gn={class:"print-content"},bn={class:"print-word-index"},wn={class:"print-word-blank"},kn={class:"dialog-footer"},hn={class:"dialog-footer"},$n=ge({__name:"VocabularyDictation",setup(q){const c=d(!1),w=d(!1),v=d(!1),y=d(!1),C=d([]),h=d(!1),u=d(!1),f=d(null),m=!!sessionStorage.getItem("token"),_=d(!1),p=d("unmastered"),r=d([]),o=d([]),g=d([]),V=d(""),z=d(""),M=d(""),L=d([]),I=d([]),O=d(null),j=async()=>{try{const ae=await A.get("/api/public/vocabulary/labels",{params:{grade:z.value,unit:M.value}});g.value=ae.data,ae.data&&ae.data.length>0?V.value=V.value||ae.data[0]:V.value=""}catch(ae){console.error(ae)}};je([z,M],()=>{j()});async function R(){try{const ae=await A.get("/api/public/vocabulary/grades");o.value=ae.data.map(ee=>({value:ee,label:Ke[ee]||ee}))}catch(ae){b.error("å 载年级é项失败"),console.error(ae)}}const K=d({interval:3,repeat:2}),H=d(!1),x=d(!1),B=d(0),D=d(null),U=d(0),F=Le(()=>i()),i=()=>{const ae=$.value;return B.value>=0&&B.value<ae.length?ae[B.value]:null},$=Le(()=>m&&p.value==="unmastered"?I.value.filter(ae=>!E(ae.id)):I.value),X=Le(()=>I.value.filter(ae=>E(ae.id)).length),G=Le(()=>F.value?E(F.value.id):!1),E=ae=>{const ee=r.value.filter(Y=>Y.word_id===ae);return ee.length===0?!1:ee[ee.length-1].was_correct},oe=async()=>{if(!m||!F.value){b.warning("请å
ç»å½æéæ©åè¯");return}await Q(F.value)},Q=async ae=>{var Y;if(!m){b.warning("请å
ç»å½");return}const ee=E(ae.id);try{ee?(await A.post("/api/vocabulary/practice-records",{word_id:ae.id,definition_id:0,was_correct:!1}),r.value.push({word_id:ae.id,was_correct:!1}),b.info(`已忶"${ae.word}"çææ¡æ è®°`)):(await A.post("/api/vocabulary/practice-records",{word_id:ae.id,definition_id:((Y=ae.definitions[0])==null?void 0:Y.id)||0,was_correct:!0}),r.value.push({word_id:ae.id,was_correct:!0}),b.success(`å·²æ è®°"${ae.word}"ä¸ºææ¡`))}catch(P){b.error("æä½å¤±è´¥"),console.error(P)}},re=async()=>{if(m)try{const ae=await A.get("/api/vocabulary/practice-records");r.value=ae.data}catch(ae){console.error("å è½½ç»ä¹ è®°å½å¤±è´¥:",ae)}},me=async()=>{if(M.value="",L.value=[],I.value=[],!!z.value)try{const ae=m?`/api/vocabulary/grade/${z.value}/units`:`/api/public/vocabulary/grade/${z.value}/units`,ee=await A.get(ae);L.value=ee.data}catch(ae){b.error("å è½½åå
å表失败"),console.error(ae)}},ie=async()=>{if(!z.value||!M.value){b.warning("è¯·éæ©å¹´çº§ååå
");return}try{m&&await re();const ae=m?`/api/vocabulary/grade/${z.value}/unit/${M.value}`:`/api/public/vocabulary/grade/${z.value}/unit/${M.value}`,ee=await A.get(ae,{params:{label:V.value}});I.value=ee.data,B.value=0,I.value.length===0?b.info("该åå
ææ è¯æ±æ°æ®"):b.success("è¯æ±å è½½æå")}catch(ae){b.error("å è½½è¯æ±å¤±è´¥"),console.error(ae)}},ce=()=>{O.value&&F.value&&(O.value.currentTime=0,O.value.play().catch(ae=>{console.error("ææ¾å¤±è´¥:",ae),b.error("åè¯ææ¾å¤±è´¥")}))},ke=()=>{if($.value.length===0){b.warning("没æå¯å¬åçåè¯ï¼è¯·æ£æ¥è¿æ»¤è®¾ç½®");return}H.value=!0,x.value=!1,B.value=0,U.value=0,W()},De=()=>{H.value?(H.value=!1,x.value=!0,D.value&&(clearTimeout(D.value),D.value=null),b.info("å¬åå·²æå")):x.value&&(H.value=!0,x.value=!1,W(),b.info("å¬åå·²æ¢å¤"))},ve=()=>{H.value=!1,x.value=!1,B.value=0,D.value&&(clearTimeout(D.value),D.value=null),b.info("å¬å已忢")},W=()=>{if(!H.value)return;const ae=$.value;if(B.value>=ae.length){ve(),b.success("å¬å宿!");return}U.value<K.value.repeat?(ce(),U.value++,D.value=window.setTimeout(()=>{W()},K.value.interval*1e3)):(U.value=0,B.value++,D.value=window.setTimeout(()=>{W()},K.value.interval*1e3))},Z=()=>{C.value=I.value.map(ae=>{const ee=ae.word;
1if(ee.length<=3)return{word:ee,hiddenWord:ee};const Y=Math.min(3,ee.length-2),P=Math.floor(Math.random()*Y)+1,ne=Array.from({length:ee.length-2},(Se,We)=>We+1);for(let Se=ne.length-1;Se>0;Se--){const We=Math.floor(Math.random()*(Se+1));[ne[Se],ne[We]]=[ne[We],ne[Se]]}const we=ne.slice(0,P);let _e="";for(let Se=0;Se<ee.length;Se++)we.includes(Se)?_e+="_":_e+=ee[Se];return{word:ee,hiddenWord:_e}}),b.success("ç»ä¹ åçææåï¼")},Ve=()=>{if(!f.value)return;const ae=f.value.innerHTML,ee=document.body.innerHTML;document.body.innerHTML=ae,window.print(),document.body.innerHTML=ee,h.value=!1,location.reload()},xe=ae=>{u.value=!1,ae()};return be(()=>{R()}),ct(()=>{D.value&&clearTimeout(D.value)}),(ae,ee)=>{var lt;const Y=a("el-button"),P=a("el-option"),ne=a("el-select"),we=a("el-input-number"),_e=a("el-form-item"),Se=a("el-form"),We=a("el-switch"),tt=a("Printer"),Xe=a("el-icon"),Ge=a("el-checkbox"),qe=a("el-dialog");return n(),k(ue,null,[l("div",Ko,[l("div",Go,[ee[18]||(ee[18]=l("h2",null,"åè¯å¬åç»ä¹ ",-1)),e(Y,{onClick:ee[0]||(ee[0]=ye=>y.value=!0),type:"warning",size:"small"},{default:t(()=>[...ee[17]||(ee[17]=[s(" é®é¢åé¦ ",-1)])]),_:1})]),l("div",Jo,[e(ne,{modelValue:z.value,"onUpdate:modelValue":ee[1]||(ee[1]=ye=>z.value=ye),placeholder:"éæ©å¹´çº§",onChange:me},{default:t(()=>[(n(!0),k(ue,null,fe(o.value,ye=>(n(),N(P,{key:ye.value,label:ye.label,value:ye.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),e(ne,{modelValue:M.value,"onUpdate:modelValue":ee[2]||(ee[2]=ye=>M.value=ye),placeholder:"éæ©åå
",onChange:ie,disabled:!z.value},{default:t(()=>[(n(!0),k(ue,null,fe(L.value,ye=>(n(),N(P,{key:ye,label:ye,value:ye},null,8,["label","value"]))),128))]),_:1},8,["modelValue","disabled"]),g.value&&g.value.length>0?(n(),N(ne,{key:0,modelValue:V.value,"onUpdate:modelValue":ee[3]||(ee[3]=ye=>V.value=ye),placeholder:"éæ©æ ç¾",onChange:ie,clearable:""},{default:t(()=>[(n(!0),k(ue,null,fe(g.value,ye=>(n(),N(P,{key:ye,label:ye,value:ye},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])):te("",!0),m?(n(),N(ne,{key:1,modelValue:p.value,"onUpdate:modelValue":ee[4]||(ee[4]=ye=>p.value=ye),placeholder:"ææ¡ç¶æ",disabled:!m||I.value.length===0},{default:t(()=>[e(P,{label:"æªææ¡",value:"unmastered"}),e(P,{label:"ææ",value:"all"})]),_:1},8,["modelValue","disabled"])):te("",!0)]),l("div",Xo,[e(Se,{inline:!0,model:K.value,class:"demo-form-inline","label-width":"auto"},{default:t(()=>[e(_e,{label:"ææ¾é´é(ç§)"},{default:t(()=>[e(we,{modelValue:K.value.interval,"onUpdate:modelValue":ee[5]||(ee[5]=ye=>K.value.interval=ye),min:1,max:10},null,8,["modelValue"])]),_:1}),e(_e,{label:"é夿¬¡æ°"},{default:t(()=>[e(we,{modelValue:K.value.repeat,"onUpdate:modelValue":ee[6]||(ee[6]=ye=>K.value.repeat=ye),min:1,max:5},null,8,["modelValue"])]),_:1}),e(_e,null,{default:t(()=>[e(Y,{type:"primary",onClick:ke,disabled:!I.value.length||H.value},{default:t(()=>[s(S(x.value?"éæ°å¼å§":"å¼å§å¬å"),1)]),_:1},8,["disabled"]),e(Y,{onClick:De,disabled:!H.value&&!x.value},{default:t(()=>[s(S(x.value?"æ¢å¤å¬å":"æåå¬å"),1)]),_:1},8,["disabled"]),e(Y,{onClick:ve,disabled:!H.value&&!x.value},{default:t(()=>[...ee[19]||(ee[19]=[s("忢å¬å",-1)])]),_:1},8,["disabled"])]),_:1})]),_:1},8,["model"])]),z.value&&M.value&&I.value.length>0?(n(),k("div",Qo,[l("div",Zo,[l("p",null,S(se(Ke)[z.value])+" - "+S(M.value)+" : åè¯æ»æ°: "+S(I.value.length)+" | å·²ææ¡: "+S(X.value)+" | å¾
å¬å: "+S($.value.length),1)]),B.value>=0&&B.value<$.value.length?(n(),k("div",en,[H.value?(n(),k("h3",tn,"æ£å¨ææ¾: "+S(B.value+1)+" / "+S($.value.length),1)):(n(),k("h3",ln,"å½ååè¯: "+S(B.value+1)+" / "+S($.value.length),1)),w.value?(n(),k("p",an,"åè¯: "+S($.value[B.value].word),1)):(n(),k("p",on,"åè¯å·²éè"))])):te("",!0),l("div",nn,[e(We,{modelValue:w.value,"onUpdate:modelValue":ee[7]||(ee[7]=ye=>w.value=ye),"active-text":"æ¾ç¤ºåè¯","inactive-text":"éèåè¯","inline-prompt":""},null,8,["modelValue"]),l("audio",{ref_key:"wordAudio",ref:O,src:`https://dict.youdao.com/dictvoice?type=0&audio=${((lt=F.value)==null?void 0:lt.word)||""}`},null,8,sn),e(Y,{onClick:ce,disabled:H.value},{default:t(()=>[...ee[20]||(ee[20]=[s("ææ¾å½ååè¯",-1)])]),_:1},8,["disabled"]),m?(n(),N(Y,{key:0,onClick:ee[8]||(ee[8]=ye=>c.value=!0)},{default:t(()=>
1[...ee[21]||(ee[21]=[s("æ¥åå
¸",-1)])]),_:1})):te("",!0),m?(n(),N(Y,{key:1,type:G.value?"success":"default",onClick:oe},{default:t(()=>[s(S(G.value?"å·²ææ¡":"æ è®°ä¸ºå·²ææ¡"),1)]),_:1},8,["type"])):te("",!0),m?(n(),N(Y,{key:2,onClick:ee[9]||(ee[9]=ye=>_.value=!_.value),type:"primary",class:"hide-text-xs"},{default:t(()=>[ee[22]||(ee[22]=l("span",null,"æå°åè¯",-1)),e(Xe,null,{default:t(()=>[e(tt)]),_:1})]),_:1})):te("",!0)])])):z.value&&M.value?(n(),k("div",rn,[...ee[23]||(ee[23]=[l("p",null,"该åå
ææ è¯æ±æ°æ®",-1)])])):(n(),k("div",un,[...ee[24]||(ee[24]=[l("p",null,"è¯·éæ©å¹´çº§ååå
å¼å§å¬å",-1)])])),m&&I.value.length>0&&_.value?(n(),k("div",dn,[ee[27]||(ee[27]=l("h3",null,"ç»ä¹ 模å¼",-1)),l("div",cn,[e(Y,{onClick:Z,type:"primary"},{default:t(()=>[...ee[25]||(ee[25]=[s("çæç»ä¹ å",-1)])]),_:1}),e(Y,{onClick:ee[10]||(ee[10]=ye=>h.value=!0),disabled:C.value.length===0},{default:t(()=>[...ee[26]||(ee[26]=[s("æå°é¢è§",-1)])]),_:1},8,["disabled"])]),C.value.length>0?(n(),k("div",pn,[l("div",mn,[(n(!0),k(ue,null,fe(C.value,(ye,Fe)=>(n(),k("div",{key:Fe,class:"exercise-word-item"},[l("span",vn,S(Fe+1)+".",1),l("span",fn,S(ye.hiddenWord),1),Me(l("span",{class:"word-original"},"("+S(ye.word)+")",513),[[it,v.value]])]))),128))]),l("div",_n,[e(Ge,{modelValue:v.value,"onUpdate:modelValue":ee[11]||(ee[11]=ye=>v.value=ye),label:"æ¾ç¤ºçæ¡"},null,8,["modelValue"])])])):te("",!0)])):te("",!0)]),e(qe,{modelValue:h.value,"onUpdate:modelValue":ee[13]||(ee[13]=ye=>h.value=ye),title:"æå°é¢è§",width:"80%",class:"print-preview-dialog","before-close":xe},{footer:t(()=>[l("div",kn,[e(Y,{onClick:ee[12]||(ee[12]=ye=>h.value=!1)},{default:t(()=>[...ee[29]||(ee[29]=[s("åæ¶",-1)])]),_:1}),e(Y,{type:"primary",onClick:Ve},{default:t(()=>[...ee[30]||(ee[30]=[s("æå°",-1)])]),_:1})])]),default:t(()=>[l("div",{ref_key:"printArea",ref:f,class:"print-area"},[ee[28]||(ee[28]=l("h2",{class:"print-title"},"åè¯å¬åç»ä¹ å",-1)),l("div",yn,[l("p",null,"年级: "+S(se(Ke)[z.value])+" åå
: "+S(M.value)+" åè¯æ°: "+S(C.value.length),1)]),l("div",gn,[(n(!0),k(ue,null,fe(C.value,(ye,Fe)=>(n(),k("div",{key:Fe,class:"print-exercise-word"},[l("span",bn,S(Fe+1)+".",1),l("span",wn,S(ye.hiddenWord),1),Me(l("span",{class:"print-word-original"},"("+S(ye.word)+")",513),[[it,u.value]])]))),128))])],512)]),_:1},8,["modelValue"]),e(qe,{modelValue:c.value,"onUpdate:modelValue":ee[14]||(ee[14]=ye=>c.value=ye),width:"50%",fullscreen:""},{default:t(()=>{var ye;return[e(yt,{word:(ye=F.value)==null?void 0:ye.word},null,8,["word"])]}),_:1},8,["modelValue"]),e(qe,{modelValue:y.value,"onUpdate:modelValue":ee[16]||(ee[16]=ye=>y.value=ye),"body-class":"feedback-dialog",title:"é®é¢åé¦"},{footer:t(()=>[l("div",hn,[e(Y,{onClick:ee[15]||(ee[15]=ye=>y.value=!1)},{default:t(()=>[...ee[31]||(ee[31]=[s("å
³é",-1)])]),_:1})])]),default:t(()=>[ee[32]||(ee[32]=l("div",{class:"feedback-content"},[l("p",null,"妿任ä½é®é¢æå»ºè®®ï¼è¯·è系管çåï¼"),l("img",{src:Xt,alt:"管çå微信äºç»´ç ",class:"wechat-qrcode"}),l("p",{class:"text-center"},"æ«æä¸æ¹äºç»´ç æ·»å 管çå微信")],-1))]),_:1},8,["modelValue"])],64)}}}),Vn=Ce($n,[["__scopeId","data-v-52a5f536"]]),Cn={class:"grade-unit-selector"},xn={class:"form-tip"},Dn={class:"word-count-info"},Sn={key:0,class:"composition-area"},Mn={class:"composition-header"},Un={class:"actions"},In={class:"composition-content"},Tn=["innerHTML"],An={class:"used-words"},zn={key:1,class:"no-vocabulary"},Ln={key:2,class:"no-selection"},Yn={key:3,class:"loading"},En=ge({__name:"VocabularyComposition",setup(q){const c=d([]),w=d(""),v=d(""),y=d(1),C=d([]),h=d([]),u=d(null),f=d(!1),m=d(!1),_=d(!1),p=d(!1),r=d(!1),o=d(null),g=window.speechSynthesis,V=d({wordCount:0,theme:"",style:"",writingGuide:""}),z=d(!1),M=Le(()=>{if(h.value.length===0)return"80-120";const D=Math.min(h.value.length*5,240),U=Math.round(D*.8),F=Math.round(D*1.2);return`${U}-${F}`}),L=async()=>{try{const D=await A.get("/api/public/vocabulary/grades");c.value=D.data.map(U=>({value:U,label:Ke[U]||U}))}catch(D){b.error("å 载年级é项失败"),console.error(D)}},I=async()=>
1{if(v.value="",C.value=[],h.value=[],u.value=null,!!w.value)try{const D=await A.get(`/api/vocabulary/grade/${w.value}/units`);C.value=D.data}catch(D){b.error("å è½½åå å表失败"),console.error(D)}},O=async()=>{if(!w.value||!v.value){b.warning("è¯·éæ©å¹´çº§ååå ");return}try{const D=await A.get(`/api/vocabulary/grade/${w.value}/unit/${v.value}`);if(h.value=D.data,h.value.length===0)b.info("该åå ææ è¯æ±æ°æ®");else{b.success(`å·²å è½½ ${h.value.length} 个åè¯`);const U=Math.min(h.value.length*5,240);V.value.wordCount=U}}catch(D){b.error("å è½½è¯æ±å¤±è´¥"),console.error(D)}},j=async()=>{if(h.value.length===0){b.warning("请å å è½½è¯æ±");return}f.value=!0,u.value=null;try{const D=h.value.map(F=>F.word),U=await A.post("/api/ai/compose",{words:D,grade:w.value,unit:v.value,word_count:V.value.wordCount||void 0,theme:V.value.theme||void 0,style:V.value.style||void 0,writing_guide:V.value.writingGuide||void 0},{timeout:D.length*6e4});u.value=U.data,b.success("ä½æçææå")}catch(D){b.error("使çæå¤±è´¥"),console.error(D)}finally{f.value=!1}},R=async()=>{if(u.value){z.value=!0;try{const D=`# ${u.value.title} 2 3## 使å 容 4${u.value.content.replace(/<[^>]+>/g,"")} 5 6## 使ç¨çè¯æ± 7${u.value.used_words.join(", ")} 8 9--- 10çææ¶é´: ${new Date().toLocaleString()}`;await A.post("/api/notes",{booking_id:0,content:D,is_public:!1}),b.success("ä¿å为ç¬è®°æå")}catch(D){b.error("ä¿åç¬è®°å¤±è´¥"),console.error(D)}finally{z.value=!1}}},K=Le(()=>u.value?u.value.content.replace(/<u>(.*?)<\/u>/g,'<strong style="color: #409EFF;">$1</strong>'):""),H=()=>{if(!u.value||m.value)return;m.value=!0;const D=new SpeechSynthesisUtterance(u.value.content.replace(/<[^>]+>/g,""));D.lang="en-US",D.rate=.9,D.onend=()=>{m.value=!1},D.onerror=()=>{m.value=!1,b.error("æè¯»å¤±è´¥")},g.speak(D)},x=async()=>{if(!(!u.value||_.value||p.value)){p.value=!0,_.value=!1;try{const D=await A.post("/api/ai/tts",{text:u.value.content.replace(/<[^>]+>/g,""),format:"mp3",speed:Number(y.value)},{responseType:"blob"}),U=window.URL.createObjectURL(new Blob([D.data],{type:"audio/mp3"}));o.value&&(o.value.src=U,o.value.onended=()=>{_.value=!1,window.URL.revokeObjectURL(U)},o.value.onerror=()=>{_.value=!1,window.URL.revokeObjectURL(U),b.error("é³é¢ææ¾å¤±è´¥")},o.value.play(),_.value=!0)}catch(D){b.error("é³é¢çæå¤±è´¥"),console.error(D)}finally{p.value=!1}}},B=async()=>{if(!(!u.value||r.value)){r.value=!0;try{const D=await A.post("/api/ai/tts",{text:u.value.content.replace(/<[^>]+>/g,""),format:"mp3",speed:Number(y.value)},{responseType:"blob"}),U=window.URL.createObjectURL(new Blob([D.data],{type:"audio/mp3"})),F=document.createElement("a");F.href=U,F.setAttribute("download",`${u.value.title}.mp3`),document.body.appendChild(F),F.click(),window.URL.revokeObjectURL(U),document.body.removeChild(F),b.success("é³é¢ä¸è½½æå")}catch(D){b.error("é³é¢ä¸è½½å¤±è´¥"),console.error(D)}finally{r.value=!1}}};return be(()=>{L()}),(D,U)=>{const F=a("el-option"),i=a("el-select"),$=a("el-col"),X=a("el-input"),G=a("el-icon"),E=a("el-button"),oe=a("el-input-number"),Q=a("el-form-item"),re=a("el-option-group"),me=a("el-form"),ie=a("el-popover"),ce=a("el-row"),ke=a("el-tag"),De=a("el-skeleton-item"),ve=a("el-skeleton"),W=a("el-main");return n(),N(W,{class:"main-content"},{default:t(()=>[U[17]||(U[17]=l("div",{class:"main-header header"},[l("h2",null,"AIåä½å©æ"),l("p",null,"æ ¹æ®æé年级ååå çè¯æ±çæå°ä½æ")],-1)),l("div",Cn,[e(ce,{gutter:8,align:"middle"},{default:t(()=>[e($,{span:6,xs:12},{default:t(()=>[e(i,{modelValue:w.value,"onUpdate:modelValue":U[0]||(U[0]=Z=>w.value=Z),placeholder:"éæ©å¹´çº§",onChange:I,style:{width:"100%"}},{default:t(()=>[(n(!0),k(ue,null,fe(c.value,Z=>(n(),N(F,{key:Z.value,label:Z.label,value:Z.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e($,{span:6,xs:12},{default:t(()=>[e(i,{modelValue:v.value,"onUpdate:modelValue":U[1]||(U[1]=Z=>v.value=Z),placeholder:"éæ©åå ",onChange:O,disabled:!w.value,style:{width:"100%"}},{default:t(()=>[(n(!0),k(ue,null,fe(C.value,Z=>(n(),N(F,{key:Z,label:Z,value:Z},null,8,["label","value"]))),128))]),_:1},8,["modelValue","disabled"])]),_:1}),e($,{span:4,xs:0},{default:t(()=>[e(X,{type:"number",modelValue:y.value,"onUpdate:modelValue":U[2]||(U[2]=Z=>y.value=Z),placeholder:"è¯é",max:"4",min:"0.25",step:"0.25"},{prepend:t(()=>[...U[7]||(U[7]=[s("è¯é",-1)])]),_:1},8,["modelValue"])]),_:1}),e($,{span:4,xs:12},{default:t(()=>[e(ie,{placement:"bottom",width:300,trigger:"click"},{reference:t(()=>[e(E,{style:{width:"100%"}},{default:t(()=>[e(G,null,{default:t(()=>[e(se(jt))]),_:1}),U[8]||(U[8]=l("span",{style:{"margin-left":"5px"}},"é«çº§",-1))]),_:1})]),default:t(()=>[e(me,{model:V.value,"label-width":"70px",class:"settings-form"},{default:t(()=>[e(Q,{label:"åæ°"},{default:t(()=>[e(oe,{modelValue:V.value.wordCount,"onUpdate:modelValue":U[3]||(U[3]=Z=>V.value.wordCount=Z),min:50,max:1e3,step:10,placeholder:"é»è®¤",style:{width:"100%"}},null,8,["modelValue"]),l("div",xn,"ç空使ç¨é»è®¤ï¼"+S(M.value)+"è¯ï¼",1)]),_:1}),e(Q,{label:"主é¢"},{default:t(()=>[e(X,{modelValue:V.value.theme,"onUpdate:modelValue":U[4]||(U[4]=Z=>V.value.theme=Z),placeholder:"å¦ï¼æçåæ",clearable:""},null,8,["modelValue"]),U[9]||(U[9]=l("div",{class:"form-tip"},"ç空使ç¨é»è®¤ä¸»é¢",-1))]),_:1}),e(Q,{label:"飿 ¼"},{default:t(()=>[e(i,{modelValue:V.value.style,"onUpdate:modelValue":U[5]||(U[5]=Z=>V.value.style=Z),placeholder:"éæ©æè¾å ¥",clearable:"",filterable:"","allow-create":"",style:{width:"100%"}},{default:t(()=>[e(re,{label:"å¸¸è§æä½"},{default:t(()=>[e(F,{label:"è®°åæ",value:"narrative"}),e(F,{label:"æåæ",value:"descriptive"}),e(F,{label:"说ææ",value:"expository"}),e(F,{label:"议论æ",value:"argumentative"})]),_:1}),e(re,{label:"åºç¨æä½"},{default:t(()=>[e(F,{label:"书信",value:"letter"}),e(F,{label:"é®ä»¶",value:"email"}),e(F,{label:"æ¥è®°",value:"diary"}),e(F,{label:"读åæ",value:"book-report"}),e(F,{label:"çå¾ä½æ",value:"picture-description"})]),_:1}),e(re,{label:"åææä½"},{default:t(()=>[e(F,{label:"æ äº",value:"story"}),e(F,{label:"æ¼è®²ç¨¿",value:"speech"}),e(F,{label:"æ°é»æ¥é",value:"news-report"}),e(F,{label:"对è¯",value:"dialogue"})]),_:1})]),_:1},8,["modelValue"]),U[10]||(U[10]=l("div",{class:"form-tip"}
10,"å¯é项æèªå®ä¹",-1))]),_:1}),e(Q,{label:"åä½æè·¯"},{default:t(()=>[e(X,{modelValue:V.value.writingGuide,"onUpdate:modelValue":U[6]||(U[6]=Z=>V.value.writingGuide=Z),type:"textarea",rows:3,placeholder:"å¦ï¼æ¨¡ä»¿ãå婿³¢ç¹ãçéæ³ä¸çï¼æè
åä¸ä¸ªå
³äºåè°çæ
äº",clearable:""},null,8,["modelValue"]),U[11]||(U[11]=l("div",{class:"form-tip"},"è¡¥å
åä½è¦æ±æåè飿 ¼",-1))]),_:1})]),_:1},8,["model"])]),_:1})]),_:1}),e($,{span:4,xs:12},{default:t(()=>[e(E,{onClick:j,type:"primary",disabled:!h.value.length||f.value,loading:f.value,style:{width:"100%"}},{default:t(()=>[...U[12]||(U[12]=[s(" çæä½æ ",-1)])]),_:1},8,["disabled","loading"])]),_:1})]),_:1}),w.value&&v.value&&h.value.length>0?(n(),N(ce,{key:0},{default:t(()=>[e($,{span:24},{default:t(()=>[l("div",Dn,[s(S(se(Ke)[w.value])+" - "+S(v.value)+"ï¼æ¬åå
å
±æ ",1),l("strong",null,S(h.value.length),1),U[13]||(U[13]=s(" 个åè¯ ",-1))])]),_:1})]),_:1})):te("",!0)]),u.value?(n(),k("div",Sn,[l("div",Mn,[l("h3",null,S(u.value.title),1),l("div",Un,[e(E,{onClick:H,type:"primary",disabled:m.value||!u.value.content},{default:t(()=>[s(S(m.value?"æè¯»ä¸...":"æè¯»ä½æ"),1)]),_:1},8,["disabled"]),e(E,{onClick:x,type:"success",disabled:_.value||!u.value.content||p.value},{default:t(()=>[s(S(_.value?"AIæè¯»ä¸...":p.value?"çæé³é¢ä¸...":"AIæè¯»ä½æ"),1)]),_:1},8,["disabled"]),e(E,{onClick:B,type:"warning",disabled:!u.value.content||r.value,loading:r.value},{default:t(()=>[s(S(r.value?"ä¸è½½ä¸...":"ä¸è½½é³é¢"),1)]),_:1},8,["disabled","loading"]),e(E,{onClick:R,type:"info",disabled:!u.value.content||z.value,loading:z.value},{default:t(()=>[s(S(z.value?"ä¿åä¸...":"ä¿å为ç¬è®°"),1)]),_:1},8,["disabled","loading"])])]),l("div",In,[l("p",{innerHTML:K.value},null,8,Tn)]),l("div",An,[U[14]||(U[14]=l("h4",null,"使ç¨çè¯æ±:",-1)),(n(!0),k(ue,null,fe(u.value.used_words,Z=>(n(),N(ke,{key:Z,type:"success",style:{margin:"5px"}},{default:t(()=>[s(S(Z),1)]),_:2},1024))),128))]),l("audio",{ref_key:"audioPlayer",ref:o,style:{display:"none"}},null,512)])):!f.value&&w.value&&v.value&&h.value.length===0?(n(),k("div",zn,[...U[15]||(U[15]=[l("p",null,"该åå
ææ è¯æ±æ°æ®",-1)])])):!f.value&&(!w.value||!v.value)?(n(),k("div",Ln,[...U[16]||(U[16]=[l("p",null,"è¯·éæ©å¹´çº§ååå
以çæä½æ",-1)])])):te("",!0),f.value?(n(),k("div",Yn,[e(ve,{animated:""},{template:t(()=>[e(De,{variant:"h3",style:{width:"50%"}}),e(De,{variant:"p",style:{width:"100%","margin-top":"20px"}}),e(De,{variant:"p",style:{width:"80%","margin-top":"10px"}}),e(De,{variant:"p",style:{width:"90%","margin-top":"10px"}})]),_:1})])):te("",!0)]),_:1})}}}),Rn=Ce(En,[["__scopeId","data-v-772ef131"]]),$t=["æ°å¦","ç©ç","åå¦","çç©","åå²","å°ç","æ¿æ²»","è±è¯","è¯æ","éæ³","å
¶ä»"],rt=["ä¸å¹´çº§ä¸","ä¸å¹´çº§ä¸","äºå¹´çº§ä¸","äºå¹´çº§ä¸","ä¸å¹´çº§ä¸","ä¸å¹´çº§ä¸","å年级ä¸","å年级ä¸","äºå¹´çº§ä¸","äºå¹´çº§ä¸","å
年级ä¸","å
年级ä¸","ä¸å¹´çº§ä¸","ä¸å¹´çº§ä¸","å
«å¹´çº§ä¸","å
«å¹´çº§ä¸","ä¹å¹´çº§ä¸","ä¹å¹´çº§ä¸","é«ä¸ä¸","é«ä¸ä¸","é«äºä¸","é«äºä¸","é«ä¸ä¸","é«ä¸ä¸"],It=["åéé¢","å¤éé¢","填空é¢","ç®çé¢","夿é¢","计ç®é¢"],Qe=q=>{if(!q)return"";try{return q=q.replace(/\$(.*?)\$/g,(c,w)=>{try{return Pt.renderToString(w,{throwOnError:!1})}catch{return c}}),q=q.replace(/\$\$(.*?)\$\$/g,(c,w)=>{try{return Pt.renderToString(w,{displayMode:!0,throwOnError:!1})}catch{return c}}),q}catch{return q}},Fn={class:"card-header"},Bn={class:"search-section"},Pn={class:"topic-cell"},Hn={class:"topic-text"},On={key:1},qn={key:1},Nn={key:1},jn={key:1},Wn={class:"pagination-container"},Kn={class:"dialog-footer"},Gn={class:"dialog-footer"},Jn=["innerHTML"],Xn={key:0},Qn={class:"options"},Zn=["innerHTML"],es=["innerHTML"],ts=["innerHTML"],ls=["innerHTML"],as={key:0},os={key:0},ns={class:"dialog-footer"},ss={class:"ai-prompt-section"},rs={class:"upload-drag-area"},is={key:0,class:"recognition-results"},us={class:"dialog-footer"},ds=ge({__name:"MistakeTracker",setup(q,{expose:c}){const w=d([]),v=d(!1),y=d(!1),C=d(!1),h=d(null),u=d([]),f=d(!1),m=d(!1),_=d(null),p=d(window.innerWidth<=768),r=JSON.parse(sessionStorage.getItem("user")||"{}"),o=d(!1),g=d(!1),V=d([]),z=Ae({count:2,difficulty:3}),M=d(!1),L=d(""),I=d(!1),O=Ae({keyword:"",subject:"",question_type:"",status:"",grade:"",mastery_level:""}
10),j=Ae({currentPage:1,pageSize:10,total:0}),R=d("form"),K=d(""),H=d(r.grade),x=d([]),B=d(r.grade),D=d([]),U=d(!1),F=d(),i=Ae({subject:"",question_type:"",stem:"",option_a:"",option_b:"",option_c:"",option_d:"",answer:"",topic:"",grade:r.grade}),$={subject:[{required:!0,message:"è¯·éæ©å¦ç§",trigger:"change"}],question_type:[{required:!0,message:"è¯·éæ©é¢å",trigger:"change"}],grade:[{required:!0,message:"è¯·éæ©å¹´çº§",trigger:"change"}],stem:[{required:!0,message:"请è¾å
¥é¢å¹²",trigger:"blur"}],option_a:[{required:!1,message:"请è¾å
¥é项A",trigger:"blur"}],option_b:[{required:!1,message:"请è¾å
¥é项B",trigger:"blur"}],option_c:[{required:!1,message:"请è¾å
¥é项C",trigger:"blur"}],option_d:[{required:!1,message:"请è¾å
¥é项D",trigger:"blur"}],topic:[{required:!1,message:"请è¾å
¥é¢ç®æç¥è¯ç¹",trigger:"blur"}],answer:[{required:!0}]},X=()=>{p.value=window.innerWidth<=768};be(()=>{window.addEventListener("resize",X),G(1),$.option_a&&($.option_a[0].required=!1),$.option_b&&($.option_b[0].required=!1),$.option_c&&($.option_c[0].required=!1),$.option_d&&($.option_d[0].required=!1)}),ct(()=>{window.removeEventListener("resize",X)});const G=async(le=1)=>{try{v.value=!0;const T={page:le,page_size:j.pageSize,keyword:O.keyword,subject:O.subject,question_type:O.question_type,status:O.status,grade:O.grade,mastery_level:O.mastery_level},he=await A.get("/api/my-mistakes",{params:T});w.value=he.data.mistakes||[],j.total=he.data.total||0,j.currentPage=le}catch(T){console.error("Failed to load mistakes:",T),b.error("å è½½éé¢é失败")}finally{v.value=!1}},E=le=>{h.value=le,Object.assign(i,{subject:le.subject,question_type:le.question_type,stem:le.stem||"",option_a:le.option_a||"",option_b:le.option_b||"",option_c:le.option_c||"",option_d:le.option_d||"",answer:le.answer||"",topic:le.topic,grade:le.grade||""}),W(le.question_type),R.value="form",C.value=!0},oe=async le=>{try{await et.confirm("ç¡®å®è¦å é¤è¿æ¡éé¢è®°å½åï¼","确认å é¤",{confirmButtonText:"ç¡®å®",cancelButtonText:"åæ¶",type:"warning"}),await A.delete(`/api/mistakes/${le}`),w.value=w.value.filter(T=>T.id!==le),u.value=u.value.filter(T=>T.id!==le),b.success("å 餿å")}catch(T){T!=="cancel"&&(console.error("Failed to delete mistake:",T),b.error("å é¤éé¢å¤±è´¥"))}},Q=async()=>R.value==="json"?me():R.value==="screenshot"?De():re(),re=async()=>{var le;if(await((le=F.value)==null?void 0:le.validate())){y.value=!0;try{let T;if(h.value){T=await A.put(`/api/mistakes/${h.value.id}`,i);const he=w.value.findIndex(Te=>Te.id===h.value.id);he!==-1&&(w.value[he]=T.data),b.success("é颿´æ°æå")}else T=await A.post("/api/mistakes",i),w.value.unshift(T.data),b.success("æ·»å é颿å");ve(),C.value=!1}catch(T){console.error("Failed to save mistake:",T),b.error(h.value?"æ´æ°éé¢å¤±è´¥":"æ·»å éé¢å¤±è´¥")}finally{y.value=!1}}},me=async()=>{if(!K.value.trim()){b.warning("请è¾å
¥JSONæ ¼å¼çé颿°æ®");return}try{const le=JSON.parse(K.value);if(!Array.isArray(le)){b.error("JSONæ°æ®åºä¸ºæ°ç»æ ¼å¼");return}if(le.length===0){b.warning("JSONæ°æ®ä¸è½ä¸ºç©º");return}y.value=!0;const T=le.map(Be=>(Be.grade=H.value,A.post("/api/mistakes",Be))),Te=(await Promise.all(T)).map(Be=>Be.data);w.value.unshift(...Te),b.success(`æåæ·»å ${le.length}æ¡éé¢`),ve(),C.value=!1}catch(le){le instanceof SyntaxError?b.error("JSONæ ¼å¼é误ï¼è¯·æ£æ¥åéè¯"):(console.error("Failed to save mistakes from JSON:",le),b.error("æ·»å éé¢å¤±è´¥"))}finally{y.value=!1}},ie=le=>{ke(le)},ce=()=>{D.value=[]},ke=async le=>{if(le.raw){U.value=!0;try{const T=new FormData;T.append("image",le.raw);const he=await A.post("/api/mistakes/recognize",T,{headers:{"Content-Type":"multipart/form-data"}});he.data&&he.data.mistakes&&(D.value.push(...he.data.mistakes),b.success(`æåè¯å« ${he.data.mistakes.length} éé¢ç®`))}catch(T){console.error("Failed to recognize screenshot:",T),b.error("AIè¯å«å¤±è´¥ï¼è¯·éè¯")}finally{U.value=!1}}},De=async()=>{if(x.value.length===0){b.warning("请å
ä¸ä¼ æªå¾");return}if(D.value.length===0){b.warning("请çå¾
AIè¯å«å®æï¼æéæ°ä¸ä¼ æªå¾");return}
10if(!B.value){b.warning("è¯·éæ©å¹´çº§");return}y.value=!0;try{const le=D.value.map(Te=>(Te.grade=B.value,A.post("/api/mistakes",Te))),he=(await Promise.all(le)).map(Te=>Te.data);w.value.unshift(...he),b.success(`æåæ·»å ${D.value.length} æ¡éé¢`),ve(),C.value=!1}catch(le){console.error("Failed to save mistakes from screenshot:",le),b.error("æ·»å éé¢å¤±è´¥")}finally{y.value=!1}},ve=()=>{Object.assign(i,{subject:"",question_type:"",stem:"",option_a:"",option_b:"",option_c:"",option_d:"",answer:"",grade:""}),K.value="",x.value=[],B.value=r.grade,D.value=[],R.value="form",h.value=null},W=le=>{le!=="åéé¢"?(i.option_a="",i.option_b="",i.option_c="",i.option_d="",$.option_a&&($.option_a[0].required=!1),$.option_b&&($.option_b[0].required=!1),$.option_c&&($.option_c[0].required=!1),$.option_d&&($.option_d[0].required=!1)):($.option_a&&($.option_a[0].required=!0),$.option_b&&($.option_b[0].required=!0),$.option_c&&($.option_c[0].required=!0),$.option_d&&($.option_d[0].required=!0))},Z=le=>de(le).format("YYYY-MM-DD HH:mm"),Ve=()=>{K.value=`[ 11 { 12 "subject": "æ°å¦", 13 "question_type": "åéé¢", 14 "stem": "å·²ç¥å½æ°$f(x)=x^2$ï¼æ±$f(2)$çå¼", 15 "option_a": "1", 16 "option_b": "2", 17 "option_c": "4", 18 "option_d": "8", 19 "answer": "C", 20 "topic": "äºæ¬¡å½æ°", 21 "grade": "é«äºä¸" 22 }, 23 { 24 "subject": "æ°å¦", 25 "question_type": "填空é¢", 26 "topic": "ä¸è§å½æ°", 27 "description": "å¨ç´è§ä¸è§å½¢ABCä¸ï¼è¥è§C为ç´è§ï¼ä¸$\\sin A=\\frac{1}{2}$ï¼å$\\cos A=$____", 28 "answer": "$\\frac{\\sqrt{3}}{2}$", 29 "grade": "ä¹å¹´çº§ä¸" 30 } 31]`},xe=()=>{navigator.clipboard.writeText(`ä½ æ¯ä¸ä¸ªéé¢åæå©æãè¯·ä¸¥æ ¼éµå¾ªä»¥ä¸è§åå¤çè¯å·å¾çå¹¶è¾åºéé¢ä¿¡æ¯ï¼ 32 331. ä¿¡æ¯æåè§åï¼ 34 - åªæåè¯å·ä¸åå§å°å·ææ åæ¾ç¤ºçé¢ç®å 容ï¼å æ¬é¢å¹²ãé项ï¼å¦æä¸ºéæ©é¢ï¼ã 35 - å®å ¨å¿½ç¥æææåå 容ï¼å¦å¦çä½çãç¬è®°ãæ¶æ¹ç迹çï¼ã 36 - 䏿åä»»ä½éé¢å¹²æé项çæåï¼å¦é¢å·ãæ¹æ¹æ è®°ãåæ°ã页ç ãæ å ³ç¬¦å·çï¼ã 37 382. æ°å¦å ¬å¼å¤çè§åï¼ 39 - 对äºå 嫿°å¦å ¬å¼çé¢ç®ï¼å¿ é¡»å°æææ°å¦å ¬å¼è½¬æ¢ä¸ºLaTeXæ ¼å¼ 40 - 使ç¨è¡å å ¬å¼æ ¼å¼ï¼å³ç¨$...$å å´ç®åå ¬å¼ï¼ç¨$$...$$å å´ç¬ç«å ¬å¼ 41 - ä¿æåæä¸çæåæè¿°ä¸åï¼åªå°æ°å¦è¡¨è¾¾å¼è½¬æ¢ä¸ºLaTeXæ ¼å¼ 42 - 示ä¾ï¼ 43 * "å·²ç¥å½æ°f(x)=x²" åºè½¬æ¢ä¸º "å·²ç¥å½æ°$f(x)=x^2$" 44 * "æ±è§£æ¹ç¨ x²+2x+1=0" åºè½¬æ¢ä¸º "æ±è§£æ¹ç¨ $x^2+2x+1=0$" 45 * ç¬ç«çå ¬å¼è¡åºä½¿ç¨$$...$$æ ¼å¼ 46 473. è¾åºæ ¼å¼è¦æ±ï¼ 48 - æ¯ééé¢æä»¥ä¸ JSON å¯¹è±¡ç»æè¾åºï¼ 49 { 50 "subject": "å¦ç§åç§°ï¼å¦æ°å¦ãè¯æãè±è¯ç", 51 "question_type": "é¢åï¼å¦åéé¢ãå¤éé¢ã填空é¢ã计ç®é¢ãè§£çé¢ã使é¢ãå®éªé¢ç", 52 "stem": "é¢ç®é¢å¹²ï¼ä» ééæ©é¢ï¼ï¼å ¶ä¸çæ°å¦å ¬å¼å¿ 须使ç¨LaTeXæ ¼å¼",
53 "option_a": "é项Aï¼ä» ééæ©é¢ï¼ï¼å ¶ä¸çæ°å¦å ¬å¼å¿ 须使ç¨LaTeXæ ¼å¼", 54 "option_b": "é项Bï¼ä» ééæ©é¢ï¼ï¼å ¶ä¸çæ°å¦å ¬å¼å¿ 须使ç¨LaTeXæ ¼å¼", 55 "option_c": "é项Cï¼ä» ééæ©é¢ï¼ï¼å ¶ä¸çæ°å¦å ¬å¼å¿ 须使ç¨LaTeXæ ¼å¼", 56 "option_d": "é项Dï¼ä» ééæ©é¢ï¼ï¼å ¶ä¸çæ°å¦å ¬å¼å¿ 须使ç¨LaTeXæ ¼å¼", 57 "answer": "æ£ç¡®çæ¡ï¼éæ©é¢ä¸ºA/B/C/Dï¼å ¶ä»é¢åä¸ºå ·ä½å 容ï¼", 58 "topic": "é¢ç®æ¶åçç¥è¯ç¹æä¸»é¢", 59 "grade": "é¢ç®æå±å¹´çº§ï¼å¦"ä¸å¹´çº§ä¸"ã"ä¸å¹´çº§ä¸"ã"äºå¹´çº§ä¸"ã"äºå¹´çº§ä¸"ã...ã"é«ä¸ä¸"ã"é«ä¸ä¸"" 60 } 61 - å°ææéé¢å¯¹è±¡ç»æä¸ä¸ª JSON æ°ç»ã 62 - ééæ©é¢çé¢ç®ä¸ï¼stemãoption_a çåæ®µç空å符串æä¸éç¨å段å¯çç¥ï¼æ ¹æ®å ·ä½é¢ç®ç±»åè°æ´ï¼ã 63 644. è¾åºçº¦æï¼ 65 - åªè¾åºåæ³ç JSON æ ¼å¼ï¼ä¸å å«ä»»ä½é¢å¤çæåãè§£éææ è®°ã 66 - ç¡®ä¿å å®¹ä» æ¥èªé¢ç®æ¬èº«ï¼ä¸ä¸ºåå§å°å·ææ¬ã 67 - æææ°å¦å ¬å¼å¿ 须使ç¨LaTeXæ ¼å¼è¡¨ç¤ºã 68 69示ä¾è¾åºæ ¼å¼ï¼ 70[ 71 { 72 "subject": "æ°å¦", 73 "question_type": "åéé¢", 74 "stem": "å·²ç¥å½æ°$f(x)=x^2$ï¼æ±$f(2)$çå¼", 75 "option_a": "1", 76 "option_b": "2", 77 "option_c": "4", 78 "option_d": "8", 79 "answer": "C", 80 "topic": "äºæ¬¡å½æ°", 81 "grade": "é«äºä¸" 82 }, 83 { 84 "subject": "æ°å¦", 85 "question_type": "填空é¢", 86 "topic": "ä¸è§å½æ°", 87 "stem": "å¨ç´è§ä¸è§å½¢ABCä¸ï¼è¥è§C为ç´è§ï¼ä¸$\\sin A=\\frac{1}{2}$ï¼å$\\cos A=$____", 88 "answer": "$\\frac{\\sqrt{3}}{2}$", 89 "grade": "ä¹å¹´çº§ä¸" 90 } 91]`).then(()=>{b.success("AIæç¤ºè¯å·²å¤å¶å°åªè´´æ¿")}).catch(T=>{console.error("å¤å¶å¤±è´¥:",T),b.error("å¤å¶å¤±è´¥ï¼è¯·æå¨éæ©å¤å¶")})},ae=le=>{u.value=le},ee=async()=>{if(u.value.length===0){b.warning("请å éæ©è¦å é¤çéé¢");return}try{await et.confirm(`ç¡®å®è¦å é¤éä¸ç ${u.value.length} æ¡éé¢è®°å½åï¼æ¤æä½ä¸å¯æ¢å¤ã`,"确认æ¹éå é¤",{confirmButtonText:"ç¡®å®",cancelButtonText:"åæ¶",type:"warning"});const le=u.value.map(T=>T.id);await A.delete("/api/mistakes/batch",{data:{ids:le}}),w.value=w.value.filter(T=>!le.includes(T.id)),u.value=[],b.success(`æåå é¤ ${le.length} æ¡éé¢`)}catch(le){le!=="cancel"&&(console.error("Failed to batch delete mistakes:",le),b.error("æ¹éå é¤éé¢å¤±è´¥"))}},Y=()=>{G(1)},P=()=>{O.keyword="",O.subject="",O.question_type="",O.status="",O.grade="",O.mastery_level="",G(1)},ne=le=>{j.pageSize=le,G(1)},we=le=>{G(le)},_e=()=>{if(u.value.length===0){b.warning("请å éæ©è¦é¢è§çéé¢");return}f.value=!0},Se=()=>{if(u.value.length===0){b.warning("请å éæ©éé¢");return}o.value=!0},We=async()=>{if(u.value.length===0){b.warning("请å éæ©éé¢");return}g.value=!0;try{const le=await A.post("/api/ai/generate-exam",{mistakes:u.value,count:z.count,difficulty:z.difficulty},{timeout:z.count*6e4});V.value=le.data.questions,o.value=!1,f.value=!0,b.success("è¯å·çææå")}catch(le){console.error("AIçæè¯å·å¤±è´¥:",le),b.error("è¯å·çæå¤±è´¥")}finally{g.value=!1}},tt=()=>{dt(()=>{if(_.value){const le=_.value.innerHTML,T=document.body.innerHTML;document.body.innerHTML=` 92 <html> 93 <head> 94 <title>éé¢è¯å·</title> 95 <style> 96 body { font-family: Arial, sans-serif; font-size: 14px; } 97 .options p { margin: 5px 0; } 98 .mistake-details p { margin: 8px 0; } 99 @media print { 100 body { margin: 15px; } 101 .print-area { max-width: 100%; } 102 } 103 </style> 104 </head> 105 <body> 106 ${le} 107 </body> 108 </html> 109 `,window.print(),document.body.innerHTML=T,location.reload()}})},Xe=async()=>{try{b.info("æ£å¨å¯¼åºé颿°æ®...");const he=((await A.get("/api/my-mistakes",{params:{page:1,page_size:1e4}})).data.mistakes||[]).map(Re=>({subject:Re.subject,question_type:Re.question_type,stem:Re.stem,option_a:Re.option_a,option_b:Re.option_b,option_c:Re.option_c,option_d:Re.option_d,answer:Re.answer,topic:Re.topic,grade:Re.grade,description:Re.description,created_at:Re.created_at,updated_at:Re.updated_at})),Te=JSON.stringify(he,null,2),Be=new Blob([Te],{type:"application/json"}),Ue=URL.createObjectURL(Be),ze=document.createElement("a");ze.href=Ue,ze.download=`éé¢é_${de().format("YYYYMMDD_HHmmss")}.json`,document.body.appendChild(ze),ze.click(),document.body.removeChild(ze),URL.revokeObjectURL(Ue),b.success(`æåå¯¼åº ${he.length} æ¡éé¢`)}catch(le){console.error("Failed to export mistakes:",le),b.error("导åºéé¢å¤±è´¥")}},Ge=le=>({not_practiced:"æªç»ä¹ ",medium:"é¾åº¦éä¸",hard:"æ¯è¾é¾",mastered:"å·²ææ¡"})[le]||"æªç»ä¹ ",qe=le=>({not_practiced:"info",medium:"warning",hard:"danger",mastered:"success"})[le]||"info",lt=async(le,T)=>{try{await A.put(`/api/mistakes/${le.id}`,{mastery_level:T}),le.mastery_level=T,b.success("ææ¡ç¨åº¦å·²æ´æ°")}catch(he){console.error("Failed to update mastery level:",he),b.error("æ´æ°ææ¡ç¨åº¦å¤±è´¥")}},ye=()=>{L.value="",M.value=!0},Fe=async()=>
109{if(!L.value){b.warning("è¯·éæ©ææ¡ç¨åº¦");return}if(u.value.length===0){b.warning("请å
éæ©è¦è®¾ç½®çéé¢");return}I.value=!0;try{const le=u.value.map(T=>T.id);await A.put("/api/mistakes/batch",{ids:le,mastery_level:L.value}),w.value.forEach(T=>{le.includes(T.id)&&(T.mastery_level=L.value)}),b.success(`æå设置 ${le.length} æ¡éé¢çææ¡ç¨åº¦`),M.value=!1,u.value=[]}catch(le){console.error("Failed to batch update mastery level:",le),b.error("æ¹éè®¾ç½®ææ¡ç¨åº¦å¤±è´¥")}finally{I.value=!1}};return c({loadMistakes:G,exportAllMistakes:Xe}),(le,T)=>{const he=a("el-button"),Te=a("el-input"),Be=a("el-col"),Ue=a("el-option"),ze=a("el-select"),Re=a("el-row"),Pe=a("el-table-column"),at=a("el-tag"),bt=a("el-icon"),Ze=a("el-dropdown-item"),pe=a("el-dropdown-menu"),$e=a("el-dropdown"),Ne=a("el-table"),Lt=a("el-pagination"),tl=a("el-card"),He=a("el-form-item"),St=a("el-form"),wt=a("el-dialog"),ll=a("el-input-number"),al=a("el-rate"),ol=a("el-switch"),Mt=a("el-tab-pane"),nl=a("el-upload"),sl=a("el-tabs"),rl=Ee("loading");return n(),k(ue,null,[e(tl,null,{header:t(()=>[l("div",Fn,[T[42]||(T[42]=l("span",null,"éé¢é",-1)),l("div",null,[e(he,{type:"primary",size:"small",onClick:G},{default:t(()=>[...T[37]||(T[37]=[s(" å·æ° ",-1)])]),_:1}),e(he,{type:"primary",size:"small",onClick:T[0]||(T[0]=J=>C.value=!0)},{default:t(()=>[...T[38]||(T[38]=[s(" æ·»å éé¢ ",-1)])]),_:1}),u.value.length!==0?(n(),N(he,{key:0,type:"danger",size:"small",onClick:ee},{default:t(()=>[s(" æ¹éå é¤ ("+S(u.value.length)+") ",1)]),_:1})):te("",!0),u.value.length!==0?(n(),N(he,{key:1,type:"primary",size:"small",onClick:ye},{default:t(()=>[s(" æ¹éè®¾ç½®ææ¡ç¨åº¦ ("+S(u.value.length)+") ",1)]),_:1})):te("",!0),u.value.length!==0?(n(),N(he,{key:2,type:"success",size:"small",onClick:_e},{default:t(()=>[...T[39]||(T[39]=[s(" çæè¯å· ",-1)])]),_:1})):te("",!0),u.value.length!==0?(n(),N(he,{key:3,type:"warning",size:"small",onClick:Se},{default:t(()=>[...T[40]||(T[40]=[s(" AIçæè¯å· ",-1)])]),_:1})):te("",!0),e(he,{type:"info",size:"small",onClick:Xe},{default:t(()=>[...T[41]||(T[41]=[s(" å¯¼åº ",-1)])]),_:1})])])]),default:t(()=>[l("div",Bn,[e(Re,{gutter:20},{default:t(()=>[e(Be,{span:4,xs:24},{default:t(()=>[e(Te,{modelValue:O.keyword,"onUpdate:modelValue":T[1]||(T[1]=J=>O.keyword=J),placeholder:"ç¥è¯ç¹",clearable:"",onKeyup:Je(Y,["enter"])},null,8,["modelValue"])]),_:1}),e(Be,{span:4,xs:24},{default:t(()=>[e(ze,{modelValue:O.grade,"onUpdate:modelValue":T[2]||(T[2]=J=>O.grade=J),placeholder:"年级",clearable:"",style:{width:"100%"},onChange:Y},{default:t(()=>[(n(!0),k(ue,null,fe(se(rt),J=>(n(),N(Ue,{label:J,value:J,key:J},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(Be,{span:4,xs:24},{default:t(()=>[e(ze,{modelValue:O.subject,"onUpdate:modelValue":T[3]||(T[3]=J=>O.subject=J),placeholder:"å¦ç§",clearable:"",style:{width:"100%"},onChange:Y},{default:t(()=>[(n(!0),k(ue,null,fe(se($t),J=>(n(),N(Ue,{label:J,value:J,key:J},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(Be,{span:4,xs:24},{default:t(()=>[e(ze,{modelValue:O.question_type,"onUpdate:modelValue":T[4]||(T[4]=J=>O.question_type=J),placeholder:"é¢å",clearable:"",style:{width:"100%"},onChange:Y},{default:t(()=>[(n(!0),k(ue,null,fe(se(It),J=>(n(),N(Ue,{label:J,value:J,key:J},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(Be,{span:4,xs:24},{default:t(()=>[e(ze,{modelValue:O.mastery_level,"onUpdate:modelValue":T[5]||(T[5]=J=>O.mastery_level=J),placeholder:"ææ¡ç¨åº¦",clearable:"",style:{width:"100%"},onChange:Y},{default:t(()=>[e(Ue,{label:"æªç»ä¹ ",value:"not_practiced"}),e(Ue,{label:"é¾åº¦éä¸",value:"medium"}),e(Ue,{label:"æ¯è¾é¾",value:"hard"}),e(Ue,{label:"å·²ææ¡",value:"mastered"})]),_:1},8,["modelValue"])]),_:1}),e(Be,{span:4,xs:24},{default:t(()=>[e(he,{type:"primary",onClick:Y},{default:t(()=>[...T[43]||(T[43]=[s("æç´¢",-1)])]),_:1}),e(he,{onClick:P},{default:t(()=>[...T[44]||(T[44]=[s("éç½®",-1)])]),_:1})]),_:1})]),_:1})]),Me((n(),N(Ne,{data:w.value,style:{width:"100%"},"show-overflow-tooltip":"","row-key":"id",onSelectionChange:ae},{default:t(()=>[e(Pe,{type:"selection",width:"40"}),e(Pe,{prop:"topic",label:"ç¥è¯ç¹","min-width":"110"},{default:t(({row:J})=>[l("div",Pn,[l("span",Hn,S(J.stem),1)])]),_:1}),e(Pe,{prop:"grade",label:"年级",width:"80"},{default:t(({row:J})=>[J.grade?(n(),N(at,{key:0,size:"small"},{default:t(()=>[s(S(J.grade),1)]),_:2},1024)):(n(),k("span",On,"-"))]),_:1}),e(Pe,{prop:"subject",label:"å¦ç§",width:"80"},{default:t(({row:J})=>[J.subject?(n(),N(at,{key:0,size:"small"},{default:t(()=>[s(S(J.subject),1)]),_:2},1024)):(n(),k("span",qn,"-"))]),_:1}),e(Pe,{prop:"topic",label:"èç¹",width:"150"},{default:t(({row:J})=>[J.topic?(n(),N(at,{key:0,size:"small"},{default:t(()=>[s(S(J.topic),1)]),_:2},1024)):(n(),k("span",Nn,"-"))]),_:1}),e(Pe,{prop:"question_type",label:"é¢å",width:"120"},{default:t(({row:J})=>[J.question_type?(n(),N(at,{key:0,size:"small"},{default:t(()=>[s(S(J.question_type),1)]),_:2},1024)):(n(),k("span",jn,"-"))]),_:1}),e(Pe,{prop:"mastery_level",label:"ææ¡ç¨åº¦",width:"120"},{default:t(({row:J})=>[e($e,{onCommand:ot=>lt(J,ot)},{dropdown:t(()=>[e(pe,null,{default:t(()=>[e(Ze,{command:"not_practiced"},{default:t(()=>[...T[45]||(T[45]=[s("æªç»ä¹ ",-1)])]),_:1}),e(Ze,{command:"medium"},{default:t(()=>[...T[46]||(T[46]=[s("é¾åº¦éä¸",-1)])]),_:1}),e(Ze,{command:"hard"},{default:t(()=>[...T[47]||(T[47]=[s("æ¯è¾é¾",-1)])]),_:1}),e(Ze,{command:"mastered"},{default:t(()=>[...T[48]||(T[48]=[s("å·²ææ¡",-1)])]),_:1})]),_:1})]),default:t(()=>
109[e(at,{type:qe(J.mastery_level),size:"small",style:{cursor:"pointer"}},{default:t(()=>[s(S(Ge(J.mastery_level))+" ",1),e(bt,{style:{"margin-left":"4px"}},{default:t(()=>[e(se(Wt))]),_:1})]),_:2},1032,["type"])]),_:2},1032,["onCommand"])]),_:1}),e(Pe,{prop:"created_at",label:"æ·»å æ¶é´",width:"180"},{default:t(({row:J})=>[s(S(Z(J.created_at)),1)]),_:1}),e(Pe,{label:"æä½",width:"150"},{default:t(({row:J})=>[e(he,{type:"primary",size:"small",onClick:ot=>E(J)},{default:t(()=>[...T[49]||(T[49]=[s(" ç¼è¾ ",-1)])]),_:1},8,["onClick"]),e(he,{type:"danger",size:"small",onClick:ot=>oe(J.id)},{default:t(()=>[...T[50]||(T[50]=[s(" å é¤ ",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[rl,v.value]]),l("div",Wn,[e(Lt,{"current-page":j.currentPage,"onUpdate:currentPage":T[6]||(T[6]=J=>j.currentPage=J),"page-size":j.pageSize,"onUpdate:pageSize":T[7]||(T[7]=J=>j.pageSize=J),"page-sizes":[10,20,50,100],total:j.total,layout:"total, sizes, prev, pager, next, jumper",onSizeChange:ne,onCurrentChange:we},null,8,["current-page","page-size","total"])])]),_:1}),e(wt,{modelValue:M.value,"onUpdate:modelValue":T[10]||(T[10]=J=>M.value=J),title:"æ¹éè®¾ç½®ææ¡ç¨åº¦",width:"400px"},{footer:t(()=>[l("span",Kn,[e(he,{onClick:T[9]||(T[9]=J=>M.value=!1)},{default:t(()=>[...T[51]||(T[51]=[s("åæ¶",-1)])]),_:1}),e(he,{type:"primary",onClick:Fe,loading:I.value},{default:t(()=>[s(" ç¡®å®è®¾ç½® ("+S(u.value.length)+") ",1)]),_:1},8,["loading"])])]),default:t(()=>[e(St,{"label-width":"100px"},{default:t(()=>[e(He,{label:"ææ¡ç¨åº¦"},{default:t(()=>[e(ze,{modelValue:L.value,"onUpdate:modelValue":T[8]||(T[8]=J=>L.value=J),placeholder:"è¯·éæ©ææ¡ç¨åº¦",style:{width:"100%"}},{default:t(()=>[e(Ue,{label:"æªç»ä¹ ",value:"not_practiced"}),e(Ue,{label:"é¾åº¦éä¸",value:"medium"}),e(Ue,{label:"æ¯è¾é¾",value:"hard"}),e(Ue,{label:"å·²ææ¡",value:"mastered"})]),_:1},8,["modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue"]),e(wt,{modelValue:o.value,"onUpdate:modelValue":T[14]||(T[14]=J=>o.value=J),title:"AIçæè¯å·"},{footer:t(()=>[l("span",Gn,[e(he,{onClick:T[13]||(T[13]=J=>o.value=!1)},{default:t(()=>[...T[52]||(T[52]=[s("åæ¶",-1)])]),_:1}),e(he,{type:"primary",onClick:We,loading:g.value},{default:t(()=>[...T[53]||(T[53]=[s(" çæè¯å· ",-1)])]),_:1},8,["loading"])])]),default:t(()=>[e(St,{model:z,"label-width":"100px"},{default:t(()=>[e(He,{label:"é¢ç®æ°é"},{default:t(()=>[e(ll,{modelValue:z.count,"onUpdate:modelValue":T[11]||(T[11]=J=>z.count=J),min:1,max:10,"controls-position":"right"},null,8,["modelValue"])]),_:1}),e(He,{label:"é¾åº¦ç级"},{default:t(()=>[e(al,{modelValue:z.difficulty,"onUpdate:modelValue":T[12]||(T[12]=J=>z.difficulty=J)},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue"]),e(wt,{modelValue:f.value,"onUpdate:modelValue":T[17]||(T[17]=J=>f.value=J),title:"è¯å·é¢è§",width:"80%",class:"preview-dialog"},{header:t(()=>[e(ol,{modelValue:m.value,"onUpdate:modelValue":T[15]||(T[15]=J=>m.value=J),"active-text":"æ¾ç¤ºçæ¡","inactive-text":"éèçæ¡"},null,8,["modelValue"])]),footer:t(()=>[l("span",ns,[e(he,{onClick:T[16]||(T[16]=J=>f.value=!1)},{default:t(()=>[...T[59]||(T[59]=[s("å
³é",-1)])]),_:1}),e(he,{type:"primary",onClick:tt},{default:t(()=>[...T[60]||(T[60]=[s("æå°è¯å·",-1)])]),_:1})])]),default:t(()=>[l("div",{class:"print-area",ref_key:"printAreaRef",ref:_},[T[58]||(T[58]=l("h2",{style:{"text-align":"center"}},"éé¢è¯å·",-1)),(n(!0),k(ue,null,fe(V.value.length>0?V.value:u.value,(J,ot)=>(n(),k("div",{class:"mistake-item",key:J.id},[l("div",null,[s(S(ot+1)+". ("+S(J.subject)+") "+S(J.question_type)+" - ",1),l("span",{innerHTML:se(Qe)(J.stem)},null,8,Jn)]),J.question_type==="åéé¢"?(n(),k("div",Xn,[l("table",Qn,[l("tbody",null,[l("tr",null,[l("td",null,[T[54]||(T[54]=s("A. ",-1)),l("span",{innerHTML:se(Qe)(J.option_a)},null,8,Zn)]),l("td",null,[T[55]||(T[55]=s("B. ",-1)),l("span",{innerHTML:se(Qe)(J.option_b)},null,8,es)])]),l("tr",null,[l("td",null,[T[56]||(T[56]=s("C. ",-1)),l("span",{innerHTML:se(Qe)(J.option_c)},null,8,ts)]),l("td",null,[T[57]||(T[57]=s("D. ",-1)),l("span",{innerHTML:se(Qe)(J.option_d)},null,8,ls)])])])])])):te("",!0)]))),128)),m.value?(n(),k("div",as,[(n(!0),k(ue,null,fe(V.value.length>0?V.value:u.value,(J,ot)=>(n(),k("span",{class:"answer",key:J.id},[J.question_type==="åéé¢"?(n(),k("span",os,S(J.answer),1)):te("",!0)]))),128))])):te("",!0)],512)]),_:1},8,["modelValue"]),e(wt,{modelValue:C.value,"onUpdate:modelValue":T[36]||(T[36]=J=>C.value=J),title:h.value?"ç¼è¾éé¢":"æ·»å éé¢",class:"default-dialog"},{footer:t(()=>[l("span",us,[e(he,{onClick:T[35]||(T[35]=J=>C.value=!1)},{default:t(()=>[...T[67]||(T[67]=[s("åæ¶",-1)])]),_:1}),e(he,{type:"primary",onClick:Q,loading:y.value},{default:t(()=>[s(S(h.value?"æ´æ°":"æ·»å "),1)]),_:1},8,["loading"])])]),default:t(()=>[e(sl,{modelValue:R.value,"onUpdate:modelValue":T[34]||(T[34]=J=>R.value=J),type:"card"},{default:t(()=>
109[e(Mt,{label:"表åè¾å ¥",name:"form"},{default:t(()=>[e(St,{model:i,rules:$,ref_key:"mistakeFormRef",ref:F,"label-width":"100px"},{default:t(()=>[e(He,{label:"年级",prop:"grade"},{default:t(()=>[e(ze,{modelValue:i.grade,"onUpdate:modelValue":T[18]||(T[18]=J=>i.grade=J),placeholder:"è¯·éæ©å¹´çº§",style:{width:"100%"}},{default:t(()=>[(n(!0),k(ue,null,fe(se(rt),J=>(n(),N(Ue,{label:J,value:J,key:J},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(He,{label:"å¦ç§",prop:"subject"},{default:t(()=>[e(ze,{modelValue:i.subject,"onUpdate:modelValue":T[19]||(T[19]=J=>i.subject=J),placeholder:"è¯·éæ©å¦ç§",style:{width:"100%"}},{default:t(()=>[(n(!0),k(ue,null,fe(se($t),J=>(n(),N(Ue,{label:J,value:J,key:J},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(He,{label:"é¢å",prop:"question_type"},{default:t(()=>[e(ze,{modelValue:i.question_type,"onUpdate:modelValue":T[20]||(T[20]=J=>i.question_type=J),placeholder:"è¯·éæ©é¢å",style:{width:"100%"},onChange:W},{default:t(()=>[(n(!0),k(ue,null,fe(se(It),J=>(n(),N(Ue,{label:J,value:J,key:J},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(He,{label:"é¢å¹²",prop:"stem"},{default:t(()=>[e(Te,{modelValue:i.stem,"onUpdate:modelValue":T[21]||(T[21]=J=>i.stem=J),type:"textarea",rows:3,placeholder:"请è¾å ¥é¢å¹²"},null,8,["modelValue"])]),_:1}),i.question_type==="åéé¢"||i.question_type==="å¤éé¢"?(n(),k(ue,{key:0},[e(He,{label:"é项A",prop:"option_a"},{default:t(()=>[e(Te,{modelValue:i.option_a,"onUpdate:modelValue":T[22]||(T[22]=J=>i.option_a=J),placeholder:"é项A"},null,8,["modelValue"])]),_:1}),e(He,{label:"é项B",prop:"option_b"},{default:t(()=>[e(Te,{modelValue:i.option_b,"onUpdate:modelValue":T[23]||(T[23]=J=>i.option_b=J),placeholder:"é项B"},null,8,["modelValue"])]),_:1}),e(He,{label:"é项C",prop:"option_c"},{default:t(()=>[e(Te,{modelValue:i.option_c,"onUpdate:modelValue":T[24]||(T[24]=J=>i.option_c=J),placeholder:"é项C"},null,8,["modelValue"])]),_:1}),e(He,{label:"é项D",prop:"option_d"},{default:t(()=>[e(Te,{modelValue:i.option_d,"onUpdate:modelValue":T[25]||(T[25]=J=>i.option_d=J),placeholder:"é项D"},null,8,["modelValue"])]),_:1}),e(He,{label:"æ£ç¡®çæ¡",prop:"answer"},{default:t(()=>[e(ze,{modelValue:i.answer,"onUpdate:modelValue":T[26]||(T[26]=J=>i.answer=J),placeholder:"è¯·éæ©æ£ç¡®çæ¡",style:{width:"100%"}},{default:t(()=>[e(Ue,{label:"A",value:"A"}),e(Ue,{label:"B",value:"B"}),e(Ue,{label:"C",value:"C"}),e(Ue,{label:"D",value:"D"})]),_:1},8,["modelValue"])]),_:1})],64)):i.question_type==="夿é¢"?(n(),N(He,{key:1,label:"æ£ç¡®çæ¡",prop:"answer"},{default:t(()=>[e(ze,{modelValue:i.answer,"onUpdate:modelValue":T[27]||(T[27]=J=>i.answer=J),placeholder:"è¯·éæ©æ£ç¡®çæ¡",style:{width:"100%"}},{default:t(()=>[e(Ue,{label:"对",value:"对"}),e(Ue,{label:"é",value:"é"})]),_:1},8,["modelValue"])]),_:1})):(n(),N(He,{key:2,label:"æ£ç¡®çæ¡",prop:"answer"},{default:t(()=>[e(Te,{modelValue:i.answer,"onUpdate:modelValue":T[28]||(T[28]=J=>i.answer=J)},null,8,["modelValue"])]),_:1})),e(He,{label:"ç¥è¯ç¹",prop:"topic"},{default:t(()=>[e(Te,{modelValue:i.topic,"onUpdate:modelValue":T[29]||(T[29]=J=>i.topic=J),placeholder:"请è¾å ¥é¢ç®æç¥è¯ç¹"},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1}),e(Mt,{label:"AI JSONè¾å ¥",name:"json"},{default:t(()=>[e(ze,{modelValue:H.value,"onUpdate:modelValue":T[30]||(T[30]=J=>H.value=J),placeholder:"年级",clearable:"",style:{width:"100%"}},{default:t(()=>[(n(!0),k(ue,null,fe(se(rt),J=>(n(),N(Ue,{label:J,value:J,key:J},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),e(Te,{modelValue:K.value,"onUpdate:modelValue":T[31]||(T[31]=J=>K.value=J),type:"textarea",rows:10,placeholder:`请è¾å ¥JSONæ ¼å¼çé颿°æ®ï¼ä¾å¦ï¼ 110[ 111 { 112 "subject": "æ°å¦", 113 "question_type": "åéé¢", 114 "stem": "å·²ç¥å½æ°$f(x)=x^2$ï¼æ±$f(2)$çå¼", 115 "option_a": "1", 116 "option_b": "2", 117 "option_c": "4", 118 "option_d": "8", 119 "answer": "C", 120 "topic": "äºæ¬¡å½æ°", 121 "description": "误å°f(2)计ç®ä¸º2*2=2", 122 "reason": "坹彿°æ¦å¿µçè§£ä¸æ¸ ", 123 "suggestion": "å å¼ºå¯¹å½æ°æ¦å¿µççè§£åç»ä¹ " 124 } 125]`},null,8,["modelValue"]),l("div",{class:"json-example-link",onClick:Ve}," ç¹å»æ¥ç示ä¾JSONæ ¼å¼ "),l("div",ss,[e(he,{type:"primary",size:"small",onClick:xe,class:"copy-prompt-button"},{default:t(()=>[...T[61]||(T[61]=[s(" å¤å¶AIæç¤ºè¯å°åªè´´æ¿ ",-1)])]),_:1}),T[62]||(T[62]=l("div",{class:"prompt-description"}," ç¹å»æé®å¤å¶æç¤ºè¯ï¼ç¶åå¨AIå·¥å ·ä¸ä½¿ç¨è¯¥æç¤ºè¯çæéé¢JSONæ°æ® ",-1))])]),_:1}),e(Mt,{label:"æªå¾ä¸ä¼ ",name:"screenshot"},{default:t(()=>[e(ze,{modelValue:B.value,"onUpdate:modelValue":T[32]||(T[32]=J=>B.value=J),placeholder:"年级",clearable:"",style:{width:"100%","margin-bottom":"12px"}},{default:t(()=>[(n(!0),k(ue,null,fe(se(rt),J=>(n(),N(Ue,{label:J,value:J,key:J},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),e(nl,{"file-list":x.value,"onUpdate:fileList":T[33]||(T[33]=J=>x.value=J),"auto-upload":!1,"on-change":ie,"on-remove":ce,multiple:!0,accept:"image/*",drag:"",class:"screenshot-upload"},{default:t(()=>[l("div",rs,[e(bt,{class:"upload-icon"},{default:t(()=>[e(se(Tt))]),_:1}),T[63]||(T[63]=l("div",{class:"upload-text"},"ææ½å¾çå°æ¤å¤æç¹å»ä¸ä¼ ",-1)),T[64]||(T[64]=l("div",{class:"upload-hint"},"æ¯æ JPGãPNG çå¾çæ ¼å¼ï¼å¯åæ¶ä¸ä¼ å¤å¼ ",-1))])]),_:1},8,["file-list"]),T[66]||(T[66]=l("div",{class:"screenshot-tips"},[l("p",null,"æ¯æåæ¶ä¸ä¼ å¤å¼ æªå¾ï¼AIä¼èªå¨è¯å«å¾çä¸çé¢ç®")],-1)),D.value.length>0?(n(),k("div",is,[T[65]||(T[65]=l("h4",null,"è¯å«ç»æé¢è§ï¼",-1)),(n(!0),k(ue,null,fe(D.value,(J,ot)=>{var Yt;return n(),k("div",{key:ot,class:"result-item"},[e(at,{type:"success"},{default:t(()=>[s("â "+S(J.subject)+" - "+S(J.question_type),1)]),_:2},1024),l("p",null,S((Yt=J.stem)==null?void 0:Yt.substring(0,50))+"...",1)])}),128))])):te("",!0)]),_:1})]),_:1},8,["modelValue"])]),_:1},8,["modelValue","title"])],64)}}}),cs=Ce(ds,[["__scopeId","data-v-24172e8e"]]);de.extend(pt);function el(q,c=`课ç¨å®æ-${de().format("YYYY-MM-DD")}.ics`,w=!0){const v=w?q.filter(f=>de(f.timeslot_start).isAfter(de())):q;if(!v.length)throw new Error("没æå¯å¯¼åºç课ç¨å®æ");let y=["BEGIN:VCALENDAR","VERSION:2.0","PRODID:-//OpenCourse//Calendar Export//EN","CALSCALE:GREGORIAN"];v.forEach(f=>{const m=de(f.timeslot_start).utc().format("YYYYMMDDTHHmmss[Z]"),_=de(f.timeslot_end).utc().format("YYYYMMDDTHHmmss[Z]"),p=de(f.timeslot_start).utc().subtract(15,"minute").format("YYYYMMDDTHHmmss[Z]");y=y.concat(["BEGIN:VEVENT",`UID:${f.book_id}@opencourse`,`DTSTART:${m}`,`DTEND:${_}`,`SUMMARY:${f.course_name} - ${f.student_name}`,`DESCRIPTION:课ç¨åç§°: ${f.course_name}\\nå¦ç: ${f.student_name||"ææ å¦ç"}`,"LOCATION:Online Lesson","URL:http://jenkins-zh.cn","BEGIN:VALARM","ACTION:DISPLAY","DESCRIPTION:课ç¨å³å°å¼å§",`TRIGGER;VALUE=DATE-TIME:${p}`,"END:VALARM","END:VEVENT"])}),y.push("END:VCALENDAR");const C=new Blob([y.join(`\r 126`)],{type:"text/calendar;charset=utf-8"}),h=window.URL.createObjectURL(C),u=document.createElement("a");u.href=h,u.setAttribute("download",c),document.body.appendChild(u),u.click(),document.body.removeChild(u),window.URL.revokeObjectURL(h)}const ps={class:"card-header"},ms={class:"header-actions"},vs={class:"calendar-header"},fs={class:"calendar-date"},_s=["onClick"],ys={class:"calendar-date-number"},gs={class:"calendar-events"},bs=["onClick"],ws={class:"event-title"}
126,ks={class:"week-view"},hs={class:"view-header"},$s={class:"view-title"},Vs={class:"week-grid"},Cs={class:"day-name"},xs={class:"day-date"},Ds={class:"grid-time-slot"},Ss=["onClick"],Ms=["onClick"],Us={class:"week-event-title"},Is={class:"week-event-time"},Ts={class:"day-view"},As={class:"view-header"},zs={class:"view-title"},Ls={class:"day-grid"},Ys={class:"grid-time-slot"},Es=["onClick"],Rs=["onClick"],Fs={class:"day-event-title"},Bs={class:"day-event-time"},Ps={class:"dialog-footer"},Hs={key:0,class:"upload-drag-area"},Os={key:1,class:"upload-drag-area"},qs={key:0,class:"image-preview-container"},Ns={class:"image-error"},js={class:"dialog-footer"},Ws={class:"subscription-content"},Ks={class:"subscription-list"},Gs={class:"dialog-footer"},Js=ge({__name:"MyCalendar",setup(q){de.extend(pt);const c=d(),w=d(new Date),v=d([]),y=d(!1),C=d(!1),h=d(null),u=d([]),f=d(!1),m=d(!1),_=d(!1),p=d(localStorage.getItem("calendarView")||"month"),r=Ae({id:"",title:"",description:"",start:"",end:"",location:""}),o=Ae({title:"",description:"",start:"",end:""}),g=d([]),V=d(!1),z=d(null),M=Ae({name:"",url:"",username:"",password:"",color:"#909399"}),L=Array.from({length:24},(Y,P)=>P),I=Le(()=>{const Y=de(w.value).startOf("week");return Array.from({length:7},(P,ne)=>{const we=Y.add(ne,"day");return{date:we.format("YYYY-MM-DD"),dateNum:we.format("MM-DD"),name:["卿¥","å¨ä¸","å¨äº","å¨ä¸","å¨å","å¨äº","å¨å
"][we.day()]}})}),O=Le(()=>de(w.value).format("YYYY-MM-DD"));be(()=>{D()}),je(w,()=>{D()}),je(p,Y=>{localStorage.setItem("calendarView",Y)});function j(){}function R(){const Y=de(w.value).startOf("week"),P=de(w.value).endOf("week");return`${Y.format("YYYYå¹´MMæDDæ¥")} - ${P.format("MMæDDæ¥")}`}function K(){return de(w.value).format("YYYYå¹´MMæDDæ¥")}function H(Y){w.value=de(w.value).add(Y,"week").toDate()}function x(Y){w.value=de(w.value).add(Y,"day").toDate()}function B(Y){Y==="today"?w.value=new Date:Y==="prev-month"?w.value=de(w.value).subtract(1,"month").toDate():Y==="next-month"?w.value=de(w.value).add(1,"month").toDate():c.value&&c.value.selectDate(Y)}async function D(){y.value=!0;try{const Y=de(w.value).subtract(1,"month").startOf("month").format("YYYY-MM-DDTHH:mm:ss[Z]"),P=de(w.value).add(1,"month").endOf("month").format("YYYY-MM-DDTHH:mm:ss[Z]"),ne=await A.get("/api/my-calendar",{params:{start:Y,end:P}});if(!ne)return;v.value=(ne.data||[]).map(we=>({id:we.id,title:we.title,start:de(we.start).local().format("YYYY-MM-DDTHH:mm:ss"),end:de(we.end).local().format("YYYY-MM-DDTHH:mm:ss"),description:we.description,location:we.location,color:we.color,readonly:we.readonly,extendedProps:{uid:we.uid,createdAt:we.created_at,updatedAt:we.updated_at}}))}catch(Y){console.error("Failed to load calendar events:",Y),b.error("å è½½æ¥åäºä»¶å¤±è´¥")}finally{y.value=!1}}function U(Y){return v.value.filter(P=>de(P.start).format("YYYY-MM-DD")===Y)}function F(Y,P){return v.value.filter(ne=>{const we=de(ne.start).format("YYYY-MM-DD"),_e=de(ne.start).hour();return we===Y&&_e===P})}function i(Y,P){return Y.length<=P?Y:Y.substring(0,P)+"..."}function $(Y){return de(Y).format("HH:mm")}function X(Y){return de(Y).format("YYYY-MM-DD HH:mm")}function G(Y){if(Y.readonly){r.id=Y.id,r.title=Y.title,r.description=Y.description,r.start=Y.start,r.end=Y.end,r.location=Y.location,m.value=!0;return}h.value=Y,o.title=Y.title,o.description=Y.description,o.start=Y.start,o.end=Y.end,C.value=!0}function E(Y){h.value=null,u.value=[];const P=de(Y.day).hour(9).minute(0).second(0).millisecond(0),ne=P.add(1,"hour");o.title="",o.description="",o.start=P.toDate(),o.end=ne.toDate(),C.value=!0}function oe(Y,P){h.value=null,u.value=[];const ne=de(Y).hour(P).minute(0).second(0).millisecond(0),we=ne.add(1,"hour");o.title="",o.description="",o.start=ne.toDate(),o.end=we.toDate(),C.value=!0}async function Q(){try{if(v.value.length===0){b.warning("没æå¯å¯¼åºçæ¥åäºä»¶");return}el(v.value,`æç课ç¨å®æ-${de().format("YYYY-MM-DD")}.ics`),b.success("æ¥åå¯¼åºæå")}catch(Y){console.error("å¯¼åºæ¥å失败:",Y),b.error(Y.message||"å¯¼åºæ¥å失败")}}async function re(){if(!o.title){b.warning("请è¾å
¥äºä»¶æ é¢");return}if(!o.start||!o.end){b.warning("è¯·éæ©å¼å§æ¶é´åç»ææ¶é´");return}const Y=de(o.start);if(de(o.end).isBefore(Y)){b.warning("ç»ææ¶é´å¿
é¡»æäºå¼å§æ¶é´");return}
126try{const ne={title:o.title,description:o.description,start:de(o.start).utc().toISOString(),end:de(o.end).utc().toISOString(),location:"Online Lesson"};h.value?(await A.put(`/api/my-calendar/${h.value.id}`,ne),b.success("äºä»¶æ´æ°æå")):(await A.post("/api/my-calendar",ne),b.success("äºä»¶æ·»å æå")),C.value=!1,await D()}catch(ne){console.error("ä¿åäºä»¶å¤±è´¥:",ne),b.error(h.value?"æ´æ°äºä»¶å¤±è´¥":"æ·»å äºä»¶å¤±è´¥")}}async function me(Y){var P,ne;if(Y.raw){f.value=!0;try{const we=new FormData;we.append("image",Y.raw);const _e=await A.post("/api/calendar/recognize-image",we,{headers:{"Content-Type":"multipart/form-data"}});if(console.log("AIè¯å«ååº:",_e.data),!_e.data||!_e.data.title&&!_e.data.description&&!_e.data.start&&!_e.data.end){b.error("AIè¯å«å¤±è´¥ï¼æ æ³ä»å¾çä¸è¯å«åºäºä»¶ä¿¡æ¯ï¼è¯·ç¡®ä¿å¾çæ¸
æ°ä¸å
嫿¥åäºä»¶");return}_e.data&&_e.data.title&&(o.title=_e.data.title,console.log("设置æ é¢:",o.title)),_e.data&&_e.data.description&&(o.description=_e.data.description,console.log("设置æè¿°:",o.description)),_e.data&&_e.data.start&&(o.start=de(_e.data.start).toDate(),console.log("设置å¼å§æ¶é´:",o.start)),_e.data&&_e.data.end&&(o.end=de(_e.data.end).toDate(),console.log("è®¾ç½®ç»ææ¶é´:",o.end)),console.log("å½åè¡¨åæ°æ®:",o),b.success("AIè¯å«æåï¼å·²èªå¨å¡«å表å")}catch(we){console.error("Failed to recognize image:",we),b.error("AIè¯å«å¤±è´¥: "+(((ne=(P=we.response)==null?void 0:P.data)==null?void 0:ne.error)||we.message))}finally{f.value=!1}}}function ie(){o.title="",o.description="",o.start="",o.end=""}function ce(Y){return Y.url?Y.url:Y.raw?URL.createObjectURL(Y.raw):""}async function ke(){if(h.value)try{await A.delete(`/api/my-calendar/${h.value.id}`),b.success("äºä»¶å 餿å"),C.value=!1,await D()}catch(Y){console.error("å é¤äºä»¶å¤±è´¥:",Y),b.error("å é¤äºä»¶å¤±è´¥")}}je(_,Y=>{Y&&W()});function De(){z.value=null,ve()}function ve(){M.name="",M.url="",M.username="",M.password="",M.color="#909399"}async function W(){V.value=!0;try{const Y=await A.get("/api/user/subscribed-calendars");g.value=Y.data||[]}catch(Y){console.error("Failed to load subscriptions:",Y),b.error("å 载订é
æ¥å失败")}finally{V.value=!1}}function Z(Y){z.value=Y,M.name=Y.name,M.url=Y.url,M.username=Y.username||"",M.password="",M.color=Y.color||"#909399"}async function Ve(){var Y,P;if(!M.name||!M.url){b.warning("è¯·å¡«åæ¥ååç§°åå°å");return}try{if(z.value){const ne={name:M.name,url:M.url,username:M.username,color:M.color,enabled:!0};M.password&&(ne.password=M.password),await A.put(`/api/user/subscribed-calendars/${z.value.id}`,ne),b.success("æ´æ°è®¢é
æå")}else await A.post("/api/user/subscribed-calendars",M),b.success("æ·»å 订é
æå");z.value=null,ve(),await W(),await D()}catch(ne){console.error("Failed to save subscription:",ne),b.error(((P=(Y=ne.response)==null?void 0:Y.data)==null?void 0:P.error)||"ä¿å订é
失败")}}async function xe(Y){try{await A.put(`/api/user/subscribed-calendars/${Y.id}`,Y),await D()}catch(P){console.error("Failed to toggle subscription:",P),b.error("æ´æ°è®¢é
ç¶æå¤±è´¥"),Y.enabled=!Y.enabled}}async function ae(Y){try{await A.put(`/api/user/subscribed-calendars/${Y.id}`,Y),await D(),b.success("é¢è²æ´æ°æå")}catch(P){console.error("Failed to update subscription color:",P),b.error("æ´æ°é¢è²å¤±è´¥")}}async function ee(Y){try{await A.delete(`/api/user/subscribed-calendars/${Y}`),b.success("å é¤è®¢é
æå"),await W(),await D()}catch(P){console.error("Failed to delete subscription:",P),b.error("å é¤è®¢é
失败")}}return(Y,P)=>{const ne=a("el-option"),we=a("el-select"),_e=a("el-button"),Se=a("el-button-group"),We=a("el-tooltip"),tt=a("el-calendar"),Xe=a("el-card"),Ge=a("el-container"),qe=a("el-descriptions-item"),lt=a("el-descriptions"),ye=a("el-dialog"),Fe=a("el-input"),le=a("el-form-item"),T=a("el-date-picker"),he=a("el-icon"),Te=a("el-upload"),Be=a("el-image"),Ue=a("el-form"),ze=a("el-color-picker"),Re=a("el-divider"),Pe=a("el-table-column"),at=a("el-switch"),bt=a("el-table"),Ze=Ee("loading");return n(),k(ue,null,[e(Ge,{class:"calendar-container"},{default:t(()=>[e(Xe,{class:"calendar-card"},{header:t(()=>[l("div",ps,[P[31]||(P[31]=l("span",null,"æçæ¥å",-1)),l("div",ms,[e(we,{modelValue:p.value,"onUpdate:modelValue":P[0]||(P[0]=pe=>p.value=pe),onChange:j,style:{width:"100px","margin-right":"10px"}},{default:t(()=>[e(ne,{value:"month",label:"æ"}),e(ne,{value:"week",label:"å¨"}),e(ne,{value:"day",label:"æ¥"})]),_:1},8,["modelValue"]),e(_e,{type:"primary",onClick:P[1]||(P[1]=pe=>_.value=!0)},{default:t(()=>[...P[28]||(P[28]=[s("订é
æ¥å",-1)])]),_:1}),e(_e,{type:"primary",onClick:D},{default:t(()=>[...P[29]||(P[29]=[s("å·æ°",-1)])]),_:1}),e(_e,{type:"primary",onClick:Q},{default:t(()=>[...P[30]||(P[30]=[s("å¯¼åºæ¥å",-1)])]),_:1})])])]),default:t(()=>[Me((n(),k("div",null,[e(tt,{modelValue:w.value,"onUpdate:modelValue":P[5]||(P[5]=pe=>w.value=pe)},{header:t(({date:pe})=>[l("div",vs,[e(Se,null,{default:t(()=>[e(_e,{size:"small",onClick:P[2]||(P[2]=$e=>B("prev-month"))},{default:t(()=>[...P[32]||(P[32]=[s("ä¸ä¸æ",-1)])]),_:1}),e(_e,{size:"small",onClick:P[3]||(P[3]=$e=>B("today"))},{default:t(()=>[...P[33]||(P[33]=[s("ä»å¤©",-1)])]),_:1}),e(_e,{size:"small",onClick:P[4]||(P[4]=$e=>B("next-month"))},{default:t(()=>[...P[34]||(P[34]=[s("ä¸ä¸æ",-1)])]),_:1})]),_:1}),l("span",fs,S(pe),1)])]),"date-cell":t(({data:pe})=>[l("div",{class:"calendar-day",onClick:$e=>E(pe)},[l("div",ys,S(pe.day.split("-")[2]),1),l("div",gs,[(n(!0),k(ue,null,fe(U(pe.day),$e=>(n(),k("div",{key:$e.id,class:Ye(["calendar-event",{readonly:$e.readonly,"has-color":$e.color}]),style:ft($e.color?{"--event-color":$e.color}:{}),onClick:Oe(Ne=>G($e),["stop"])},[e(We,{content:`${$e.title}: ${$($e.start)} - ${$($e.end)}`,placement:"top"},{default:t(()=>[l("div",ws,S(i($e.title,10)),1)]),_:2}
126,1032,["content"])],14,bs))),128))])],8,_s)]),_:1},8,["modelValue"])])),[[it,p.value==="month"],[Ze,y.value]]),Me((n(),k("div",ks,[l("div",hs,[e(Se,null,{default:t(()=>[e(_e,{size:"small",onClick:P[6]||(P[6]=pe=>H(-1))},{default:t(()=>[...P[35]||(P[35]=[s("ä¸ä¸å¨",-1)])]),_:1}),e(_e,{size:"small",onClick:P[7]||(P[7]=pe=>B("today"))},{default:t(()=>[...P[36]||(P[36]=[s("ä»å¤©",-1)])]),_:1}),e(_e,{size:"small",onClick:P[8]||(P[8]=pe=>H(1))},{default:t(()=>[...P[37]||(P[37]=[s("ä¸ä¸å¨",-1)])]),_:1})]),_:1}),l("span",$s,S(R()),1)]),l("div",Vs,[P[38]||(P[38]=l("div",{class:"grid-time-header"},null,-1)),(n(!0),k(ue,null,fe(I.value,pe=>(n(),k("div",{key:`header-${pe.date}`,class:"grid-day-header"},[l("div",Cs,S(pe.name),1),l("div",xs,S(pe.dateNum),1)]))),128)),(n(!0),k(ue,null,fe(se(L),pe=>(n(),k(ue,{key:pe},[l("div",Ds,S(pe)+":00",1),(n(!0),k(ue,null,fe(I.value,$e=>(n(),k("div",{key:`slot-${$e.date}-${pe}`,class:"grid-day-slot",onClick:Ne=>oe($e.date,pe)},[(n(!0),k(ue,null,fe(F($e.date,pe),Ne=>(n(),k("div",{key:Ne.id,class:Ye(["week-event",{readonly:Ne.readonly,"has-color":Ne.color}]),style:ft(Ne.color?{"--event-color":Ne.color}:{}),onClick:Oe(Lt=>G(Ne),["stop"])},[l("div",Us,S(i(Ne.title,15)),1),l("div",Is,S($(Ne.start))+" - "+S($(Ne.end)),1)],14,Ms))),128))],8,Ss))),128))],64))),128))])])),[[it,p.value==="week"],[Ze,y.value]]),Me((n(),k("div",Ts,[l("div",As,[e(Se,null,{default:t(()=>[e(_e,{size:"small",onClick:P[9]||(P[9]=pe=>x(-1))},{default:t(()=>[...P[39]||(P[39]=[s("åä¸å¤©",-1)])]),_:1}),e(_e,{size:"small",onClick:P[10]||(P[10]=pe=>B("today"))},{default:t(()=>[...P[40]||(P[40]=[s("ä»å¤©",-1)])]),_:1}),e(_e,{size:"small",onClick:P[11]||(P[11]=pe=>x(1))},{default:t(()=>[...P[41]||(P[41]=[s("åä¸å¤©",-1)])]),_:1})]),_:1}),l("span",zs,S(K()),1)]),l("div",Ls,[P[42]||(P[42]=l("div",{class:"day-time-header"},null,-1)),P[43]||(P[43]=l("div",{class:"day-content-header"},[l("div",{class:"day-title"},"æ¶é´")],-1)),(n(!0),k(ue,null,fe(se(L),pe=>(n(),k(ue,{key:pe},[l("div",Ys,S(pe)+":00",1),l("div",{class:"day-content-slot",onClick:$e=>oe(O.value,pe)},[(n(!0),k(ue,null,fe(F(O.value,pe),$e=>(n(),k("div",{key:$e.id,class:Ye(["day-event",{readonly:$e.readonly,"has-color":$e.color}]),style:ft($e.color?{"--event-color":$e.color}:{}),onClick:Oe(Ne=>G($e),["stop"])},[l("div",Fs,S($e.title),1),l("div",Bs,S($($e.start))+" - "+S($($e.end)),1)],14,Rs))),128))],8,Es)],64))),128))])])),[[it,p.value==="day"],[Ze,y.value]])]),_:1})]),_:1}),e(ye,{modelValue:m.value,"onUpdate:modelValue":P[13]||(P[13]=pe=>m.value=pe),title:"äºä»¶è¯¦æ
",width:"500px"},{footer:t(()=>[l("span",Ps,[e(_e,{onClick:P[12]||(P[12]=pe=>m.value=!1)},{default:t(()=>[...P[44]||(P[44]=[s("å
³é",-1)])]),_:1})])]),default:t(()=>[e(lt,{column:1,border:""},{default:t(()=>[e(qe,{label:"æ é¢"},{default:t(()=>[s(S(r.title),1)]),_:1}),e(qe,{label:"å¼å§æ¶é´"},{default:t(()=>[s(S(X(r.start)),1)]),_:1}),e(qe,{label:"ç»ææ¶é´"},{default:t(()=>[s(S(X(r.end)),1)]),_:1}),r.description?(n(),N(qe,{key:0,label:"æè¿°"},{default:t(()=>[s(S(r.description),1)]),_:1})):te("",!0),r.location?(n(),N(qe,{key:1,label:"ä½ç½®"},{default:t(()=>[s(S(r.location),1)]),_:1})):te("",!0)]),_:1})]),_:1},8,["modelValue"]),e(ye,{modelValue:C.value,"onUpdate:modelValue":P[20]||(P[20]=pe=>C.value=pe),title:h.value?"ç¼è¾äºä»¶":"æ·»å äºä»¶",width:"500px"},{footer:t(()=>[l("span",js,[e(_e,{onClick:P[19]||(P[19]=pe=>C.value=!1)},{default:t(()=>[...P[50]||(P[50]=[s("åæ¶",-1)])]),_:1}),h.value&&!h.value.readonly?(n(),N(_e,{key:0,onClick:ke,type:"danger"},{default:t(()=>[...P[51]||(P[51]=[s("å é¤",-1)])]),_:1})):te("",!0),h.value?(n(),N(_e,{key:1,type:"primary",onClick:re,disabled:h.value.readonly},{default:t(()=>[...P[52]||(P[52]=[s(" æ´æ° ",-1)])]),_:1},8,["disabled"])):(n(),N(_e,{key:2,type:"primary",onClick:re},{default:t(()=>[...P[53]||(P[53]=[s("æ·»å ",-1)])]),_:1}))])]),default:t(()=>[e(Ue,{model:o,"label-width":"80px"},{default:t(()=>[e(le,{label:"æ é¢"},{default:t(()=>[e(Fe,{modelValue:o.title,"onUpdate:modelValue":P[14]||(P[14]=pe=>o.title=pe),placeholder:"请è¾å
¥äºä»¶æ é¢"},null,8,["modelValue"])]),_:1}),e(le,{label:"æè¿°"},{default:t(()=>[e(Fe,{modelValue:o.description,"onUpdate:modelValue":P[15]||(P[15]=pe=>o.description=pe),type:"textarea",placeholder:"请è¾å
¥äºä»¶æè¿°"},null,8,["modelValue"])]),_:1}),e(le,{label:"å¼å§æ¶é´"},{default:t(()=>[e(T,{modelValue:o.start,"onUpdate:modelValue":P[16]||(P[16]=pe=>o.start=pe),type:"datetime",format:"YYYY-MM-DD HH:mm",placeholder:"è¯·éæ©å¼å§æ¶é´",style:{width:"100%"}},null,8,["modelValue"])]),_:1}),e(le,{label:"ç»ææ¶é´"},{default:t(()=>[e(T,{modelValue:o.end,"onUpdate:modelValue":P[17]||(P[17]=pe=>o.end=pe),type:"datetime",format:"YYYY-MM-DD HH:mm",placeholder:"è¯·éæ©ç»ææ¶é´",style:{width:"100%"}},null,8,["modelValue"])]),_:1}),h.value?te("",!0):(n(),N(le,{key:0,label:"ä¸ä¼ å¾ç"},{default:t(()=>[e(Te,{"auto-upload":!1,"on-change":me,"on-remove":ie,limit:1,accept:"image/*",drag:"",class:"calendar-image-upload","file-list":u.value,"onUpdate:fileList":P[18]||(P[18]=pe=>u.value=pe),disabled:f.value},{default:t(()=>[u.value.length===0&&!f.value?(n(),k("div",Hs,[e(he,{class:"upload-icon"},{default:t(()=>[e(se(Tt))]),_:1}),P[45]||(P[45]=l("div",{class:"upload-text"},"ææ½å¾çå°æ¤å¤æç¹å»ä¸ä¼ ",-1)),P[46]||(P[46]=l("div",{class:"upload-hint"},"ä¸ä¼ æªå¾èªå¨è¯å«äºä»¶ä¿¡æ¯",-1))])):f.value?(n(),k("div",Os,[e(he,{class:"upload-icon is-loading"},{default:t(()=>[e(se(yl))]),_:1}),P[47]||(P[47]=l("div",{class:"upload-text"},"AIè¯å«ä¸...",-1)),P[48]||(P[48]=l("div",{class:"upload-hint"},"æ£å¨åæå¾çå
容ï¼è¯·ç¨å",-1))])):te("",!0)]),_:1},8,["file-list","disabled"]),u.value.length>0&&!f.value?(n(),k("div",qs,[e(Be,{src:ce(u.value[0]),fit:"contain",class:"image-preview","preview-src-list":[ce(u.value[0])],"preview-teleported":""},{error:t(()=>[l("div",Ns,[e(he,null,{default:t(()=>[e(se(gl))]),_:1}),P[49]||(P[49]=l("span",null,"å¾çå 载失败",-1))])]),_:1},8,["src","preview-src-list"])])):te("",!0)]),_:1}))]),_:1},8,["model"])]),_:1},8,["modelValue","title"]),e(ye,{modelValue:_.value,"onUpdate:modelValue":P[27]||(P[27]=pe=>_.value=pe),title:z.value?"ç¼è¾è®¢é
æ¥å":"订é
æ¥å管ç",width:"700px",onClosed:ve},{footer:t(()=>[l("span",Gs,[e(_e,{onClick:P[26]||(P[26]=pe=>_.value=!1)},{default:t(()=>[...P[58]||(P[58]=[s("å
³é",-1)])]),_:1})])]),default:t(()=>[l("div",Ws,[e(Ue,{model:M,"label-width":"100px",class:"subscription-form"},{default:t(()=>[e(le,{label:"æ¥ååç§°"},{default:t(()=>[e(Fe,{modelValue:M.name,"onUpdate:modelValue":P[21]||(P[21]=pe=>
126M.name=pe),placeholder:"ä¾å¦ï¼ä¸å½è忥"},null,8,["modelValue"])]),_:1}),e(le,{label:"æ¥åå°å"},{default:t(()=>[e(Fe,{modelValue:M.url,"onUpdate:modelValue":P[22]||(P[22]=pe=>M.url=pe),placeholder:"ICS æä»¶å°åï¼ä¾å¦ï¼https://calendars.icloud.com/holidays/cn_zh.ics"},null,8,["modelValue"])]),_:1}),e(le,{label:"ç¨æ·å"},{default:t(()=>[e(Fe,{modelValue:M.username,"onUpdate:modelValue":P[23]||(P[23]=pe=>M.username=pe),placeholder:"ç§ææ¥åéè¦ï¼å¯éï¼"},null,8,["modelValue"])]),_:1}),e(le,{label:"å¯ç "},{default:t(()=>[e(Fe,{modelValue:M.password,"onUpdate:modelValue":P[24]||(P[24]=pe=>M.password=pe),type:"password",placeholder:"ç§ææ¥åéè¦ï¼å¯éï¼","show-password":""},null,8,["modelValue"])]),_:1}),e(le,{label:"æ¾ç¤ºé¢è²"},{default:t(()=>[e(ze,{modelValue:M.color,"onUpdate:modelValue":P[25]||(P[25]=pe=>M.color=pe)},null,8,["modelValue"])]),_:1}),e(le,null,{default:t(()=>[e(_e,{type:"primary",onClick:Ve},{default:t(()=>[s(S(z.value?"æ´æ°è®¢é
":"æ·»å 订é
"),1)]),_:1}),z.value?(n(),N(_e,{key:0,onClick:De},{default:t(()=>[...P[54]||(P[54]=[s("åæ¶",-1)])]),_:1})):te("",!0)]),_:1})]),_:1},8,["model"]),e(Re),l("div",Ks,[P[57]||(P[57]=l("h4",null,"已订é
çæ¥å",-1)),Me((n(),N(bt,{data:g.value,style:{width:"100%"}},{default:t(()=>[e(Pe,{prop:"name",label:"åç§°",width:"150"}),e(Pe,{prop:"url",label:"å°å","show-overflow-tooltip":""}),e(Pe,{prop:"color",label:"é¢è²",width:"120"},{default:t(pe=>[e(ze,{modelValue:pe.row.color,"onUpdate:modelValue":$e=>pe.row.color=$e,size:"small",onChange:$e=>ae(pe.row)},null,8,["modelValue","onUpdate:modelValue","onChange"])]),_:1}),e(Pe,{prop:"enabled",label:"ç¶æ",width:"80"},{default:t(pe=>[e(at,{modelValue:pe.row.enabled,"onUpdate:modelValue":$e=>pe.row.enabled=$e,onChange:$e=>xe(pe.row)},null,8,["modelValue","onUpdate:modelValue","onChange"])]),_:1}),e(Pe,{label:"æä½",width:"150"},{default:t(pe=>[e(_e,{size:"small",onClick:$e=>Z(pe.row)},{default:t(()=>[...P[55]||(P[55]=[s("ç¼è¾",-1)])]),_:1},8,["onClick"]),e(_e,{type:"danger",size:"small",onClick:$e=>ee(pe.row.id)},{default:t(()=>[...P[56]||(P[56]=[s("å é¤",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[Ze,V.value]])])])]),_:1},8,["modelValue","title"])],64)}}}),zt=Ce(Js,[["__scopeId","data-v-b1f5814e"]]),Xs={class:"exam-records"},Qs={class:"exam-header"},Zs={class:"header-actions"},er={class:"dialog-footer"},tr=ge({__name:"ExamRecords",emits:["detail","statistic"],setup(q,{emit:c}){const w=c,v=d([]),y=d(null),C=d([]),h=d([]),u=async()=>{try{const H=await A.get("/api/exam-types");h.value=H.data||[]}catch(H){console.error("Failed to load exam types:",H)}},f=(H,x)=>{const B=H?h.value.filter(D=>D.toLowerCase().includes(H.toLowerCase())).map(D=>({value:D})):h.value.map(D=>({value:D}));x(B)},m=[{label:"ID",prop:"id",width:80},{label:"年级",prop:"grade",width:120,formatter:H=>Ke[H.grade]||H.grade},{label:"èè¯ç±»å",labelWidth:150,prop:"exam_type"},{label:"æ¶é´",prop:"date",formatter:H=>V(H.date)},{label:"ç级æå",prop:"class_rank",width:80},{label:"年级æå",prop:"grade_rank",width:80},{label:"æ»å",prop:"total_score",width:100,formatter:H=>H.exam_scores&&H.exam_scores.length>0?H.exam_scores.reduce((B,D)=>B+D.score,0).toString():"-"},{label:"ç§ç®æç»©",prop:"exam_scores",formatter:H=>`${H.exam_scores?H.exam_scores.length:0} 个ç§ç®`},{label:"æä½",prop:"actions",kind:"slot"}],_=d(!1),p=d(!1),r=d(),o=d({exam_type:"",grade:"",date:new Date().toISOString(),class_rank:1,grade_rank:1}),g={examType:[{required:!0,message:"请è¾å
¥èè¯ç±»å",trigger:"blur"}],date:[{required:!0,message:"è¯·éæ©èè¯æ¶é´",trigger:"change"}],classRank:[{required:!0,message:"请è¾å
¥ç级æå",trigger:"blur"},{type:"number",min:1,message:"ç级æåå¿
须大äº0",trigger:"blur"}],gradeRank:[{required:!0,message:"请è¾å
¥å¹´çº§æå",trigger:"blur"},{type:"number",min:1,message:"年级æåå¿
须大äº0",trigger:"blur"}]},V=H=>new Date(H).toLocaleDateString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit"}),z=()=>{j.value.loadData()},M=H=>{y.value=H,w("detail",H.id,H.exam_type)},L=()=>{p.value=!1,o.value={exam_type:"",grade:"",date:new Date().toISOString(),class_rank:1,grade_rank:1},_.value=!0},I=H=>{p.value=!0,o.value={id:H.id,grade:H.grade,exam_type:H.exam_type,date:H.date,class_rank:H.class_rank,grade_rank:H.grade_rank},_.value=!0},O=()=>{_.value=!1},j=d(),R=async()=>{r.value&&await r.value.validate(async H=>{if(H){o.value.date=new Date(o.value.date).toISOString();try{if(p.value&&o.value.id){await A.put(`/api/exams/${o.value.id}`,o.value);const x=v.value.findIndex(B=>B.id===o.value.id);x!==-1&&(v.value[x]={...o.value})}else{const x=await A.post("/api/exams",o.value);v.value.unshift(x.data)}_.value=!1,b.success(p.value?"èè¯è®°å½æ´æ°æå":"èè¯è®°å½å建æå"),z()}catch(x){console.error(p.value?"æ´æ°èè¯è®°å½å¤±è´¥:":"å建èè¯è®°å½å¤±è´¥:",x),b.error(p.value?"æ´æ°èè¯è®°å½å¤±è´¥":"å建èè¯è®°å½å¤±è´¥")}}else console.log("表åéªè¯å¤±è´¥!")})},K=async H=>{try{await et.confirm("ç¡®å®è¦å é¤è¿æ¡èè¯è®°å½åï¼æ¤æä½ä¸å¯æ¢å¤","å é¤ç¡®è®¤",{confirmButtonText:"ç¡®å®",cancelButtonText:"åæ¶",type:"warning"}),await A.delete(`/api/exams/${H}`),v.value=v.value.filter(x=>x.id!==H),b.success("èè¯è®°å½å 餿å"),z()}catch(x){console.error("å é¤èè¯è®°å½å¤±è´¥:",x),b.error("å é¤èè¯è®°å½å¤±è´¥")}};return be(()=>{for(const H in Ke)C.value.push({label:Ke[H],value:H});u()}),(H,x)=>{const B=a("el-option"),D=a("el-select"),U=a("el-form-item"),F=a("el-autocomplete"),i=a("el-date-picker"),$=a("el-input-number"),X=a("el-form"),G=a("el-dialog");return n(),k("div",Xs,[l("div",Qs,[x[10]||(x[10]=l("h2",null,"èè¯è®°å½",-1)),l("div",Zs,[e(se(nt),{type:"primary",onClick:z},{default:t(()=>[...x[7]||(x[7]=[s("å·æ°",-1)])]),_:1}),e(se(nt),{type:"primary",onClick:x[0]||(x[0]=E=>w("statistic"))},{default:t(()=>[...x[8]||(x[8]=[s("æ¥çç»è®¡",-1)])]),_:1}),e(se(nt),{type:"success",onClick:L},{default:t(()=>[...x[9]||(x[9]=[s("æ°å¢èè¯",-1)])]),_:1})])]),e(mt,{columns:m,dataURL:"/api/exams",ref_key:"examTableRef",ref:j},{actions:t(({row:E})=>[e(se(nt),{size:"small",type:"primary",onClick:Oe(oe=>M(E),["stop"])},{default:t(()=>[...x[11]||(x[11]=[s("详æ
",-1)])]),_:1},8,["onClick"]),e(se(nt),{size:"small",type:"warning",onClick:Oe(oe=>I(E),["stop"])},{default:t(()=>
126[...x[12]||(x[12]=[s("ç¼è¾",-1)])]),_:1},8,["onClick"]),e(se(nt),{size:"small",type:"danger",onClick:Oe(oe=>K(E.id),["stop"])},{default:t(()=>[...x[13]||(x[13]=[s("å é¤",-1)])]),_:1},8,["onClick"])]),_:1},512),e(G,{title:p.value?"ç¼è¾èè¯":"æ°å¢èè¯",modelValue:_.value,"onUpdate:modelValue":x[6]||(x[6]=E=>_.value=E),"before-close":O},{footer:t(()=>[l("span",er,[e(se(nt),{onClick:O},{default:t(()=>[...x[14]||(x[14]=[s("åæ¶",-1)])]),_:1}),e(se(nt),{type:"primary",onClick:R},{default:t(()=>[...x[15]||(x[15]=[s("æäº¤",-1)])]),_:1})])]),default:t(()=>[e(X,{model:o.value,rules:g,ref_key:"examFormRef",ref:r,"label-width":"120px"},{default:t(()=>[e(U,{label:"年级",prop:"grade"},{default:t(()=>[e(D,{modelValue:o.value.grade,"onUpdate:modelValue":x[1]||(x[1]=E=>o.value.grade=E),placeholder:"è¯·éæ©å¹´çº§",style:{width:"100%"}},{default:t(()=>[(n(!0),k(ue,null,fe(C.value,E=>(n(),N(B,{key:E.value,label:E.label,value:E.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(U,{label:"èè¯ç±»å",prop:"exam_type"},{default:t(()=>[e(F,{modelValue:o.value.exam_type,"onUpdate:modelValue":x[2]||(x[2]=E=>o.value.exam_type=E),"fetch-suggestions":f,placeholder:"请è¾å
¥æéæ©èè¯ç±»å",style:{width:"100%"}},null,8,["modelValue"])]),_:1}),e(U,{label:"èè¯æ¶é´",prop:"date"},{default:t(()=>[e(i,{modelValue:o.value.date,"onUpdate:modelValue":x[3]||(x[3]=E=>o.value.date=E),type:"datetime",placeholder:"éæ©èè¯æ¥æ",format:"YYYY-MM-DDTHH:mm:ssZ","value-format":"YYYY-MM-DDTHH:mm:ssZ"},null,8,["modelValue"])]),_:1}),e(U,{label:"ç级æå",prop:"class_rank"},{default:t(()=>[e($,{modelValue:o.value.class_rank,"onUpdate:modelValue":x[4]||(x[4]=E=>o.value.class_rank=E),min:1,placeholder:"ç级æå"},null,8,["modelValue"])]),_:1}),e(U,{label:"年级æå",prop:"grade_rank"},{default:t(()=>[e($,{modelValue:o.value.grade_rank,"onUpdate:modelValue":x[5]||(x[5]=E=>o.value.grade_rank=E),min:1,placeholder:"年级æå"},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["title","modelValue"])])}}}),lr=Ce(tr,[["__scopeId","data-v-8d86edd1"]]),ar={id:"total-score-trend-chart",style:{height:"400px"}},or={id:"total-rank-change-chart",style:{height:"400px"}},nr={id:"items-rank-change-chart",style:{height:"400px"}},sr=ge({__name:"ExamStat",setup(q){const c=d(!1),w=d(!1),v=d(!1);let y=null,C=null,h=null;const u=d(!1);je(u,()=>{o=0,f()});const f=async()=>{await dt(),c.value=!0,w.value=!0,v.value=!0,A.get("/api/exams").then(M=>M.data).then(M=>{m(M),_(M)}).finally(()=>{c.value=!1,w.value=!1}),A.get("/api/exams/stats/subject").then(M=>M.data).then(M=>{p(new Map(Object.entries(M)))}).finally(()=>{v.value=!1})},m=M=>{const L=document.getElementById("total-rank-change-chart");if(L){y&&y.dispose(),y=ut(L);const I=[...M].sort((j,R)=>new Date(j.date).getTime()-new Date(R.date).getTime()).map(j=>({date:z(j.date),gradeRank:j.grade_rank,classRank:j.class_rank})),O={title:{text:"æ»åæåååè¶å¿"},tooltip:{trigger:"axis"},xAxis:{type:"category",data:I.map(j=>j.date)},yAxis:{type:"value",inverse:!0,name:"æå"},series:[{name:"年级æå",data:I.map(j=>j.gradeRank),type:"line",smooth:!0,itemStyle:{color:"#5470c6"},lineStyle:{color:"#5470c6"}},{name:"ç级æå",data:I.map(j=>j.classRank),type:"line",smooth:!0,itemStyle:{color:"#fac858"},lineStyle:{color:"#fac858"}}],grid:{left:"3%",right:"4%",bottom:"3%",containLabel:!0},legend:{data:["年级æå","ç级æå"],orient:"vertical",right:"5%",top:"center"}};y.setOption(O)}},_=M=>{const L=document.getElementById("total-score-trend-chart");if(L){h&&h.dispose(),h=ut(L);const I=[...M].sort((j,R)=>new Date(j.date).getTime()-new Date(R.date).getTime()).map(j=>{let R=0,K=0;return j.exam_scores&&j.exam_scores.forEach(H=>{R+=H.score,K+=H.full_score}),{date:z(j.date),totalScore:R,fullScore:K,scoreAs100:K>0?Math.round(R*100/K):0}}),O={title:{text:"æ»åè¶å¿å¾"},tooltip:{trigger:"axis",formatter:j=>{if(j&&j.length>0){const R=j[0],K=I[R.dataIndex];return u.value?`${R.axisValue}<br/>æ»å(100åå¶): ${K.scoreAs100}å`:`${R.axisValue}<br/>æ»å: ${K.totalScore}å`}return""}},xAxis:{type:"category",data:I.map(j=>j.date)},yAxis:{type:"value",name:u.value?"åæ°(100åå¶)":"åæ°"},series:[{name:"æ»å",data:I.map(j=>u.value?j.scoreAs100:j.totalScore),type:"line",smooth:!0,itemStyle:{color:"#67C23A"},lineStyle:{color:"#67C23A"},markLine:{data:[{type:"average",name:"å¹³åå"}],lineStyle:{color:"#F56C6C",type:"dashed"}}}],grid:{left:"3%",right:"4%",bottom:"3%",containLabel:!0}};h.setOption(O)}},p=M=>{o=0;const L=new Map;M.forEach((O,j)=>{O.forEach(R=>{var K;u.value&&(R.score=Math.round(R.score*100/R.full_score)),L.has(R.date)||L.set(R.date,[]),(K=L.get(R.date))==null||K.push(R)})});const I=[];M.forEach((O,j)=>{const R={name:j,data:O.map(K=>K.score),color:g()};I.push(R)}),V("items-rank-change-chart","åç§æ»åååè¶å¿",L,I,C)},r=["#5470c6","#91cc75","#fac858","#ee6666","#73c0de","#3ba272","#fc8452","#9a60b4","#ea7ccc","#2c3e50","#27ae60","#e74c3c","#3498db","#f39c12","#8e44ad","#16a085","#d35400","#c0392b","#2980b9","#7f8c8d"];let o=0;const g=()=>{const M=r[o%r.length];return o++,M},V=(M,L,I,O,j)=>{const R=document.getElementById(M);if(R){j&&j.dispose(),j=ut(R);const K=O.map(x=>({name:x.name,data:x.data,type:"line",itemStyle:{color:x.color},lineStyle:{color:x.color}})),H={title:{text:L},tooltip:{trigger:"axis"},xAxis:{type:"category",data:[...I.keys()]},yAxis:{type:"value",name:"åæ°"},series:K,grid:{left:"3%",right:"4%",bottom:"3%",containLabel:!0},legend:{data:O.map(x=>x.name),orient:"vertical",right:"5%",top:"center"}};j.setOption(H)}},z=M=>new Date(M).toLocaleDateString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit"});return be(()=>{f()}),(M,L)=>{const I=a("el-switch"),O=Ee("loading");return n(),k(ue,null,[Me(l("div",ar,null,512),[[O,w.value]]),Me(l("div",or,null,512),[[O,c.value]]),e(I,{modelValue:u.value,"onUpdate:modelValue":L[0]||(L[0]=j=>u.value=j),"active-text":"100åå¶","inactive-text":"å®é
åæ°"},null,8,["modelValue"]),Me(l("div",nr,null,512),[[O,v.value]])],64)}}}),rr={class:"exam-summary"},ir={class:"summary-content"},ur={class:"summary-item"},dr={class:"summary-value primary"},cr={class:"summary-item"},pr={class:"summary-value"},mr={key:0,class:"summary-item"},vr=ge({__name:"ExamSubjectRecords",props:{examID:{}},setup(q){const c=q,w=d(),v=d(!1),y=d([]),C=Le(()=>y.value.reduce((g,V)=>g+(V.score||0),0)),h=Le(()=>y.value.reduce((g,V)=>g+(V.full_score||0),0)),u=Le(()=>h.value===0?0:Math.round(C.value*100/h.value)),f=g=>g>=90?"excellent":g>=80?"good":g>=60?"pass":"fail",m=g=>{y.value=g},_=[{label:"ID",prop:"id"},{label:"ç§ç®",prop:"subject",searchable:!0},{label:"满å",prop:"full_score"},{label:"èè¯æç»©",prop:"score"},{label:"ç级æå",prop:"class_rank"},{label:"年级æå",prop:"grade_rank"}],p=d(!1),r=d({subject:"",score:0,full_score:100,class_rank:-1,grade_rank:-1,exam_id:c.examID}),o=async()=>{r.value.score=Number(r.value.score),r.value.full_score=Number(r.value.full_score),r.value.class_rank=Number(r.value.class_rank),r.value.grade_rank=Number(r.value.grade_rank),await A.post(`/api/examScores/${c.examID}`,r.value),await w.value.loadData(),p.value=!1};return(g,V)=>{const z=a("el-card"),M=a("el-button"),L=a("el-option"),I=a("el-select"),O=a("el-form-item"),j=a("el-input"),R=a("el-form"),K=a("el-dialog"),H=Ee("loading");return n(),k(ue,null,[Me((n(),k("div",rr,[e(z,{shadow:"hover"},{header:t(()=>[...V[8]||(V[8]=[l("div",{class:"card-header"},[l("span",null,"èè¯æ»å")],-1)])]),default:t(()=>[l("div",ir,[l("div",ur,[V[9]||(V[9]=l("span",{class:"summary-label"},"æ»å:",-1)),l("span",dr,S(C.value),1)]),l("div",cr,[V[10]||(V[10]=l("span",{class:"summary-label"},"满å:",-1)),l("span",pr,S(h.value),1)]),h.value>0?(n(),k("div",mr,[V[11]||(V[11]=l("span",{class:"summary-label"},"å¾åç:",-1)),l("span",{class:Ye(["summary-value",f(u.value)])},S(u.value)+"%",3)])):te("",!0)])]),_:1})])),[[H,v.value]]),e(mt,{dataURL:"/api/examScores/"+c.examID,columns:_,ref_key:"tableRef",ref:w,deleteKey:"id",onDataLoaded:m},{"button-tail":t(()=>[e(M,{type:"primary",onClick:V[0]||(V[0]=x=>p.value=!0)},{default:t(()=>[...V[12]||(V[12]=[s("æ·»å ",-1)])]),_:1})]),_:1},8,["dataURL"]),e(K,{title:"æ·»å èè¯è®°å½",modelValue:p.value,"onUpdate:modelValue":V[7]||(V[7]=x=>p.value=x),"destroy-on-close":""},{footer:t(()=>[e(M,{onClick:V[6]||(V[6]=x=>p.value=!1)},{default:t(()=>[...V[13]||(V[13]=[s("åæ¶",-1)])]),_:1}),e(M,{type:"primary",onClick:o},{default:t(()=>[...V[14]||(V[14]=[s("ç¡®å®",-1)])]),_:1})]),default:t(()=>[e(R,{"label-width":"auto"},{default:t(()=>[e(O,{label:"èè¯ç§ç®",prop:"subject"},{default:t(()=>[e(I,{modelValue:r.value.subject,"onUpdate:modelValue":V[1]||(V[1]=x=>r.value.subject=x),placeholder:"å¦ç§"},{default:t(()=>[(n(!0),k(ue,null,fe(se($t),x=>
126(n(),N(L,{label:x,value:x,key:x},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(O,{label:"èè¯æç»©"},{default:t(()=>[e(j,{modelValue:r.value.score,"onUpdate:modelValue":V[2]||(V[2]=x=>r.value.score=x),placeholder:"请è¾å
¥èè¯æç»©",type:"number"},null,8,["modelValue"])]),_:1}),e(O,{label:"èè¯æ»¡å"},{default:t(()=>[e(j,{modelValue:r.value.full_score,"onUpdate:modelValue":V[3]||(V[3]=x=>r.value.full_score=x),placeholder:"请è¾å
¥èè¯æ»¡å",type:"number"},null,8,["modelValue"])]),_:1}),e(O,{label:"ç级æå"},{default:t(()=>[e(j,{modelValue:r.value.class_rank,"onUpdate:modelValue":V[4]||(V[4]=x=>r.value.class_rank=x),placeholder:"请è¾å
¥ç级æå",type:"number"},null,8,["modelValue"])]),_:1}),e(O,{label:"年级æå"},{default:t(()=>[e(j,{modelValue:r.value.grade_rank,"onUpdate:modelValue":V[5]||(V[5]=x=>r.value.grade_rank=x),placeholder:"请è¾å
¥å¹´çº§æå",type:"number"},null,8,["modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue"])],64)}}}),fr=Ce(vr,[["__scopeId","data-v-2f9a6400"]]),_r={class:"text-large font-600 mr-3"},yr=ge({__name:"ExamManagement",setup(q){const c=d("main"),w=d(""),v=d(0),y=(u,f)=>{c.value="detail",v.value=u,w.value=f},C=()=>{c.value="statistic"},h=()=>{c.value="main"};return(u,f)=>{const m=a("el-page-header");return c.value=="main"?(n(),N(lr,{key:0,onDetail:y,onStatistic:C})):c.value=="detail"?(n(),N(m,{key:1,onBack:h},{content:t(()=>[l("span",_r,S(w.value),1)]),default:t(()=>[e(fr,{examID:v.value},null,8,["examID"])]),_:1})):c.value=="statistic"?(n(),N(m,{key:2,onBack:h},{content:t(()=>[...f[0]||(f[0]=[l("span",{class:"text-large font-600 mr-3"},"èè¯ç»è®¡",-1)])]),default:t(()=>[e(sr)]),_:1})):te("",!0)}}}),gr={key:0},br={key:1},wr={key:2},kr={key:3},hr={key:4},$r={key:5},Vr={key:6},Cr={key:7},xr={key:8},Dr={key:9},Sr={key:10},Mr=ge({__name:"StudentDashboard",setup(q){const c=st(),w=Ie(),v=!!sessionStorage.getItem("token"),y=d("calendar"),C=d(!1);v||(y.value="dictation"),be(()=>{c.query.tab&&(y.value=c.query.tab),h(),window.addEventListener("resize",h)});function h(){C.value=window.innerWidth>768}function u(m){!v&&m!=="dictation"||(y.value=m,window.innerWidth<=768&&(C.value=!1),w.replace({query:{...c.query,tab:m}}))}function f(){C.value=!C.value}return ct(()=>{window.removeEventListener("resize",h)}),(m,_)=>{const p=a("el-icon"),r=a("el-menu-item"),o=a("el-menu"),g=a("el-aside"),V=a("el-main"),z=a("el-container");return n(),N(z,{class:"student-dashboard"},{default:t(()=>[e(g,{class:Ye(["sidebar",{"mobile-hidden":!C.value}])},{default:t(()=>[e(o,{"default-active":y.value,class:"student-menu",onSelect:u},{default:t(()=>[v?(n(),N(r,{key:0,index:"calendar"},{default:t(()=>[e(p,null,{default:t(()=>[e(se(ht))]),_:1}),_[0]||(_[0]=l("span",null,"æçæ¥å",-1))]),_:1})):te("",!0),v?(n(),N(r,{key:1,index:"courses"},{default:t(()=>[e(p,null,{default:t(()=>[e(se(Vt))]),_:1}),_[1]||(_[1]=l("span",null,"éæ©è¯¾ç¨",-1))]),_:1})):te("",!0),v?(n(),N(r,{key:2,index:"payment-records"},{default:t(()=>[e(p,null,{default:t(()=>[e(se(Kt))]),_:1}),_[2]||(_[2]=l("span",null,"缴费记å½",-1))]),_:1})):te("",!0),v?(n(),N(r,{key:3,index:"class-records"},{default:t(()=>[e(p,null,{default:t(()=>[e(se(kt))]),_:1}),_[3]||(_[3]=l("span",null,"ä¸è¯¾è®°å½",-1))]),_:1})):te("",!0),v?(n(),N(r,{key:4,index:"my-notes"},{default:t(()=>[e(p,null,{default:t(()=>[e(se(bl))]),_:1}),_[4]||(_[4]=l("span",null,"æçç¬è®°",-1))]),_:1})):te("",!0),v?(n(),N(r,{key:5,index:"vocabulary"},{default:t(()=>[e(p,null,{default:t(()=>[e(se(Gt))]),_:1}),_[5]||(_[5]=l("span",null,"è¯æ±å¦ä¹ ",-1))]),_:1})):te("",!0),e(r,{index:"dictation"},{default:t(()=>[e(p,null,{default:t(()=>[e(se(Rt))]),_:1}),_[6]||(_[6]=l("span",null,"åè¯å¬å",-1))]),_:1}),v?(n(),N(r,{key:6,index:"composition"},{default:t(()=>[e(p,null,{default:t(()=>[e(se(kt))]),_:1}),_[7]||(_[7]=l("span",null,"AI使",-1))]),_:1})):te("",!0),v?(n(),N(r,{key:7,index:"dictionary"},{default:t(()=>[e(p,null,{default:t(()=>[e(se(Rt))]),_:1}),_[8]||(_[8]=l("span",null,"AI åå
¸",-1))]),_:1})):te("",!0),v?(n(),N(r,{key:8,index:"my-mistakes"},{default:t(()=>[e(p,null,{default:t(()=>[e(se(kt))]),_:1}),_[9]||(_[9]=l("span",null,"è¯å·éé¢",-1))]),_:1})):te("",!0),v?(n(),N(r,{key:9,index:"exam-management"},{default:t(()=>[e(p,null,{default:t(()=>[e(se(qt))]),_:1}),_[10]||(_[10]=l("span",null,"èè¯è®°å½",-1))]),_:1})):te("",!0)]),_:1},8,["default-active"])]),_:1},8,["class"]),l("div",{class:"menu-toggle",onClick:f},[e(p,null,{default:t(()=>[e(se(At))]),_:1})]),e(V,{class:"main-content"},{default:t(()=>[y.value==="calendar"&&v?(n(),k("div",gr,[e(zt)])):y.value==="courses"&&v?(n(),k("div",br,[e(Qa)])):y.value==="payment-records"&&v?(n(),k("div",wr,[e(to)])):y.value==="class-records"&&v?(n(),k("div",kr,[e(ao)])):y.value==="my-notes"&&v?(n(),k("div",hr,[e(Zt,{"owner-role":"student"})])):y.value==="vocabulary"&&v?(n(),k("div",$r,[e(Wo)])):y.value==="dictation"?(n(),k("div",Vr,[e(Vn)])):y.value==="composition"&&v?(n(),k("div",Cr,[e(Rn)])):y.value==="dictionary"?(n(),k("div",xr,[e(yt)])):y.value==="my-mistakes"?(n(),k("div",Dr,[e(cs)])):y.value==="exam-management"&&v?(n(),k("div",Sr,[e(yr)])):te("",!0)]),_:1})]),_:1})}}}),Ur=Ce(Mr,[["__scopeId","data-v-c07f31ea"]]),Ir={key:0},Tr={key:1},Ar=ge({__name:"JoinInstitution",emits:["joined"],setup(q,{emit:c}){const w=c,v=d([]),y=d(null),C=d(!0),h=async()=>{try{const f=await A.get("/api/institutions");v.value=f.data}catch(f){console.error("Failed to fetch institutions:",f)}finally{C.value=!1}},u=async()=>
126{if(y.value)try{await A.post("/api/teacher/join-institution",{institution_id:y.value}).then(()=>{w("joined")}),b.success("æåå å
¥æºæ"),y.value=null}catch(f){console.error("Failed to join institution:",f),b.warning("å å
¥æºæå¤±è´¥")}};return be(()=>{h()}),(f,m)=>{const _=a("el-option"),p=a("el-select"),r=a("el-col"),o=a("el-button"),g=a("el-row");return C.value?(n(),k("div",Ir,"Loading institutions...")):(n(),k("div",Tr,[e(g,null,{default:t(()=>[e(r,{span:20},{default:t(()=>[e(p,{modelValue:y.value,"onUpdate:modelValue":m[0]||(m[0]=V=>y.value=V),placeholder:"è¯·éæ©æºæ"},{default:t(()=>[(n(!0),k(ue,null,fe(v.value,V=>(n(),N(_,{key:V.id,label:V.name,value:V.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(r,{span:4},{default:t(()=>[e(o,{type:"primary",onClick:u,disabled:!y.value,style:{"margin-left":"10px"}},{default:t(()=>[...m[1]||(m[1]=[s(" å å
¥ ",-1)])]),_:1},8,["disabled"])]),_:1})]),_:1})]))}}}),zr={class:"course-description"},Lr={class:"timeslot-form"},Yr={style:{margin:"15px 0"}},Er={key:0,class:"pagination-container"},Rr={style:{display:"flex",gap:"8px","align-items":"center"}},Fr=ge({__name:"CourseManagement",setup(q){const c=Ae({title:"",description:"",maxStudents:0,mode:"private",price:100,timeslots:[]}),w=d([]),v=d([]),y=d(!1),C=d(null),h=d(!1),u=d(),f=d([]),m=d({page:1}),_=i=>{y.value=!0,C.value=i};je(C,async i=>{const $=await A.get(`/api/teacher/courseBinding/${i}`);v.value=$.data,g(i)});const p=async()=>{try{if(!u.value||!C.value){b.error("è¯·éæ©å¦çè¿è¡ç»å®");return}await A.post(`/api/teacher/courses/${C.value}/bind-student/${u.value}`,{student_id:u.value}),b.success("å¦çç»å®æå");const i=await A.get(`/api/teacher/courseBinding/${C.value}`);v.value=i.data}catch(i){console.error("ç»å®å¦ç失败:",i),b.error("ç»å®å¦ç失败")}},r=async i=>{try{await A.delete(`/api/teacher/courseBinding/${C.value}/${i}`),b.success("å é¤å¦çæå");const $=await A.get(`/api/teacher/courseBinding/${C.value}`);v.value=$.data}catch($){console.error("å é¤å¦ç失败:",$),b.error("å é¤å¦ç失败")}};be(()=>{L(),o()});const o=async function(){try{const i=await A.get("/api/admin/students",{params:{page_disabled:1}});f.value=i.data}catch(i){console.error("å è½½å¦çå表失败:",i),b.error("å è½½å¦çå表失败")}},g=async function(i){try{const $={page:m.value.page,page_size:m.value.page_size},X=await A.get(`/api/courses/${i}/timeslots`,{params:$});m.value=X.data}catch($){console.error("å è½½æ¶æ®µå表失败:",$),b.error("å è½½æ¶æ®µå表失败")}},V=async function(i){m.value.page=i,g(C.value)},z=i=>{m.value.page_size=i,g(C.value)};async function M(){try{if(!c.title){b.error("请è¾å
¥è¯¾ç¨æ é¢");return}const i=JSON.parse(sessionStorage.getItem("user")||"{}"),$=(i==null?void 0:i.id)||1,X=c.timeslots.filter(E=>E.range[0]&&E.range[1]).map(E=>({start:E.range[0].toISOString(),end:E.range[1].toISOString()})),G={title:c.title,description:c.description,max_students:c.maxStudents,mode:c.mode,price:c.price,timeslots:X};await A.post(`/api/teachers/${$}/courses`,G),b.success("课ç¨å建æå"),c.title="",c.description="",c.timeslots=[],c.maxStudents=1,c.mode="private",c.price=0,L(),h.value=!1}catch(i){console.error("å建课ç¨å¤±è´¥:",i),b.error("å建课ç¨å¤±è´¥")}}async function L(){try{const i=JSON.parse(sessionStorage.getItem("user")||"{}"),$=(i==null?void 0:i.id)||1,X=await A.get(`/api/teachers/${$}/courses`);w.value=X.data,w.value.forEach(G=>{G.duration=1,G.studentCount=G.students?G.students.length:0}),X.data.length>0&&(C.value=X.data[0].id)}catch(i){console.error("å 载课ç¨å¤±è´¥:",i),b.error("å 载课ç¨å¤±è´¥")}}async function I(i){const $=new Date(i.startTime);$.setHours($.getHours()+i.duration),i.newRange=[i.startTime,$];try{if(!i.newRange||!i.newRange[0]||!i.newRange[1]){b.error("è¯·éæ©ææçæ¶é´èå´");return}const X={start:i.newRange[0].toISOString(),end:i.newRange[1].toISOString()};await A.post(`/api/courses/${i.id}/timeslots`,X),b.success("æ¶æ®µæ·»å æå");const G=new Date(i.newRange[1]);G.setHours(G.getHours()+i.duration),i.startTime=G,g(C.value)}catch(X){console.error("æ·»å æ¶æ®µå¤±è´¥:",X),b.error("æ·»å æ¶æ®µå¤±è´¥")}}async function O(i){try{await A.delete(`/api/timeslots/${i}`),b.success("æ¶æ®µå 餿å"),g(C.value)}catch($){console.error("å 餿¶æ®µå¤±è´¥:",$),b.error("å 餿¶æ®µå¤±è´¥")}}async function j(i){try{const $=await A.get(`/api/courses/${i.id}/students`);i.students=$.data,i.studentCount=$.data.length,i.showStudents=!0,m.value.data.forEach(X=>
126{X.student="",i.students.forEach(G=>{G.bookings.forEach(E=>{E.timeslot_id===X.id&&(X.student+=", "+G.name)})}),X.student=X.student.substring(2)})}catch($){console.error("å è½½å¦çä¿¡æ¯å¤±è´¥:",$),b.error("å è½½å¦çä¿¡æ¯å¤±è´¥")}}const R=async i=>{try{await A.delete(`/api/courses/${i}`),b.success("课ç¨å 餿å"),L()}catch($){console.error("å é¤è¯¾ç¨å¤±è´¥:",$),b.error("å é¤è¯¾ç¨å¤±è´¥")}},H=function(i){const $=new Date;return $.setHours(i),$.setMinutes(0),$.setSeconds(0),$.setMilliseconds(0),$}(10),x={shortcuts:[{text:"ä»å¤©",onClick(i){const $=new Date;$.setHours(10),$.setMinutes(0),$.setSeconds(0),$.setMilliseconds(0);const X=new Date;X.setHours(X.getHours()+1),X.setMinutes(0),X.setSeconds(0),X.setMilliseconds(0),i.$emit("pick",[$,X])}},{text:"æå¤©",onClick(i){const $=new Date;$.setDate($.getDate()+1),$.setHours(10),$.setMinutes(0),$.setSeconds(0),$.setMilliseconds(0);const X=new Date;X.setDate(X.getDate()+1),X.setHours(X.getHours()+1),X.setMinutes(0),X.setSeconds(0),X.setMilliseconds(0),i.$emit("pick",[$,X])}}],disabledDate(i){return i.getTime()<Date.now()}},B=(i,$)=>{if(i&&i[0]){const X=new Date(i[0]);if(X.setMinutes(0),X.setSeconds(0),X.setMilliseconds(0),!i[1]||i[1]&&i[1].getTime()!==X.getTime()+60*60*1e3){const G=new Date(X);G.setHours(X.getHours()+1),$.newRange=[X,G]}}},D=i=>i.getTime()<Date.now();function U(i,$,X,G){return`${de(X).local().format("MM-DD HH:mm")}`}function F(i,$){return`${de($).diff(de(i),"hour",!0)}h`}return(i,$)=>{const X=a("el-button"),G=a("el-tag"),E=a("el-date-picker"),oe=a("el-form-item"),Q=a("el-input-number"),re=a("el-form"),me=a("el-table-column"),ie=a("el-table"),ce=a("el-pagination"),ke=a("el-tab-pane"),De=a("el-tabs"),ve=a("el-card"),W=a("el-option"),Z=a("el-select"),Ve=a("el-dialog"),xe=a("el-input");return n(),k(ue,null,[e(ve,null,{default:t(()=>[$[20]||($[20]=l("h2",null,"æç课ç¨",-1)),w.value.length===0?(n(),N(X,{key:0,type:"primary",onClick:$[0]||($[0]=ae=>h.value=!0)},{default:t(()=>[...$[12]||($[12]=[s("å建课ç¨",-1)])]),_:1})):te("",!0),e(De,{addable:"",onTabAdd:$[1]||($[1]=ae=>h.value=!0),modelValue:C.value,"onUpdate:modelValue":$[2]||($[2]=ae=>C.value=ae)},{default:t(()=>[(n(!0),k(ue,null,fe(w.value,ae=>(n(),N(ke,{label:ae.title,key:ae.id,name:ae.id},{default:t(()=>[l("div",zr,[s(S(ae.description)+" ",1),ae.mode==="private"?(n(),N(G,{key:0,type:"danger"},{default:t(()=>[...$[13]||($[13]=[s("ç§å¯è¯¾ç¨",-1)])]),_:1})):(n(),N(G,{key:1,type:"success"},{default:t(()=>[...$[14]||($[14]=[s("å
¬å¼è¯¾ç¨",-1)])]),_:1})),e(G,null,{default:t(()=>[s("æ¯æ¶æ®µå¦ç容éï¼"+S(ae.max_students)+"ä½",1)]),_:2},1024),e(G,{type:"info"},{default:t(()=>[s("ä»·æ ¼ï¼"+S(ae.price)+" å
",1)]),_:2},1024)]),l("div",Lr,[e(re,{inline:""},{default:t(()=>[e(oe,{label:"å¼å§æ¶é´"},{default:t(()=>[e(E,{modelValue:ae.startTime,"onUpdate:modelValue":ee=>ae.startTime=ee,type:"datetime","disabled-date":D,"picker-options":x,"default-time":se(H),format:"YYYY-MM-DD HH:mm",onCalendarChange:ee=>B(ee,ae)},null,8,["modelValue","onUpdate:modelValue","default-time","onCalendarChange"])]),_:2},1024),e(oe,{label:"æ¶é¿"},{default:t(()=>[e(Q,{modelValue:ae.duration,"onUpdate:modelValue":ee=>ae.duration=ee,min:1,precision:1,max:4},{suffix:t(()=>[...$[15]||($[15]=[l("span",null,"å°æ¶",-1)])]),_:1},8,["modelValue","onUpdate:modelValue"])]),_:2},1024),e(oe,null,{default:t(()=>[e(X,{type:"primary",size:"small",onClick:ee=>I(ae)},{default:t(()=>[...$[16]||($[16]=[s("æ·»å æ¶æ®µ",-1)])]),_:1},8,["onClick"])]),_:2},1024)]),_:2},1024)]),l("div",Yr,[e(X,{size:"small",onClick:ee=>j(ae)},{default:t(()=>[s("æ¥çé课å¦ç ("+S(ae.studentCount||0)+")",1)]),_:2},1032,["onClick"]),e(X,{size:"small",onClick:ee=>_(ae.id)},{default:t(()=>[...$[17]||($[17]=[s("管çé课å¦ç",-1)])]),_:1},8,["onClick"]),e(X,{size:"small",type:"danger",onClick:ee=>R(ae.id)},{default:t(()=>[...$[18]||($[18]=[s("å é¤è¯¾ç¨",-1)])]),_:1},8,["onClick"])]),e(ie,{data:m.value?m.value.data:[],"table-layout":"auto"},{default:t(()=>[e(me,{prop:"id",label:"æ¶æ®µID"}),e(me,{prop:"start",label:"æ¶æ®µå¼å§",formatter:U}),e(me,{prop:"end",label:"æ¶æ®µç»æ",formatter:U}),e(me,{label:"æ¶é¿",width:"80"},{default:t(ee=>[s(S(F(ee.row.start,ee.row.end)),1)]),_:1}),e(me,{prop:"student",label:"å·²éå¦ç"}),e(me,{label:"æä½"},{default:t(ee=>[e(X,{type:"danger",size:"small",onClick:Y=>
126O(ee.row.id)},{default:t(()=>[...$[19]||($[19]=[s("å é¤",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"]),m.value&&m.value.total>m.value.page_size?(n(),k("div",Er,[e(ce,{onCurrentChange:V,onSizeChange:z,"current-page":m.value.page,"page-size":m.value.page_size,total:m.value.total,"page-sizes":[10,20,50,100],layout:"total, sizes, prev, pager, next, jumper"},null,8,["current-page","page-size","total"])])):te("",!0)]),_:2},1032,["label","name"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(Ve,{title:"管çé课å¦ç",modelValue:y.value,"onUpdate:modelValue":$[5]||($[5]=ae=>y.value=ae),width:"60%"},{footer:t(()=>[e(X,{onClick:$[4]||($[4]=ae=>y.value=!1)},{default:t(()=>[...$[23]||($[23]=[s("å
³é",-1)])]),_:1})]),default:t(()=>[l("div",Rr,[e(Z,{modelValue:u.value,"onUpdate:modelValue":$[3]||($[3]=ae=>u.value=ae),placeholder:"è¯·éæ·»å çå¦ç",style:{flex:"1"}},{default:t(()=>[(n(!0),k(ue,null,fe(f.value,ae=>(n(),N(W,{key:ae.id,label:ae.name,value:ae.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),e(X,{type:"primary",onClick:p},{default:t(()=>[...$[21]||($[21]=[s("æ·»å ",-1)])]),_:1})]),e(ie,{data:v.value,style:{width:"100%"}},{default:t(()=>[e(me,{prop:"name",label:"å¦çå§å",width:"150"}),e(me,{prop:"email",label:"é®ç®±"}),e(me,{label:"æä½"},{default:t(ae=>[e(X,{type:"danger",size:"small",onClick:ee=>r(ae.row.id)},{default:t(()=>[...$[22]||($[22]=[s("å é¤",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])]),_:1},8,["modelValue"]),e(Ve,{modelValue:h.value,"onUpdate:modelValue":$[11]||($[11]=ae=>h.value=ae)},{default:t(()=>[$[25]||($[25]=l("h2",null,"å建课ç¨",-1)),e(re,{model:c},{default:t(()=>[e(oe,{label:"æ é¢"},{default:t(()=>[e(xe,{modelValue:c.title,"onUpdate:modelValue":$[6]||($[6]=ae=>c.title=ae)},null,8,["modelValue"])]),_:1}),e(oe,{label:"æè¿°"},{default:t(()=>[e(xe,{modelValue:c.description,"onUpdate:modelValue":$[7]||($[7]=ae=>c.description=ae),type:"textarea"},null,8,["modelValue"])]),_:1}),e(oe,{label:"课ç¨å½¢å¼"},{default:t(()=>[e(Z,{modelValue:c.mode,"onUpdate:modelValue":$[8]||($[8]=ae=>c.mode=ae),placeholder:"éæ©è¯¾ç¨å½¢å¼"},{default:t(()=>[e(W,{label:"ç§å¯è¯¾ç¨",value:"private"}),e(W,{label:"å
¬å¼è¯¾ç¨",value:"public"})]),_:1},8,["modelValue"])]),_:1}),e(oe,{label:"ä»·æ ¼ï¼å
ï¼"},{default:t(()=>[e(Q,{modelValue:c.price,"onUpdate:modelValue":$[9]||($[9]=ae=>c.price=ae),min:0,step:10},null,8,["modelValue"])]),_:1}),c.mode=="private"?(n(),N(oe,{key:0,label:"æ¯æ¶æ®µå¦ç容é"},{default:t(()=>[e(Q,{modelValue:c.maxStudents,"onUpdate:modelValue":$[10]||($[10]=ae=>c.maxStudents=ae),min:1,"controls-position":"right"},null,8,["modelValue"])]),_:1})):te("",!0),e(oe,null,{default:t(()=>[e(X,{type:"primary",onClick:M},{default:t(()=>[...$[24]||($[24]=[s("å建课ç¨",-1)])]),_:1})]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue"])],64)}}}),Br={key:0},Pr=ge({__name:"UpcomingCourse",setup(q){const c=d([]),w=d(!1),v=d(new Set),y=async()=>{w.value=!0;try{const r=await A.get("/api/teacher/upcoming-classes");c.value=r.data}catch(r){console.error("å è½½å³å°å¼è¯¾ä¿¡æ¯å¤±è´¥:",r),b.error("å è½½å³å°å¼è¯¾ä¿¡æ¯å¤±è´¥")}finally{w.value=!1}};function C(){try{el(c.value),b.success("æ¥åæä»¶å¯¼åºæå")}catch(r){b.warning(r.message||"没æå¯å¯¼åºç课ç¨å®æ")}}function h(r,o){return`${de(o).hour()-de(r).hour()}h`}function u(r,o){return`${de(r).local().format("MM-DD HH:mm")} - ${de(o).local().format("HH:mm")}`}function f(r){return["卿¥","å¨ä¸","å¨äº","å¨ä¸","å¨å","å¨äº","å¨å
"][de(r).day()]}function m(r){v.value.has(r)?v.value.delete(r):v.value.add(r)}function _(r){let o=!1;const g=de();return c.value.forEach(V=>{if(g.isAfter(V.timeslot_start)&&g.isBefore(V.timeslot_end)){o=!0;return}}),o||v.value.has(r)}function p(r){gt.push(`/note/${r}`)}return be(()=>{y()}),(r,o)=>{const g=a("el-button"),V=a("el-table-column"),z=a("el-icon"),M=a("el-tag"),L=a("el-table"),I=a("el-card"),O=Ee("loading");return n(),N(I,null,{header:t(()=>[...o[0]||(o[0]=[l("div",{class:"card-header"},[l("span",null,"å³å°å¼è¯¾")],-1)])]),default:t(()=>[e(g,{type:"primary",onClick:y},{default:t(()=>[...o[1]||(o[1]=[s("å·æ°",-1)])]),_:1}),e(g,{type:"primary",onClick:C},{default:t(()=>[...o[2]||(o[2]=[s("导åºä¸ºæ¥å",-1)])]),_:1}),Me((n(),k("div",null,[e(L,{data:c.value,style:{width:"100%"},stripe:""},{default:t(()=>[e(V,{prop:"time",label:"æ¶é´",width:"180"},{default:t(j=>[s(S(u(j.row.timeslot_start,j.row.timeslot_end)),1)]),_:1}),e(V,{prop:"date",label:"æ¥æ",width:"180"},{default:t(j=>[s(S(f(j.row.timeslot_start)),1)]),_:1}),e(V,{prop:"course_name",label:"课ç¨åç§°",width:"200"}),e(V,{prop:"duration",label:"æ¶é¿",width:"80"},{default:t(j=>[s(S(h(j.row.timeslot_start,j.row.timeslot_end)),1)]),_:1}),e(V,{prop:"student",label:"å¦çå§å"},{default:t(j=>[j.row.student_name?(n(),N(M,{key:0,"disable-transitions":!0,onClick:R=>m(j.row.student_name),class:Ye([{"name-hidden":!_(j.row.student_name)},"student-name-tag"])},{default:t(()=>[_(j.row.student_name)?(n(),k("span",Br,S(j.row.student_name),1)):(n(),N(z,{key:1,class:"hidden-icon"},{default:t(()=>[e(se(wl))]),_:1}))]),_:2},1032,["onClick","class"])):(n(),N(M,{key:1,type:"info"},{default:t(()=>[...o[3]||(o[3]=[s("ææ å¦ç",-1)])]),_:1}))]),_:1}),e(V,{prop:"actions",label:"æä½"},{default:t(j=>[j.row.note_id>
1260?(n(),N(g,{key:0,type:"primary",size:"small",onClick:R=>p(j.row.note_id)},{default:t(()=>[...o[4]||(o[4]=[s("æ¥ç",-1)])]),_:1},8,["onClick"])):(n(),N(Qt,{key:1,bookingId:j.row.book_id,showContent:!1,noteId:j.row.note_id,role:"teacher"},null,8,["bookingId","noteId"]))]),_:1})]),_:1},8,["data"])])),[[O,w.value]])]),_:1})}}}),Hr=ge({__name:"MyStudent",setup(q){const c=d([]),w=d(!1);async function v(){w.value=!0;try{const y=JSON.parse(sessionStorage.getItem("user")||"{}"),C=(y==null?void 0:y.id)||1,u=(await A.get(`/api/teachers/${C}/courses`)).data,f=new Map;for(const m of u){const p=(await A.get(`/api/courses/${m.id}/students`)).data;for(const r of p)try{const o=await A.get(`/api/teacher/students/${r.id}/hours`);f.set(r.id,{id:r.id,name:r.name,email:r.email,balance:o.data.balance})}catch(o){console.error(`è·åå¦ç ${r.id} çå©ä½è¯¾æ¶å¤±è´¥:`,o),f.set(r.id,{id:r.id,name:r.name,email:r.email})}}c.value=Array.from(f.values())}catch(y){console.error("å è½½å¦çç»è®¡æ°æ®å¤±è´¥:",y),b.error("å è½½å¦çç»è®¡æ°æ®å¤±è´¥")}finally{w.value=!1}}return be(()=>{v()}),(y,C)=>{const h=a("el-table-column"),u=a("el-table"),f=a("el-card"),m=Ee("loading");return n(),N(f,null,{header:t(()=>[...C[0]||(C[0]=[l("div",{class:"card-header"},[l("span",null,"å¦çé课ç»è®¡")],-1)])]),default:t(()=>[Me((n(),N(u,{data:c.value,style:{width:"100%"}},{default:t(()=>[e(h,{prop:"name",label:"å¦çå§å",width:"120"}),e(h,{prop:"email",label:"é®ç®±"}),e(h,{prop:"balance",label:"å©ä½è´¹ç¨",width:"120"})]),_:1},8,["data"])),[[m,w.value]])]),_:1})}}}),Or={key:0},qr={key:1},Nr={key:2},jr={key:3},Wr={key:4},Kr={class:"institutions-section"},Gr={key:0},Jr={key:0},Xr={key:1},Qr={class:"institution-content"},Zr={class:"institution-name"},ei={class:"institution-email"},ti={key:5},li={key:6},ai=ge({__name:"TeacherDashboard",setup(q){de.extend(pt),de.extend(xt);const c=d("upcoming"),w=d(!1),v=d(null),y=d(!1),C=d([]),h=d(!1);function u(){y.value=!y.value}const f=d([]),m=d([]),_=d();je(v,async H=>{const x=await A.get(`/api/teacher/courseBinding/${H}`);m.value=x.data});const p=async()=>{try{if(!_.value||!v.value){b.error("è¯·éæ©å¦çè¿è¡ç»å®");return}await A.post(`/api/teacher/courses/${v.value}/bind-student/${_.value}`,{student_id:_.value}),b.success("å¦çç»å®æå");const H=await A.get(`/api/teacher/courseBinding/${v.value}`);m.value=H.data}catch(H){console.error("ç»å®å¦ç失败:",H),b.error("ç»å®å¦ç失败")}},r=d([]),o=d(!0),g=d(!1),V=d(null),z=d([]);function M(H){c.value=H,H==="courses"&&f.value.length===0?O():H==="institutions"&&r.value.length===0?j():H==="upcoming"&&C.value.length===0&&I(),gt.replace({query:{...K.query,tab:H}})}const L=async function(){try{const H=await A.get("/api/admin/students");z.value=H.data}catch(H){console.error("å è½½å¦çå表失败:",H),b.error("å è½½å¦çå表失败")}};async function I(){h.value=!0;try{const H=await A.get("/api/teacher/upcoming-classes");C.value=H.data}catch(H){console.error("å è½½å³å°å¼è¯¾ä¿¡æ¯å¤±è´¥:",H),b.error("å è½½å³å°å¼è¯¾ä¿¡æ¯å¤±è´¥")}finally{h.value=!1}}async function O(){try{const H=JSON.parse(sessionStorage.getItem("user")||"{}"),x=(H==null?void 0:H.id)||1,B=await A.get(`/api/teachers/${x}/courses`);f.value=B.data,f.value.forEach(D=>{D.newRange=[],D.studentCount=D.students?D.students.length:0})}catch(H){console.error("å 载课ç¨å¤±è´¥:",H),b.error("å 载课ç¨å¤±è´¥")}}async function j(){o.value=!0;try{const H=await A.get("/api/teacher/institutions");r.value=H.data}catch(H){console.error("å è½½æºæä¿¡æ¯å¤±è´¥:",H),b.error("å è½½æºæä¿¡æ¯å¤±è´¥")}finally{o.value=!1}}function R(H){V.value=H,g.value=!0}const K=st();return be(()=>{K.query.tab&&(c.value=K.query.tab),I(),L(),K.query.tab==="institutions"&&j()}),(H,x)=>{const B=a("el-icon"),D=a("el-menu-item"),U=a("el-menu"),F=a("el-aside"),i=a("el-divider"),$=a("el-button"),X=a("el-card"),G=a("el-col"),E=a("el-row"),oe=a("el-main"),Q=a("el-form-item"),re=a("el-form"),me=a("el-dialog"),ie=a("el-option"),ce=a("el-select"),ke=a("el-table-column"),De=a("el-table"),ve=a("el-container");return n(),N(ve,{class:"teacher-dashboard"},{default:t(()=>[e(F,{class:Ye(["sidebar",{"mobile-hidden":!y.value}])},{default:t(()=>[e(U,{"default-active":c.value,class:"teacher-menu",onSelect:M},{default:t(()=>[e(D,{index:"upcoming"},{default:t(()=>[e(B,null,{default:t(()=>[e(se(ht))]),_:1}),x[5]||(x[5]=l("span",null,"å³å°å¼è¯¾",-1))]),_:1}),e(D,{index:"calendar"},{default:t(()=>[e(B,null,{default:t(()=>[e(se(ht))]),_:1}),x[6]||(x[6]=l("span",null,"æçæ¥å",-1))]),_:1}),e(D,{index:"dashboard"},{default:t(()=>[e(B,null,{default:t(()=>[e(se(kl))]),_:1}),x[7]||(x[7]=l("span",null,"æå¸ä»ªè¡¨æ¿",-1))]),_:1}),e(D,{index:"courses"},{default:t(()=>[e(B,null,{default:t(()=>[e(se(Vt))]),_:1}),x[8]||(x[8]=l("span",null,"课ç¨ç®¡ç",-1))]),_:1}),e(D,{index:"myNote"},{default:t(()=>[e(B,null,{default:t(()=>[e(se(Ut))]),_:1}),x[9]||(x[9]=l("span",null,"æçç¬è®°",-1))]),_:1}),e(D,{index:"dictionary"},{default:t(()=>[e(B,null,{default:t(()=>[e(se(Ut))]),_:1}
126),x[10]||(x[10]=l("span",null,"AI åå
¸",-1))]),_:1}),e(D,{index:"institutions"},{default:t(()=>[e(B,null,{default:t(()=>[e(se(Ut))]),_:1}),x[11]||(x[11]=l("span",null,"æºæç®¡ç",-1))]),_:1})]),_:1},8,["default-active"])]),_:1},8,["class"]),l("div",{class:"menu-toggle",onClick:u},[e(B,null,{default:t(()=>[e(se(At))]),_:1})]),e(oe,{class:"main-content"},{default:t(()=>[c.value==="upcoming"?(n(),k("div",Or,[e(Pr)])):c.value==="calendar"?(n(),k("div",qr,[e(zt)])):c.value==="dashboard"?(n(),k("div",Nr,[e(Hr)])):c.value==="courses"?(n(),k("div",jr,[e(Fr)])):c.value==="institutions"?(n(),k("div",Wr,[e(X,null,{default:t(()=>[x[15]||(x[15]=l("h2",null,"å å
¥æºæ",-1)),e(Ar,{onJoined:j}),e(i),l("div",Kr,[x[14]||(x[14]=l("h3",null,"æçæºæ",-1)),o.value?(n(),k("div",Gr,"å è½½ä¸...")):(n(),N(E,{key:1,gutter:20},{default:t(()=>[e(G,{span:24},{default:t(()=>{var W;return[((W=r.value)==null?void 0:W.length)===0?(n(),k("div",Jr,[...x[12]||(x[12]=[l("p",null,"æ¨å°æªå å
¥ä»»ä½æºæã",-1)])])):(n(),k("div",Xr,[e(E,{gutter:20,class:"institutions-grid"},{default:t(()=>[(n(!0),k(ue,null,fe(r.value,Z=>(n(),N(G,{span:8,xs:24,key:Z.id,class:"institution-item"},{default:t(()=>[e(X,null,{default:t(()=>[l("div",Qr,[l("div",null,[l("div",Zr,S(Z.name),1),l("div",ei,S(Z.email),1),e($,{size:"small",type:"primary",onClick:Ve=>R(Z)},{default:t(()=>[...x[13]||(x[13]=[s(" æ¥ç详æ
",-1)])]),_:1},8,["onClick"])])])]),_:2},1024)]),_:2},1024))),128))]),_:1})]))]}),_:1})]),_:1}))])]),_:1})])):c.value==="dictionary"?(n(),k("div",ti,[e(yt)])):c.value==="myNote"?(n(),k("div",li,[e(Zt,{"owner-role":"teacher"})])):te("",!0)]),_:1}),V.value?(n(),N(me,{key:0,modelValue:g.value,"onUpdate:modelValue":x[1]||(x[1]=W=>g.value=W),title:"æºæè¯¦æ
",width:"500px"},{footer:t(()=>[e($,{onClick:x[0]||(x[0]=W=>g.value=!1)},{default:t(()=>[...x[16]||(x[16]=[s("å
³é",-1)])]),_:1})]),default:t(()=>[e(re,{"label-position":"top"},{default:t(()=>[e(Q,{label:"åç§°"},{default:t(()=>[l("span",null,S(V.value.name),1)]),_:1}),e(Q,{label:"é®ç®±"},{default:t(()=>[l("span",null,S(V.value.email),1)]),_:1}),e(Q,{label:"èç³»æ¹å¼"},{default:t(()=>[l("span",null,S(V.value.phone||"æªæä¾"),1)]),_:1}),e(Q,{label:"夿³¨"},{default:t(()=>[l("span",null,S(V.value.remark||"æ é¢å¤ä¿¡æ¯"),1)]),_:1})]),_:1})]),_:1},8,["modelValue"])):te("",!0),e(me,{title:"管çé课å¦ç",modelValue:w.value,"onUpdate:modelValue":x[4]||(x[4]=W=>w.value=W),width:"60%"},{footer:t(()=>[e($,{onClick:x[3]||(x[3]=W=>w.value=!1)},{default:t(()=>[...x[18]||(x[18]=[s("å
³é",-1)])]),_:1})]),default:t(()=>[e(ce,{modelValue:_.value,"onUpdate:modelValue":x[2]||(x[2]=W=>_.value=W),placeholder:"è¯·éæ·»å çå¦ç"},{default:t(()=>[(n(!0),k(ue,null,fe(z.value,W=>(n(),N(ie,{key:W.id,label:W.name,value:W.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),e($,{type:"primary",onClick:p},{default:t(()=>[...x[17]||(x[17]=[s("æ·»å ",-1)])]),_:1}),e(De,{data:m.value,style:{width:"100%"}},{default:t(()=>[e(ke,{prop:"name",label:"å¦çå§å",width:"150"}),e(ke,{prop:"email",label:"é®ç®±"})]),_:1},8,["data"])]),_:1},8,["modelValue"])]),_:1})}}}),oi=Ce(ai,[["__scopeId","data-v-1d1d51a0"]]),ni=ge({__name:"AdminDashboard",setup(q){const c=Ie(),w=st(),v=d(h(w)),y=d(!1);be(()=>{C(),window.addEventListener("resize",C)});function C(){y.value=window.innerWidth>768}function h(m){return m.path.startsWith("/admin/users")?"users":m.path.startsWith("/admin/students")?"students":m.path.startsWith("/admin/hour_records")?"hour_records":m.path.startsWith("/admin/courses")?"courses":m.path.startsWith("/admin/stats")?"stats":m.path.startsWith("/admin/mistake_browser")?"mistake_browser":m.path.startsWith("/admin/google_analytics")?"google_analytics":m.path.startsWith("/admin/advertisements")?"advertisements":m.path.startsWith("/admin/meta_tags")?"meta_tags":m.path.startsWith("/admin/vocabulary")?"vocabulary":m.path.startsWith("/admin/mcp-servers")?"mcp-servers":m.path.startsWith("/admin/system")?"system":"users"}je(w,()=>{v.value=h(w),window.innerWidth<=768&&(y.value=!1)});function u(m){m==="users"?c.push("/admin/users"):m==="students"?c.push("/admin/students"):m==="hour_records"?c.push("/admin/hour_records"):m==="courses"?c.push("/admin/courses"):m==="stats"?c.push("/admin/stats"):m==="mistake_browser"?c.push("/admin/mistake_browser"):m==="google_analytics"?c.push("/admin/google_analytics"):m==="advertisements"?c.push("/admin/advertisements"):m==="meta_tags"?c.push("/admin/meta_tags"):m==="vocabulary"?c.push("/admin/vocabulary"):m==="mcp-servers"?c.push("/admin/mcp-servers"):m==="system"&&c.push("/admin/system"),window.innerWidth<=768&&(y.value=!1)}function f(){y.value=!y.value}return ct(()=>{window.removeEventListener("resize",C)}),(m,_)=>{const p=a("el-icon"),r=a("el-menu-item"),o=a("el-menu"),g=a("el-aside"),V=a("router-view"),z=
126a("el-main"),M=a("el-container");return n(),N(M,{class:"admin-container"},{default:t(()=>[e(g,{class:Ye(["sidebar",{"mobile-hidden":!y.value}]),width:"200px"},{default:t(()=>[e(o,{"default-active":v.value,onSelect:u},{default:t(()=>[e(r,{index:"users"},{default:t(()=>[e(p,null,{default:t(()=>[e(se(_t))]),_:1}),_[0]||(_[0]=l("span",null,"ç¨æ·ç®¡ç",-1))]),_:1}),e(r,{index:"students"},{default:t(()=>[e(p,null,{default:t(()=>[e(se(Nt))]),_:1}),_[1]||(_[1]=l("span",null,"å¦ç管ç",-1))]),_:1}),e(r,{index:"hour_records"},{default:t(()=>[e(p,null,{default:t(()=>[e(se(Kt))]),_:1}),_[2]||(_[2]=l("span",null,"ç¼´è´¹ç»è®¡",-1))]),_:1}),e(r,{index:"courses"},{default:t(()=>[e(p,null,{default:t(()=>[e(se(Vt))]),_:1}),_[3]||(_[3]=l("span",null,"é课管ç",-1))]),_:1}),e(r,{index:"stats"},{default:t(()=>[e(p,null,{default:t(()=>[e(se(Ft))]),_:1}),_[4]||(_[4]=l("span",null,"å¦çç»è®¡",-1))]),_:1}),e(r,{index:"mistake_browser"},{default:t(()=>[e(p,null,{default:t(()=>[e(se(Ft))]),_:1}),_[5]||(_[5]=l("span",null,"é颿µè§",-1))]),_:1}),e(r,{index:"google_analytics"},{default:t(()=>[e(p,null,{default:t(()=>[e(se(hl))]),_:1}),_[6]||(_[6]=l("span",null,"Google Analytics",-1))]),_:1}),e(r,{index:"advertisements"},{default:t(()=>[e(p,null,{default:t(()=>[e(se($l))]),_:1}),_[7]||(_[7]=l("span",null,"广å管ç",-1))]),_:1}),e(r,{index:"vocabulary"},{default:t(()=>[e(p,null,{default:t(()=>[e(se(Gt))]),_:1}),_[8]||(_[8]=l("span",null,"è¯æ±ç®¡ç",-1))]),_:1}),e(r,{index:"mcp-servers"},{default:t(()=>[e(p,null,{default:t(()=>[e(se(Vl))]),_:1}),_[9]||(_[9]=l("span",null,"MCPæå¡å¨",-1))]),_:1}),e(r,{index:"meta_tags"},{default:t(()=>[e(p,null,{default:t(()=>[e(se(Cl))]),_:1}),_[10]||(_[10]=l("span",null,"Metaæ ç¾",-1))]),_:1}),e(r,{index:"system"},{default:t(()=>[e(p,null,{default:t(()=>[e(se(jt))]),_:1}),_[11]||(_[11]=l("span",null,"ç³»ç»ç»´æ¤",-1))]),_:1})]),_:1},8,["default-active"])]),_:1},8,["class"]),l("div",{class:"menu-toggle",onClick:f},[e(p,null,{default:t(()=>[e(se(At))]),_:1})]),e(M,{class:"main-container"},{default:t(()=>[e(z,{class:"main-content"},{default:t(()=>[e(V)]),_:1})]),_:1})]),_:1})}}}),si=Ce(ni,[["__scopeId","data-v-a068a4d1"]]),ri={key:0,class:"pagination-container"},ii=ge({__name:"AdminUsers",setup(q){const c=d({name:"",email:"",phone:"",city:"",region:"",remark:"",password:"",role:"student"}),w=Ie(),v=d({page:1});async function y(){const p=await A.get("/api/admin/users",{params:{page:v.value.page,page_size:v.value.page_size}});v.value=p.data}const C=async function(p){v.value.page=p,y()},h=p=>{v.value.page_size=p,y()};be(y);function u(p){w.push(`/admin/users/${p}`)}async function f(){try{await A.post("/api/admin/users",c.value),c.value={name:"",email:"",phone:"",city:"",region:"",remark:"",password:"",role:"student"},await y(),b.success("ç¨æ·å建æå")}catch{b.error("ç¨æ·å建失败")}}async function m(p){try{await A.delete(`/api/admin/users/${p}`),await y(),b.success("ç¨æ·å 餿å")}catch{b.error("ç¨æ·å é¤å¤±è´¥")}}async function _(p){const r=prompt("è¾å
¥æ°å¯ç ");if(r)try{await A.post(`/api/admin/users/${p}/reset`,{password:r}),b.success("å¯ç å·²éç½®")}catch{b.error("å¯ç é置失败")}}return(p,r)=>{const o=a("el-input"),g=a("el-form-item"),V=a("el-option"),z=a("el-select"),M=a("el-button"),L=a("el-form"),I=a("el-card"),O=a("el-col"),j=a("el-table-column"),R=a("el-table"),K=a("el-pagination"),H=a("el-row");return n(),N(H,{gutter:20},{default:t(()=>[e(O,{span:6,xs:0},{default:t(()=>[e(I,null,{default:t(()=>[r[9]||(r[9]=l("h3",null,"æ·»å ç¨æ·",-1)),e(L,{model:c.value,"label-width":"auto"},{default:t(()=>[e(g,{label:"Name"},{default:t(()=>[e(o,{modelValue:c.value.name,"onUpdate:modelValue":r[0]||(r[0]=x=>c.value.name=x)},null,8,["modelValue"])]),_:1}),e(g,{label:"Email"},{default:t(()=>[e(o,{modelValue:c.value.email,"onUpdate:modelValue":r[1]||(r[1]=x=>c.value.email=x)},null,8,["modelValue"])]),_:1}),e(g,{label:"Phone"},{default:t(()=>[e(o,{modelValue:c.value.phone,"onUpdate:modelValue":r[2]||(r[2]=x=>c.value.phone=x)},null,8,["modelValue"])]),_:1}),e(g,{label:"City"},{default:t(()=>[e(o,{modelValue:c.value.city,"onUpdate:modelValue":r[3]||(r[3]=x=>c.value.city=x)},null,8,["modelValue"])]),_:1}),e(g,{label:"Region"},{default:t(()=>[e(o,{modelValue:c.value.region,"onUpdate:modelValue":r[4]||(r[4]=x=>c.value.region=x)},null,8,["modelValue"])]),_:1}),e(g,{label:"Remark"},{default:t(()=>[e(o,{modelValue:c.value.remark,"onUpdate:modelValue":r[5]||(r[5]=x=>c.value.remark=x),type:"textarea"},null,8,["modelValue"])]),_:1}),e(g,{label:"Password"},{default:t(()=>[e(o,{type:"password",modelValue:c.value.password,"onUpdate:modelValue":r[6]||(r[6]=x=>c.value.password=x)},null,8,["modelValue"])]),_:1}),e(g,{label:"Role"},{default:t(()=>[e(z,{modelValue:c.value.role,"onUpdate:modelValue":r[7]||(r[7]=x=>c.value.role=x)},{default:t(()=>[e(V,{label:"Admin",value:"admin"}),e(V,{label:"Teacher",value:"teacher"}),e(V,{label:"Student",value:"student"}),e(V,{label:"Institution",value:"institution"})]),_:1},8,["modelValue"])]),_:1}),e(g,null,{default:t(()=>[e(M,{type:"primary",onClick:f},{default:t(()=>[...r[8]||(r[8]=[s("å建",-1)])]),_:1})]),_:1})]),_:1},8,["model"])]),_:1})]),_:1}),e(O,{span:18,xs:24},{default:t(()=>[e(I,null,{default:t(()=>[r[13]||(r[13]=l("h3",null,"ç¨æ·å表",-1)),e(R,{data:v.value?v.value.data:[],style:{width:"100%"}},{default:t(()=>[e(j,{prop:"id",label:"#",width:"60"}),e(j,{prop:"name",label:"Name"}),e(j,{prop:"email",label:"Email"}),e(j,{prop:"role",label:"Role"}),e(j,{label:"Actions"},{default:t(({row:x})=>[e(M,{size:"small",onClick:B=>u(x.id)},{default:t(()=>[...r[10]||(r[10]=[s("æ¥ç详æ
",-1)])]),_:1},8,["onClick"]),e(M,{size:"small",type:"danger",onClick:B=>m(x.id)},{default:t(()=>[...r[11]||(r[11]=[s("å é¤",-1)])]),_:1},8,["onClick"]),e(M,{size:"small",onClick:B=>_(x.id)},{default:t(()=>[...r[12]||(r[12]=[s("éç½®å¯ç ",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"]),v.value&&v.value.total>v.value.page_size?(n(),k("div",ri,[e(K,{onCurrentChange:C,onSizeChange:h,"current-page":v.value.page,"page-size":v.value.page_size,total:v.value.total,"page-sizes":[10,20,50,100],layout:"total, sizes, prev, pager, next, jumper"},null,8,["current-page","page-size","total"])])):te("",!0)]),_:1})]),_:1})]),_:1})}}}),ui={key:0},di={key:1},ci=ge({__name:"AdminUsersDetail",setup(q){const c=st(),w=Ie(),v=d(null),y=Ae({city:"",region:""});be(async()=>{const f=c.params.id;if(!f){w.push("/admin/users");return}try{const m=await A.get(`/api/admin/users/${f}`);v.value=m.data,y.city=v.value.city||"",y.region=v.value.region||""}catch(m){console.error("è·åç¨æ·ä¿¡æ¯å¤±è´¥:",m),b.error("è·åç¨æ·ä¿¡æ¯å¤±è´¥"),w.push("/admin/users")}});function C(){w.go(-1)}function h(f){return f?f.toFixed(2):"0.00"}async function u(){try{const f=await A.post(`/api/admin/users/${v.value.id}/location`,{city:y.city,region:y.region});v.value=f.data,b.success("ä½ç½®ä¿¡æ¯æ´æ°æå")}catch{b.error("ä½ç½®ä¿¡æ¯æ´æ°å¤±è´¥")}}return(f,m)=>{const _=a("el-page-header"),p=a("el-descriptions-item"),r=a("el-descriptions"),o=a("el-input"),g=a("el-form-item"),V=a("el-button"),z=a("el-form"),M=a("el-card"),L=a("el-container");return n(),N(L,{style:{padding:"20px","max-width":"800px",margin:"auto"}},{default:t(()=>[e(M,null,{default:t(()=>[e(_,{onBack:C,content:"ç¨æ·è¯¦æ
",style:{"margin-bottom":"20px"}}),v.value?(n(),k("div",ui,[e(r,{title:"ç¨æ·ä¿¡æ¯",column:1,border:""},{default:t(()=>[e(p,{label:"ID"},{default:t(()=>[s(S(v.value.id),1)]),_:1}),e(p,{label:"å§å"},{default:t(()=>[s(S(v.value.name),1)]),_:1}),e(p,{label:"é®ç®±"},{default:t(()=>[s(S(v.value.email),1)]),_:1}),e(p,{label:"ææºå·"},{default:t(()=>[s(S(v.value.phone||"æªå¡«å"),1)]),_:1}),e(p,{label:"åå¸"},{default:t(()=>[s(S(v.value.city||"æªå¡«å"),1)]),_:1}),e(p,{label:"åºå"},{default:t(()=>[s(S(v.value.region||"æªå¡«å"),1)]),_:1}),e(p,{label:"夿³¨"},{default:t(()=>[s(S(v.value.remark||"æ "),1)]),_:1}),e(p,{label:"è§è²"},{default:t(()=>[s(S(v.value.role),1)]),_:1}),e(p,{label:"ä½é¢"},{default:t(()=>[s(S(h(v.value.balance))+" å
",1)]),_:1})]),_:1}),e(M,{style:{"margin-top":"20px"}},{header:t(()=>[...m[2]||(m[2]=[l("div",{class:"card-header"},[l("span",null,"ç¼è¾ä½ç½®ä¿¡æ¯")],-1)])]),default:t(()=>[e(z,{model:y,"label-width":"120px",onSubmit:Oe(u,["prevent"])},{default:t(()=>[e(g,{label:"åå¸"},{default:t(()=>[e(o,{modelValue:y.city,"onUpdate:modelValue":m[0]||(m[0]=I=>y.city=I),placeholder:"请è¾å
¥åå¸"},null,8,["modelValue"])]),_:1}),e(g,{label:"åºå"},{default:t(()=>[e(o,{modelValue:y.region,"onUpdate:modelValue":m[1]||(m[1]=I=>y.region=I),placeholder:"请è¾å
¥åºå"},null,8,["modelValue"])]),_:1}),e(g,null,{default:t(()=>[e(V,{type:"primary",onClick:u},{default:t(()=>[...m[3]||(m[3]=[s("æ´æ°ä½ç½®ä¿¡æ¯",-1)])]),_:1})]),_:1})]),_:1},8,["model"])]),_:1})])):(n(),k("div",di,[...m[4]||(m[4]=[l("p",null,"å è½½ä¸...",-1)])]))]),_:1})]),_:1})}}}),pi=ge({__name:"AdminCourses",setup(q){const c=d(!1),w=d(!1),v=d({page:1,page_size:10,total:0,data:[]}),y=d(),C=d([{label:"é¢çº¦ID",prop:"booking.id"},{label:"课ç¨åç§°",prop:"course.title"},{label:"æå¸",prop:"teacher.name"},{label:"å¦ç",prop:"student.name",searchable:!0,searchKey:"student_name"},{label:"å¼å§æ¶é´",prop:"timeslot.start",searchable:!0,searchKind:"date",searchKey:"start_time",formatter:M},{label:"ç»ææ¶é´",prop:"timeslot.end",searchable:!0,searchKind:"date",searchKey:"end_time",formatter:M},{label:"æ¶é¿ï¼å°æ¶ï¼",prop:"duration",kind:"slot"}]),h=Ae({studentName:"",startTime:"",endTime:""});be(async()=>{await u()}),je(w,L=>{L&&(m(),p())});async function u(){try{c.value=!0;const L={page:v.value.page,page_size:v.value.page_size};h.studentName&&(L.student_name=encodeURIComponent(h.studentName)),h.startTime&&(L.start_time=h.startTime),h.endTime&&(L.end_time=h.endTime);const I=await A.get("/api/admin/bookings",{params:L});
126v.value=I.data}catch(L){console.error("Failed to load bookings:",L)}finally{c.value=!1}}const f=d([]),m=async()=>{try{const L=await A.get("/api/admin/students",{params:{page_disabled:"1"}});f.value=L.data}catch(L){console.error("Failed to load students:",L)}},_=d([]),p=async()=>{try{const L=await A.get("/api/admin/courses");_.value=L.data}catch(L){console.error("Failed to load courses:",L)}},r=d(null),o=d(null),g=d(null),V=d(1),z=async()=>{try{if(!r.value||!o.value||!g.value||!V.value){b.error("请填å宿´ä¿¡æ¯");return}(await A.post("/api/admin/missingBooking",{course_id:r.value,student_id:o.value,start_time:g.value,hours:Number(V.value)})).status===201&&b.success("å建æå"),w.value=!1,await u(),await y.value.loadData()}catch{b.error("å建失败")}};function M(L,I,O){return de(O).local().format("YYYY-MM-DD HH:mm")}return(L,I)=>{const O=a("el-button"),j=a("el-option"),R=a("el-select"),K=a("el-form-item"),H=a("el-date-picker"),x=a("el-input"),B=a("el-form"),D=a("el-dialog");return n(),k(ue,null,[l("div",null,[I[7]||(I[7]=l("h3",null,"ææé¢çº¦è®°å½",-1)),e(mt,{dataURL:"/api/admin/bookings",columns:C.value,ref_key:"bookingTableRef",ref:y},{"button-tail":t(()=>[e(O,{type:"primary",onClick:I[0]||(I[0]=U=>w.value=!0)},{default:t(()=>[...I[6]||(I[6]=[s("è¡¥å½",-1)])]),_:1})]),_:1},8,["columns"])]),e(D,{title:"è¡¥å½",modelValue:w.value,"onUpdate:modelValue":I[5]||(I[5]=U=>w.value=U)},{default:t(()=>[e(B,{"label-width":"auto"},{default:t(()=>[e(K,{label:"课ç¨"},{default:t(()=>[e(R,{modelValue:r.value,"onUpdate:modelValue":I[1]||(I[1]=U=>r.value=U),placeholder:"è¯·éæ©è¯¾ç¨"},{default:t(()=>[(n(!0),k(ue,null,fe(_.value,U=>(n(),N(j,{key:U.id,value:U.id,label:U.title},null,8,["value","label"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(K,{label:"å¦ç"},{default:t(()=>[e(R,{modelValue:o.value,"onUpdate:modelValue":I[2]||(I[2]=U=>o.value=U),placeholder:"è¯·éæ©å¦ç"},{default:t(()=>[(n(!0),k(ue,null,fe(f.value,U=>(n(),N(j,{key:U.id,value:U.id,label:U.name},null,8,["value","label"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(K,{label:"å¼å§æ¶é´"},{default:t(()=>[e(H,{modelValue:g.value,"onUpdate:modelValue":I[3]||(I[3]=U=>g.value=U),type:"datetime",placeholder:"éæ©æ¶é´"},null,8,["modelValue"])]),_:1}),e(K,{label:"æ¶é¿"},{default:t(()=>[e(x,{modelValue:V.value,"onUpdate:modelValue":I[4]||(I[4]=U=>V.value=U),placeholder:"请è¾å
¥æ¶é¿",type:"number",min:1},null,8,["modelValue"])]),_:1}),e(K,null,{default:t(()=>[e(O,{type:"primary",onClick:z},{default:t(()=>[...I[8]||(I[8]=[s("å建",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])],64)}}}),mi=ge({__name:"AdminStudentStats",setup(q){const c=d(null);let w=null;const v=d([]);async function y(){try{const u=await A.get("/api/admin/students",{params:{page_disabled:"1"}});v.value=u.data,h()}catch(u){console.error("è·åå¦çæ°æ®å¤±è´¥:",u)}}function C(){c.value&&(w=ut(c.value),h())}function h(){if(!w)return;const u={title:{text:"å¦çä½é¢ç»è®¡"},tooltip:{trigger:"axis",axisPointer:{type:"shadow"}},grid:{left:"3%",right:"4%",bottom:"3%",containLabel:!0},xAxis:[{type:"category",data:v.value.map(f=>f.name),axisTick:{alignWithLabel:!0}}],yAxis:[{type:"value",name:"ä½é¢"}],series:[{name:"ä½é¢",type:"bar",barWidth:"60%",data:v.value.map(f=>f.balance||0),itemStyle:{color:new Ht(0,0,0,1,[{offset:0,color:"#83bff6"},{offset:.5,color:"#188df0"},{offset:1,color:"#188df0"}])},emphasis:{itemStyle:{color:new Ht(0,0,0,1,[{offset:0,color:"#2378f7"},{offset:.7,color:"#2378f7"},{offset:1,color:"#83bff6"}])}}}]};w.setOption(u)}return be(()=>{C(),y()}),window.addEventListener("resize",()=>{w&&w.resize()}),(u,f)=>{const m=a("el-card");return n(),N(m,null,{default:t(()=>[l("div",{ref_key:"chartContainer",ref:c,style:{width:"100%",height:"500px"}},null,512)]),_:1})}}}),vi={key:0,class:"pagination-container"},fi=ge({__name:"AdminStudentManagement",setup(q){const c=d({page:1}),w=d(!0),v=Ie(),y=d({sourceInviteCode:""});be(async()=>{await u()});const C=async()=>{await u()},h=()=>{y.value.sourceInviteCode="",u()};async function u(){try{w.value=!0;const M={page:c.value.page,page_size:c.value.page_size};y.value.sourceInviteCode&&(M.source_invite_code=y.value.sourceInviteCode);const L=await A.get("/api/admin/students",{params:M});c.value=L.data}
126catch(M){b.error("å è½½å¦çæ°æ®å¤±è´¥"),console.error(M)}finally{w.value=!1}}const f=async function(M){c.value.page=M,u()},m=M=>{c.value.page_size=M,u()};function _(M){return new Date(M).toLocaleString("zh-CN")}function p(M){v.push(`/admin/users/${M.id}`)}const r=d(),o=d({amount:100,remarks:"",paymentType:"regular"}),g=async()=>{try{const M={amount:Number(o.value.amount),remarks:o.value.remarks,payment_type:o.value.paymentType};if((await A.post(`/api/admin/users/${r.value.id}/pay`,M)).status!==200)throw new Error("缴费失败");b.success("ç¼´è´¹æå"),V.value=!1,await u()}catch(M){b.error("缴费失败"),console.error(M)}},V=d(!1),z=M=>{V.value=!0,r.value=M,o.value.paymentType="regular"};return(M,L)=>{const I=a("el-input"),O=a("el-form-item"),j=a("el-button"),R=a("el-form"),K=a("el-card"),H=a("el-table-column"),x=a("el-dropdown-item"),B=a("el-dropdown-menu"),D=a("el-dropdown"),U=a("el-table"),F=a("el-pagination"),i=a("el-option"),$=a("el-select"),X=a("el-dialog"),G=Ee("loading");return n(),k(ue,null,[l("div",null,[L[11]||(L[11]=l("h2",null,"å¦ç管ç",-1)),e(K,{class:"search-card"},{default:t(()=>[e(R,{model:y.value,inline:!0,onSubmit:Oe(C,["prevent"])},{default:t(()=>[e(O,{label:"注åé请ç "},{default:t(()=>[e(I,{modelValue:y.value.sourceInviteCode,"onUpdate:modelValue":L[0]||(L[0]=E=>y.value.sourceInviteCode=E),placeholder:"请è¾å ¥æ³¨åé请ç ",clearable:""},null,8,["modelValue"])]),_:1}),e(O,null,{default:t(()=>[e(j,{type:"primary",onClick:C},{default:t(()=>[...L[7]||(L[7]=[s("æç´¢",-1)])]),_:1}),e(j,{onClick:h},{default:t(()=>[...L[8]||(L[8]=[s("éç½®",-1)])]),_:1})]),_:1})]),_:1},8,["model"])]),_:1}),Me((n(),N(U,{data:c.value.data,style:{width:"100%"}},{default:t(()=>[e(H,{prop:"id",label:"ID",width:"80"}),e(H,{prop:"name",label:"å§å",width:"120"}),e(H,{prop:"email",label:"é®ç®±"}),e(H,{prop:"balance",label:"ä½é¢(å )",width:"120"}),e(H,{prop:"phone",label:"ææºå·",width:"120"}),e(H,{prop:"city",label:"åå¸",width:"100"}),e(H,{prop:"region",label:"åºå",width:"100"}),e(H,{prop:"remark",label:"夿³¨"}),e(H,{prop:"invite_code",label:"é请ç ",width:"120"}),e(H,{prop:"source_invite_code",label:"注åé请ç ",width:"120"}),e(H,{prop:"created_at",label:"å建æ¶é´",width:"180"},{default:t(E=>[s(S(_(E.row.created_at)),1)]),_:1}),e(H,{label:"æä½",width:"220"},{default:t(E=>[e(D,{"split-button":"",type:"primary",onClick:oe=>p(E.row)},{dropdown:t(()=>[e(B,null,{default:t(()=>[e(x,{onClick:oe=>z(E.row)},{default:t(()=>[...L[9]||(L[9]=[s("ç¼´è´¹",-1)])]),_:1},8,["onClick"])]),_:2},1024)]),default:t(()=>[L[10]||(L[10]=s(" æ¥ç详æ ",-1))]),_:2},1032,["onClick"])]),_:1})]),_:1},8,["data"])),[[G,w.value]]),c.value&&c.value.total>c.value.page_size?(n(),k("div",vi,[e(F,{onCurrentChange:f,onSizeChange:m,"current-page":c.value.page,"page-size":c.value.page_size,total:c.value.total,"page-sizes":[10,20,50,100],layout:"total, sizes, prev, pager, next, jumper"},null,8,["current-page","page-size","total"])])):te("",!0)]),e(X,{title:"ç¼´è´¹",modelValue:V.value,"onUpdate:modelValue":L[6]||(L[6]=E=>V.value=E)},{footer:t(()=>[e(j,{type:"primary",onClick:L[5]||(L[5]=E=>V.value=!1)},{default:t(()=>[...L[12]||(L[12]=[s("åæ¶",-1)])]),_:1}),e(j,{type:"primary",onClick:g},{default:t(()=>[...L[13]||(L[13]=[s("确认缴费",-1)])]),_:1})]),default:t(()=>[e(R,{"label-width":"120px"},{default:t(()=>[e(O,{label:"å¦çå§å",prop:"id"},{default:t(()=>[e(I,{modelValue:r.value.name,"onUpdate:modelValue":L[1]||(L[1]=E=>r.value.name=E),readonly:""},null,8,["modelValue"])]),_:1})]),_:1}),e(R,{"label-width":"120px"},{default:t(()=>[e(O,{label:"ç¼´è´¹éé¢",prop:"amount"},{default:t(()=>[e(I,{modelValue:o.value.amount,"onUpdate:modelValue":L[2]||(L[2]=E=>o.value.amount=E),type:"number",placeholder:"请è¾å ¥ç¼´è´¹éé¢"},null,8,["modelValue"])]),_:1})]),_:1}),e(R,{"label-width":"120px"},{default:t(()=>[e(O,{label:"缴费类å",prop:"paymentType"},{default:t(()=>[e($,{modelValue:o.value.paymentType,"onUpdate:modelValue":L[3]||(L[3]=E=>o.value.paymentType=E),placeholder:"è¯·éæ©ç¼´è´¹ç±»å"},{default:t(()=>[e(i,{label:"æ£å¸¸ç¼´è´¹",value:"regular"}),e(i,{label:"èµ ééé¢",value:"gifted"})]),_:1},8,["modelValue"])]),_:1})]),_:1}),e(R,{"label-width":"120px"},{default:t(()=>[e(O,{label:"夿³¨",prop:"created_at"},{default:t(()=>[e(I,{modelValue:o.value.remarks,"onUpdate:modelValue":L[4]||(L[4]=E=>o.value.remarks=E),type:"text",placeholder:"请è¾å ¥å¤æ³¨"},null,8,["modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue"])],64)}}}),_i={class:"card-header"},yi={style:{float:"right"}},gi=ge({__name:"AdminHourRecordStats",setup(q){const c=d(null);let w=null;const v=d([]),y=d(!1),C=d("student");function h(p){return de(p).format("YYYY-MM-DD HH:mm")}async function u(){try{y.value=!0;const p=await A.get("/api/admin/all-payment-records");v.value=p.data||[],await dt(),f()}catch(p){console.error("è·å课æ¶è®°å½å¤±è´¥:",p)}finally{y.value=!1}}function f(){c.value&&(w&&w.dispose(),w=ut(c.value),C.value==="student"?m():_(),window.addEventListener("resize",()=>{w==null||w.resize()}))}function m(){const p={};v.value.forEach(V=>{const z=V.student_name||"æªç¥å¦ç";p[z]||(p[z]={name:z,regularAmount:0,giftedAmount:0,totalAmount:0}),V.payment_type==="regular"||V.payment_type===""?p[z].regularAmount+=V.amount:V.payment_type==="gifted"&&(p[z].giftedAmount+=V.amount),p[z].totalAmount=p[z].regularAmount+p[z].giftedAmount});const r=Object.keys(p).map(V=>p[V].name),o=Object.keys(p).map(V=>p[V].totalAmount),g={tooltip:{trigger:"axis",axisPointer:{type:"shadow"},formatter:function(V){const z=V[0],M=p[z.name];return`${z.name}<br/> 127 æ»éé¢: ${M.totalAmount.toFixed(2)}<br/> 128 æ£å¸¸ç¼´è´¹: ${M.regularAmount.toFixed(2)}<br/> 129 èµ ééé¢: ${M.giftedAmount.toFixed(2)}`}},xAxis:{type:"category",data:r},yAxis:{type:"value",name:"æ»éé¢"},series:[{data:o,type:"bar",itemStyle:{color:"#409EFF"}}]};w.setOption(g)}function _(){const p={};v.value.filter(I=>I.payment_type==="regular"||I.payment_type==="").forEach(I=>{const O=de(I.created_at).format("YYYY-MM");p[O]||(p[O]={month:O,regularAmount:0,cumulativeAmount:0}),p[O].regularAmount+=I.amount});const o=Object.keys(p).map(I=>p[I]).sort((I,O)=>I.month.localeCompare(O.month));let g=0;o.forEach(I=>{g+=I.regularAmount,I.cumulativeAmount=g});const V=o.map(I=>I.month),z=o.map(I=>I.regularAmount),M=o.map(I=>I.cumulativeAmount),L={tooltip:{trigger:"axis",axisPointer:{type:"shadow"}},legend:{data:["æ£å¸¸ç¼´è´¹éé¢","累计æ»é¢"]},xAxis:{type:"category",data:V},yAxis:{type:"value",name:"éé¢"},series:[{name:"æ£å¸¸ç¼´è´¹éé¢",data:z,type:"bar",itemStyle:{color:"#409EFF"}},{name:"累计æ»é¢",data:M,type:"line",smooth:!0,itemStyle:{color:"#67C23A"}}]};w.setOption(L)}return be(()=>{u()}),(p,r)=>{const o=a("el-radio-button"),g=a("el-radio-group"),V=a("el-table-column"),z=a("el-tag"),M=a("el-table"),L=a("el-card"),I=Ee("loading");return n(),k("div",null,[e(L,null,{header:t(()=>[l("div",_i,[r[3]||(r[3]=l("span",null,"ç¼´è´¹ç»è®¡",-1)),l("div",yi,[e(g,{modelValue:C.value,"onUpdate:modelValue":r[0]||(r[0]=O=>C.value=O),onChange:f},{default:t(()=>[e(o,{label:"student"},{default:t(()=>[...r[1]||(r[1]=[s("æå¦çç»è®¡",-1)])]),_:1}),e(o,{label:"monthly"},{default:t(()=>[...r[2]||(r[2]=[s("ææç»è®¡",-1)])]),_:1})]),_:1},8,["modelValue"])])])]),default:t(()=>[l("div",{ref_key:"chartContainer",ref:c,style:{width:"100%",height:"400px"}},null,512),Me((n(),N(M,{data:v.value,style:{width:"100%"}},{default:t(()=>[e(V,{prop:"student_name",label:"å¦çå§å",width:"120"}),e(V,{prop:"created_at",label:"æ¶é´",width:"180",formatter:O=>h(O.created_at)},null,8,["formatter"]),e(V,{prop:"amount",label:"éé¢",width:"100"},{default:t(({row:O})=>[l("span",{class:Ye(O.amount>0?"positive":"negative")},S(O.amount>0?"+":"")+S(O.amount),3)]),_:1}),e(V,{prop:"payment_type",label:"缴费类å",width:"120"},{default:t(({row:O})=>[e(z,{type:O.payment_type==="regular"?"primary":"success"},{default:t(()=>[s(S(O.payment_type==="regular"?"æ£å¸¸ç¼´è´¹":"èµ ééé¢"),1)]),_:2},1032,["type"])]),_:1}),e(V,{prop:"remarks",label:"夿³¨"}),e(V,{prop:"admin_id",label:"æä½åID",width:"100"})]),_:1},8,["data"])),[[I,y.value]])]),_:1})])}}}),bi=Ce(gi,[["__scopeId","data-v-5226b420"]]),wi={key:0,class:"current-config"},ki=ge({__name:"AdminGoogleAnalytics",setup(q){const c=Ae({measurementId:""}),w=Ae({id:0,measurement_id:"",created_at:"",updated_at:""}),v=d(!1);be(()=>{y()});async function y(){try{const u=await A.get("/api/admin/google-analytics");Object.assign(w,u.data),c.measurementId=u.data.measurement_id||""}catch(u){console.error("å è½½é 置失败:",u),b.error("å è½½é 置失败")}}async function C(){if(!c.measurementId.trim()){b.warning("请è¾å ¥ Measurement ID");return}v.value=!0;try{const u=await A.post("/api/admin/google-analytics",{measurement_id:c.measurementId});Object.assign(w,u.data),b.success("é 置已ä¿å")}catch(u){console.error("ä¿åé 置失败:",u),b.error("ä¿åé 置失败")}finally{v.value=!1}}
129function h(u){return u?new Date(u).toLocaleString("zh-CN"):""}return(u,f)=>{const m=a("el-input"),_=a("el-form-item"),p=a("el-button"),r=a("el-form"),o=a("el-card");return n(),N(o,{class:"ga-config-card"},{header:t(()=>[...f[1]||(f[1]=[l("div",{class:"card-header"},[l("span",null,"Google Analytics é
ç½®")],-1)])]),default:t(()=>[e(r,{model:c,"label-width":"120px"},{default:t(()=>[e(_,{label:"Measurement ID"},{default:t(()=>[e(m,{modelValue:c.measurementId,"onUpdate:modelValue":f[0]||(f[0]=g=>c.measurementId=g),placeholder:"ä¾å¦: G-XXXXXXXXXX",clearable:""},null,8,["modelValue"]),f[2]||(f[2]=l("div",{class:"help-text"},' å¨ Google Analytics 4 䏿¾å°æ¨ç Measurement IDãé常以 "G-" å¼å¤´ã ',-1))]),_:1}),e(_,null,{default:t(()=>[e(p,{type:"primary",onClick:C,loading:v.value},{default:t(()=>[...f[3]||(f[3]=[s(" ä¿åé
ç½® ",-1)])]),_:1},8,["loading"]),e(p,{onClick:y},{default:t(()=>[...f[4]||(f[4]=[s("å·æ°",-1)])]),_:1})]),_:1})]),_:1},8,["model"]),w.measurement_id?(n(),k("div",wi,[f[7]||(f[7]=l("h4",null,"å½åé
ç½®:",-1)),l("p",null,[f[5]||(f[5]=l("strong",null,"Measurement ID:",-1)),s(" "+S(w.measurement_id),1)]),l("p",null,[f[6]||(f[6]=l("strong",null,"æ´æ°æ¶é´:",-1)),s(" "+S(h(w.updated_at)),1)])])):te("",!0)]),_:1})}}}),hi=Ce(ki,[["__scopeId","data-v-ba72ae67"]]),$i={class:"card-header"},Vi={key:0,class:"no-data"},Ci=ge({__name:"AdvertisementManagement",setup(q){const c=d([]),w=d(!1),v=d(!1),y=d(null),C=d({title:"",content:"",image_url:"",link_url:"",position:"top",is_active:!0});be(()=>{h()});const h=async()=>{w.value=!0;try{const r=await A.get("/api/admin/advertisements");c.value=r.data}catch(r){console.error("å 载广å失败:",r),b.error("å 载广å失败")}finally{w.value=!1}},u=r=>de(r).format("YYYY-MM-DD HH:mm"),f=r=>{y.value=r,C.value={title:r.title,content:r.content,image_url:r.image_url||"",link_url:r.link_url||"",position:r.position||"top",is_active:r.is_active},v.value=!0},m=async r=>{try{await et.confirm("ç¡®å®è¦å é¤è¿ä¸ªå¹¿ååï¼","确认å é¤",{confirmButtonText:"ç¡®å®",cancelButtonText:"åæ¶",type:"warning"}),await A.delete(`/api/admin/advertisements/${r}`),b.success("广åå 餿å"),h()}catch(o){o!=="cancel"&&(console.error("å é¤å¹¿å失败:",o),b.error("å é¤å¹¿å失败"))}},_=async()=>{try{const r={title:C.value.title,content:C.value.content,image_url:C.value.image_url||void 0,link_url:C.value.link_url||void 0,position:C.value.position,is_active:C.value.is_active};y.value?(await A.put(`/api/admin/advertisements/${y.value.id}`,r),b.success("å¹¿åæ´æ°æå")):(await A.post("/api/admin/advertisements",r),b.success("广åå建æå")),v.value=!1,y.value=null,p(),h()}catch(r){console.error("ä¿å广å失败:",r),b.error("ä¿å广å失败")}},p=()=>{C.value={title:"",content:"",image_url:"",link_url:"",position:"top",is_active:!0}};return(r,o)=>{const g=a("el-button"),V=a("el-table-column"),z=a("el-tag"),M=a("el-table"),L=a("el-card"),I=a("el-input"),O=a("el-form-item"),j=a("el-option"),R=a("el-select"),K=a("el-switch"),H=a("el-form"),x=a("el-dialog"),B=Ee("loading");return n(),k(ue,null,[e(L,null,{header:t(()=>[l("div",$i,[o[10]||(o[10]=l("span",null,"广å管ç",-1)),e(g,{type:"primary",onClick:o[0]||(o[0]=D=>v.value=!0)},{default:t(()=>[...o[9]||(o[9]=[s("å建广å",-1)])]),_:1})])]),default:t(()=>[Me((n(),N(M,{data:c.value,style:{width:"100%"}},{default:t(()=>[e(V,{prop:"title",label:"æ é¢",width:"150"}),e(V,{prop:"position",label:"ä½ç½®",width:"100"},{default:t(D=>[e(z,{type:D.row.position==="top"?"primary":"success"},{default:t(()=>[s(S(D.row.position),1)]),_:2},1032,["type"])]),_:1}),e(V,{label:"ç¶æ",width:"80"},{default:t(D=>[e(z,{type:D.row.is_active?"success":"danger"},{default:t(()=>[s(S(D.row.is_active?"å¯ç¨":"ç¦ç¨"),1)]),_:2},1032,["type"])]),_:1}),e(V,{prop:"created_at",label:"å建æ¶é´",width:"160"},{default:t(D=>[s(S(u(D.row.created_at)),1)]),_:1}),e(V,{label:"æä½",fixed:"right",width:"150"},{default:t(D=>[e(g,{size:"small",onClick:U=>f(D.row)},{default:t(()=>[...o[11]||(o[11]=[s("ç¼è¾",-1)])]),_:1},8,["onClick"]),e(g,{size:"small",type:"danger",onClick:U=>m(D.row.id)},{default:t(()=>[...o[12]||(o[12]=[s("å é¤",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[B,w.value]]),!w.value&&c.value.length===0?(n(),k("div",Vi," ææ å¹¿åæ°æ® ")):te("",!0)]),_:1}
129),e(x,{title:y.value?"ç¼è¾å¹¿å":"å建广å",modelValue:v.value,"onUpdate:modelValue":o[8]||(o[8]=D=>v.value=D),width:"500px"},{footer:t(()=>[e(g,{onClick:o[7]||(o[7]=D=>v.value=!1)},{default:t(()=>[...o[13]||(o[13]=[s("åæ¶",-1)])]),_:1}),e(g,{type:"primary",onClick:_},{default:t(()=>[...o[14]||(o[14]=[s("ä¿å",-1)])]),_:1})]),default:t(()=>[e(H,{model:C.value,"label-width":"80px"},{default:t(()=>[e(O,{label:"æ é¢",required:""},{default:t(()=>[e(I,{modelValue:C.value.title,"onUpdate:modelValue":o[1]||(o[1]=D=>C.value.title=D)},null,8,["modelValue"])]),_:1}),e(O,{label:"å
容"},{default:t(()=>[e(I,{modelValue:C.value.content,"onUpdate:modelValue":o[2]||(o[2]=D=>C.value.content=D),type:"textarea",rows:3,placeholder:"æ¯æHTMLæ ¼å¼"},null,8,["modelValue"])]),_:1}),e(O,{label:"å¾çURL"},{default:t(()=>[e(I,{modelValue:C.value.image_url,"onUpdate:modelValue":o[3]||(o[3]=D=>C.value.image_url=D),placeholder:"http://example.com/image.jpg"},null,8,["modelValue"])]),_:1}),e(O,{label:"龿¥URL"},{default:t(()=>[e(I,{modelValue:C.value.link_url,"onUpdate:modelValue":o[4]||(o[4]=D=>C.value.link_url=D),placeholder:"http://example.com"},null,8,["modelValue"])]),_:1}),e(O,{label:"æ¾ç¤ºä½ç½®"},{default:t(()=>[e(R,{modelValue:C.value.position,"onUpdate:modelValue":o[5]||(o[5]=D=>C.value.position=D),placeholder:"éæ©æ¾ç¤ºä½ç½®"},{default:t(()=>[e(j,{label:"é¡¶é¨",value:"top"}),e(j,{label:"ä¾§è¾¹æ ",value:"sidebar"})]),_:1},8,["modelValue"])]),_:1}),e(O,{label:"æ¯å¦å¯ç¨"},{default:t(()=>[e(K,{modelValue:C.value.is_active,"onUpdate:modelValue":o[6]||(o[6]=D=>C.value.is_active=D)},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["title","modelValue"])],64)}}}),xi=Ce(Ci,[["__scopeId","data-v-e60fa6a3"]]),Di={class:"admin-advertisements"},Si=ge({__name:"AdminAdvertisements",setup(q){const c=Ie();function w(){c.push("/admin")}return(v,y)=>{const C=a("el-page-header");return n(),k("div",Di,[e(C,{onBack:w,title:"è¿å",content:"广å管ç",style:{"margin-bottom":"20px"}}),e(xi)])}}}),Mi=Ce(Si,[["__scopeId","data-v-93ecb435"]]),Ui={class:"card-header"},Ii={key:0,class:"no-data"},Ti=ge({__name:"MetaTagManagement",setup(q){const c=d([]),w=d(!1),v=d(!1),y=d(null),C=d(),h=Ae({name:"",content:"",is_active:!0});be(()=>{u()});const u=async()=>{w.value=!0;try{const o=await A.get("/api/admin/meta-tags");c.value=o.data}catch(o){console.error("å è½½Metaæ ç¾å¤±è´¥:",o),b.error("å è½½Metaæ ç¾å¤±è´¥")}finally{w.value=!1}},f=o=>de(o).format("YYYY-MM-DD HH:mm"),m=o=>{y.value=o,h.name=o.name,h.content=o.content,h.is_active=o.is_active,v.value=!0},_=async o=>{try{await et.confirm("ç¡®å®è¦å é¤è¿ä¸ªMetaæ ç¾åï¼","确认å é¤",{confirmButtonText:"ç¡®å®",cancelButtonText:"åæ¶",type:"warning"}),await A.delete(`/api/admin/meta-tags/${o}`),b.success("Metaæ ç¾å 餿å"),u()}catch(g){g!=="cancel"&&(console.error("å é¤Metaæ ç¾å¤±è´¥:",g),b.error("å é¤Metaæ ç¾å¤±è´¥"))}},p=async()=>{try{const o={name:h.name,content:h.content,is_active:h.is_active};y.value?(await A.put(`/api/admin/meta-tags/${y.value.id}`,o),b.success("Metaæ ç¾æ´æ°æå")):(await A.post("/api/admin/meta-tags",o),b.success("Metaæ ç¾å建æå")),v.value=!1,y.value=null,r(),u()}catch(o){console.error("ä¿åMetaæ ç¾å¤±è´¥:",o),o.response&&o.response.data&&o.response.data.error?b.error(o.response.data.error):b.error("ä¿åMetaæ ç¾å¤±è´¥")}},r=()=>{h.name="",h.content="",h.is_active=!0};return(o,g)=>{const V=a("el-button"),z=a("el-table-column"),M=a("el-tag"),L=a("el-table"),I=a("el-card"),O=a("el-input"),j=a("el-form-item"),R=a("el-switch"),K=a("el-form"),H=a("el-dialog"),x=Ee("loading");return n(),k(ue,null,[e(I,null,{header:t(()=>[l("div",Ui,[g[7]||(g[7]=l("span",null,"Metaæ ç¾ç®¡ç",-1)),e(V,{type:"primary",onClick:g[0]||(g[0]=B=>v.value=!0)},{default:t(()=>[...g[6]||(g[6]=[s("æ·»å Metaæ ç¾",-1)])]),_:1})])]),default:t(()=>[Me((n(),N(L,{data:c.value,style:{width:"100%"}},{default:t(()=>[e(z,{prop:"name",label:"Name",width:"200"}),e(z,{prop:"content",label:"Content"}),e(z,{label:"ç¶æ",width:"80"},{default:t(B=>[e(M,{type:B.row.is_active?"success":"danger"},{default:t(()=>[s(S(B.row.is_active?"å¯ç¨":"ç¦ç¨"),1)]),_:2},1032,["type"])]),_:1}),e(z,{prop:"created_at",label:"å建æ¶é´",width:"160"},{default:t(B=>[s(S(f(B.row.created_at)),1)]),_:1}),e(z,{label:"æä½",fixed:"right",width:"150"},{default:t(B=>[e(V,{size:"small",onClick:D=>m(B.row)},{default:t(()=>[...g[8]||(g[8]=[s("ç¼è¾",-1)])]),_:1},8,["onClick"]),e(V,{size:"small",type:"danger",onClick:D=>_(B.row.id)},{default:t(()=>[...g[9]||(g[9]=[s("å é¤",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[x,w.value]]),!w.value&&c.value.length===0?(n(),k("div",Ii," ææ Metaæ ç¾æ°æ® ")):te("",!0)]),_:1}),e(H,{title:y.value?"ç¼è¾Metaæ ç¾":"æ·»å Metaæ ç¾",modelValue:v.value,"onUpdate:modelValue":g[5]||
129(g[5]=B=>v.value=B),width:"500px"},{footer:t(()=>[e(V,{onClick:g[4]||(g[4]=B=>v.value=!1)},{default:t(()=>[...g[10]||(g[10]=[s("åæ¶",-1)])]),_:1}),e(V,{type:"primary",onClick:p},{default:t(()=>[...g[11]||(g[11]=[s("ä¿å",-1)])]),_:1})]),default:t(()=>[e(K,{model:h,"label-width":"80px",ref_key:"metaTagFormRef",ref:C},{default:t(()=>[e(j,{label:"Name",required:"",prop:"name"},{default:t(()=>[e(O,{modelValue:h.name,"onUpdate:modelValue":g[1]||(g[1]=B=>h.name=B),placeholder:"ä¾å¦: google-adsense-account"},null,8,["modelValue"])]),_:1}),e(j,{label:"Content",required:"",prop:"content"},{default:t(()=>[e(O,{modelValue:h.content,"onUpdate:modelValue":g[2]||(g[2]=B=>h.content=B),type:"textarea",rows:3,placeholder:"ä¾å¦: ca-pub-8048695856173575"},null,8,["modelValue"])]),_:1}),e(j,{label:"æ¯å¦å¯ç¨"},{default:t(()=>[e(R,{modelValue:h.is_active,"onUpdate:modelValue":g[3]||(g[3]=B=>h.is_active=B)},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["title","modelValue"])],64)}}}),Ai=Ce(Ti,[["__scopeId","data-v-6441185a"]]),zi={class:"admin-meta-tags"},Li=ge({__name:"AdminMetaTags",setup(q){const c=Ie();function w(){c.push("/admin")}return(v,y)=>{const C=a("el-page-header");return n(),k("div",zi,[e(C,{onBack:w,title:"è¿å",content:"Metaæ ç¾ç®¡ç",style:{"margin-bottom":"20px"}}),e(Ai)])}}}),Yi=Ce(Li,[["__scopeId","data-v-18058d60"]]),Ei={class:"resource-info"},Ri={key:0},Fi={class:"disk-usage-container"},Bi={class:"disk-usage-text"},Pi={key:0},Hi={class:"db-file-info"},Oi={class:"download-info"},qi={class:"db-backup-info"},Ni={class:"backup-list"},ji={class:"scheduled-backup-info"},Wi={class:"db-restore-info"},Ki={class:"restore-info"},Gi={class:"email-config-info"},Ji={key:0,class:"certificate-info"},Xi={class:"certificate-paths"},Qi={class:"certificate-upload"},Zi={class:"upload-info"},eu=ge({__name:"AdminSystemMaintenance",setup(q){const c=d(""),w=d(""),v=d(""),y=d(!1),C=d(!1),h=d(!1),u=d(!1),f=d(!1),m=d(!1),_=d({}),p=d([]),r=d(""),o=d({memory:{alloc_mb:0,total_alloc_mb:0,sys_mb:0,num_gc:0},disk:{total_mb:0,used_mb:0,free_mb:0},goroutines:0}),g=d({enabled:!1,interval:24,last_run:""}),V=d({enabled:!1,smtp_host:"",smtp_port:465,username:"",password:"",from_email:"",to_email:""});be(async()=>{try{const W=sessionStorage.getItem("token");W&&(_.value={Authorization:`Bearer ${W}`});const Z=await A.get("/api/admin/system/info");c.value=Z.data.db_type,w.value=Z.data.cert_file,v.value=Z.data.key_file,c.value==="sqlite"&&(j(),H(),B()),z(),M()}catch(W){console.error("Failed to fetch system info:",W),c.value="sqlite"}});async function z(){try{const Z=(await A.get("/api/admin/system/uptime")).data.uptime,Ve=Math.floor(Z/86400),xe=Math.floor(Z%86400/3600),ae=Math.floor(Z%3600/60),ee=Math.floor(Z%60);r.value=`${Ve}天 ${xe}å°æ¶ ${ae}åé ${ee}ç§`}catch(W){console.error("Failed to fetch system uptime:",W),r.value="æ æ³è·å"}}async function M(){try{const W=await A.get("/api/admin/system/resources");o.value=W.data}catch(W){console.error("Failed to fetch system resources:",W)}}async function L(W,Z){try{const Ve=await A.get(W,{responseType:"blob"}),xe=window.URL.createObjectURL(new Blob([Ve.data])),ae=document.createElement("a");ae.href=xe,ae.setAttribute("download",Z),document.body.appendChild(ae),ae.click(),window.URL.revokeObjectURL(xe),document.body.removeChild(ae),b.success("æä»¶ä¸è½½æå")}catch(Ve){console.error("Download failed:",Ve),b.error("æä»¶ä¸è½½å¤±è´¥")}}async function I(){if(c.value!=="sqlite"){b.warning("åªæ SQLite æ°æ®åºæ¯æä¸è½½");return}try{y.value=!0,await L("/api/admin/database","open_course.db")}catch(W){console.error("Download failed:",W),b.error("æ°æ®åºæä»¶ä¸è½½å¤±è´¥")}finally{y.value=!1}}async function O(){if(c.value!=="sqlite"){b.warning("åªæ SQLite æ°æ®åºæ¯æå¤ä»½");return}try{C.value=!0;const W=await A.post("/api/admin/database/backup");b.success("æ°æ®åºå¤ä»½å建æå: "+W.data.filename),j()}catch(W){console.error("Backup failed:",W),b.error("æ°æ®åºå¤ä»½å建失败")}finally{C.value=!1}}async function j(){if(c.value==="sqlite")try{h.value=!0;const W=await A.get("/api/admin/database/backups");p.value=W.data}catch(W){console.error("Failed to load backups:",W),b.error("å è½½å¤ä»½å表失败")}finally{h.value=!1}}function R(W){if(c.value!=="sqlite"){b.warning("åªæ SQLite æ°æ®åºæ¯ææ¤æä½");return}L(`/api/admin/database/backup/${W}`,W)}async function K(W){if(c.value!=="sqlite"){b.warning("åªæ SQLite æ°æ®åºæ¯ææ¤æä½");return}try{await A.delete(`/api/admin/database/backup/${W}`),b.success("å¤ä»½æä»¶å 餿å"),j()}catch(Z){console.error("Delete failed:",Z),b.error("å¤ä»½æä»¶å é¤å¤±è´¥")}}async function H(){try{const W=await A.get("/api/admin/backup-schedule");g.value=W.data}catch(W){console.error("Failed to load backup schedule:",W)}}async function x(){try{u.value=!0;const W=await A.post("/api/admin/backup-schedule",g.value);g.value=W.data,b.success("宿¶å¤ä»½è®¾ç½®ä¿åæå")}catch(W){console.error("Failed to save backup schedule:",W),b.error("宿¶å¤ä»½è®¾ç½®ä¿å失败")}finally{u.value=!1}}async function B(){try{const W=await A.get("/api/admin/email-config");V.value=W.data}catch(W){console.error("Failed to load email config:",W)}}async function D(){try{f.value=!0;const W=await A.post("/api/admin/email-config",V.value);V.value=W.data,b.success("é®ä»¶æå¡å¨è®¾ç½®ä¿åæå")}catch(W){console.error("Failed to save email config:",W),b.error("é®ä»¶æå¡å¨è®¾ç½®ä¿å失败")}finally{f.value=!1}}async function U(){var W,Z;try{m.value=!0,await A.post("/api/admin/test-email"),b.success("æµè¯é®ä»¶åéæå")}catch(Ve){console.error("Failed to send test email:",Ve),b.error("æµè¯é®ä»¶åé失败: "+(((Z=(W=Ve.response)==null?void 0:W.data)==null?void 0:Z.error)||"æªç¥é误"))}finally{m.value=!1}}function F(W){const Z=W.name.endsWith(".db");return Z||b.error("å¤ä»½æä»¶å¿
é¡»æ¯.dbæ ¼å¼!"),Z}function i(W){b.success("æ°æ®åºæ¢å¤æåï¼è¯·é坿å¡")}function $(W){b.error("æ°æ®åºæ¢å¤å¤±è´¥: "+(W.message||"æªç¥é误"))}function X(W){const Z=W.type==="application/x-x509-ca-cert"||W.name.endsWith(".crt")||W.name.endsWith(".pem")||W.name.endsWith(".cert")||W.type==="";return Z||b.error("è¯ä¹¦æä»¶å¿
é¡»æ¯.crtã.pemæ.certæ ¼å¼!"),Z}function G(W){const Z=W.name.endsWith(".key")||W.name.endsWith(".pem")||W.type==="";return Z||b.error("ç§é¥æä»¶å¿
é¡»æ¯.keyæ.pemæ ¼å¼!"),Z}function E(W){b.success("è¯ä¹¦æä»¶ä¸ä¼ æå"),me()}function oe(W){b.success("ç§é¥æä»¶ä¸ä¼ æå"),me()}function Q(W){b.error("è¯ä¹¦æä»¶ä¸ä¼ 失败: "+(W.message||"æªç¥é误"))}function re(W){b.error("ç§é¥æä»¶ä¸ä¼ 失败: "+(W.message||"æªç¥é误"))}async function me(){try{const W=await A.get("/api/admin/system/info");w.value=W.data.cert_file,v.value=W.data.key_file}catch(W){console.error("Failed to fetch system info:",W)}}
129function ie(W,Z,Ve){if(Ve===0)return"0 Bytes";const xe=1024,ae=["Bytes","KB","MB","GB"],ee=Math.floor(Math.log(Ve)/Math.log(xe));return parseFloat((Ve/Math.pow(xe,ee)).toFixed(2))+" "+ae[ee]}function ce(W,Z,Ve){return new Date(Ve).toLocaleString()}function ke(){return o.value.disk.total_mb?o.value.disk.used_mb/o.value.disk.total_mb*100:0}function De(){const W=ke();return W<70?"success":W<90?"warning":"exception"}function ve(W){return`${W.toFixed(2)}%`}return(W,Z)=>{const Ve=a("el-tag"),xe=a("el-descriptions-item"),ae=a("el-progress"),ee=a("el-descriptions"),Y=a("el-button"),P=a("el-text"),ne=a("el-table-column"),we=a("el-table"),_e=a("el-switch"),Se=a("el-form-item"),We=a("el-input-number"),tt=a("el-form"),Xe=a("el-upload"),Ge=a("el-input"),qe=a("el-col"),lt=a("el-row"),ye=a("el-card"),Fe=Ee("loading");return n(),N(ye,{class:"system-info-card"},{header:t(()=>[...Z[9]||(Z[9]=[l("div",{class:"card-header"},[l("span",null,"ç³»ç»ç»´æ¤")],-1)])]),default:t(()=>[e(ee,{column:1,border:""},{default:t(()=>[e(xe,{label:"ç³»ç»è¿è¡æ¶é¿"},{default:t(()=>[e(Ve,{type:"primary"},{default:t(()=>[s(S(r.value),1)]),_:1})]),_:1}),e(xe,{label:"æ°æ®åºç±»å"},{default:t(()=>[e(Ve,{type:c.value==="sqlite"?"success":"primary"},{default:t(()=>[s(S(c.value),1)]),_:1},8,["type"])]),_:1}),e(xe,{label:"ç³»ç»èµæºä½¿ç¨æ
åµ"},{default:t(()=>[l("div",Ei,[e(ee,{column:1,size:"small"},{default:t(()=>[e(xe,{label:"å
å使ç¨"},{default:t(()=>[e(Ve,{type:"primary"},{default:t(()=>{var le;return[s(S((le=o.value.memory)==null?void 0:le.sys_mb)+" MB",1)]}),_:1})]),_:1}),e(xe,{label:"GC次æ°"},{default:t(()=>[e(Ve,{type:"primary"},{default:t(()=>{var le;return[s(S((le=o.value.memory)==null?void 0:le.num_gc),1)]}),_:1})]),_:1}),e(xe,{label:"åç¨æ°é"},{default:t(()=>[e(Ve,{type:"primary"},{default:t(()=>[s(S(o.value.goroutines),1)]),_:1})]),_:1}),o.value.disk.total_mb?(n(),k("div",Ri,[e(xe,{label:"ç£çä½¿ç¨æ
åµ"},{default:t(()=>[l("div",Fi,[e(ae,{percentage:ke(),status:De(),"stroke-width":18,format:ve},null,8,["percentage","status"]),l("div",Bi,[l("span",null,"已使ç¨: "+S(o.value.disk.used_mb)+" MB",1),l("span",null,"å©ä½: "+S(o.value.disk.free_mb)+" MB",1)])])]),_:1})])):te("",!0)]),_:1})])]),_:1}),c.value==="sqlite"?(n(),k("div",Pi,[e(xe,{label:"æ°æ®åºæä»¶"},{default:t(()=>[l("div",Hi,[e(Y,{type:"primary",onClick:I,loading:y.value,icon:"Download"},{default:t(()=>[...Z[10]||(Z[10]=[s(" ä¸è½½æ°æ®åºæä»¶ ",-1)])]),_:1},8,["loading"]),l("div",Oi,[e(P,{type:"info"},{default:t(()=>[...Z[11]||(Z[11]=[s("ç¹å»æé®ä¸è½½å½å SQLite æ°æ®åºæä»¶",-1)])]),_:1})])])]),_:1}),e(xe,{label:"æ°æ®åºå¤ä»½"},{default:t(()=>[l("div",qi,[e(Y,{type:"primary",onClick:O,loading:C.value,icon:"Upload"},{default:t(()=>[...Z[12]||(Z[12]=[s(" å建å¤ä»½ ",-1)])]),_:1},8,["loading"]),l("div",Ni,[Z[16]||(Z[16]=l("h4",null,"ç°æå¤ä»½æä»¶:",-1)),e(P,{type:"info",size:"small"},{default:t(()=>[...Z[13]||(Z[13]=[s("ä»
æ¾ç¤ºæè¿ 10 æ¡å¤ä»½è®°å½",-1)])]),_:1}),Me((n(),N(we,{data:p.value,style:{width:"100%","margin-top":"10px"}},{default:t(()=>[e(ne,{prop:"name",label:"æä»¶å"}),e(ne,{prop:"size",label:"大å°",formatter:ie}),e(ne,{prop:"modified",label:"ä¿®æ¹æ¶é´",formatter:ce}),e(ne,{label:"æä½"},{default:t(le=>[e(Y,{size:"small",onClick:T=>R(le.row.name)},{default:t(()=>[...Z[14]||(Z[14]=[s("ä¸è½½",-1)])]),_:1},8,["onClick"]),e(Y,{size:"small",type:"danger",onClick:T=>K(le.row.name)},{default:t(()=>[...Z[15]||(Z[15]=[s("å é¤",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[Fe,h.value]])])])]),_:1}),e(xe,{label:"宿¶å¤ä»½è®¾ç½®"},{default:t(()=>[l("div",ji,[e(tt,{model:g.value,"label-width":"120px"},{default:t(()=>[e(Se,{label:"å¯ç¨å®æ¶å¤ä»½"},{default:t(()=>[e(_e,{modelValue:g.value.enabled,"onUpdate:modelValue":Z[0]||(Z[0]=le=>g.value.enabled=le)},null,8,["modelValue"])]),_:1}),e(Se,{label:"å¤ä»½é´é"},{default:t(()=>[e(We,{modelValue:g.value.interval,"onUpdate:modelValue":Z[1]||(Z[1]=le=>g.value.interval=le),min:1,max:168,disabled:!g.value.enabled},null,8,["modelValue","disabled"]),Z[17]||(Z[17]=l("span",{class:"unit"},"å°æ¶",-1))]),_:1}),g.value.last_run?(n(),N(Se,{key:0,label:"䏿¬¡å¤ä»½æ¶é´"},{default:t(()=>[l("span",null,S(ce(null,null,g.value.last_run)),1)]),_:1})):te("",!0),e(Se,null,{default:t(()=>[e(Y,{type:"primary",onClick:x,loading:u.value},{default:t(()=>[...Z[18]||(Z[18]=[s(" ä¿å设置 ",-1)])]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"])])]),_:1}),e(xe,{label:"æ°æ®åºæ¢å¤"},{default:t(()=>[l("div",Wi,[e(Xe,{class:"backup-uploader",action:"/api/admin/database/restore",headers:_.value,"show-file-list":!1,"before-upload":F,"on-success":i,"on-error":$,name:"backup"},{default:t(()=>[e(Y,{type:"warning"},{default:t(()=>[...Z[19]||(Z[19]=[s("ä¸ä¼ å¤ä»½æä»¶å¹¶æ¢å¤",-1)])]),_:1})]),_:1},8,["headers"]),l("div",Ki,[e(P,{type:"info"},{default:t(()=>
129[...Z[20]||(Z[20]=[s("ä¸ä¼ SQLiteå¤ä»½æä»¶ä»¥æ¢å¤æ°æ®åºï¼æ¢å¤åéè¦é坿å¡",-1)])]),_:1})])])]),_:1})])):te("",!0),e(xe,{label:"é®ä»¶æå¡å¨è®¾ç½®"},{default:t(()=>[l("div",Gi,[e(tt,{model:V.value,"label-width":"120px"},{default:t(()=>[e(Se,{label:"å¯ç¨é®ä»¶éç¥"},{default:t(()=>[e(_e,{modelValue:V.value.enabled,"onUpdate:modelValue":Z[2]||(Z[2]=le=>V.value.enabled=le)},null,8,["modelValue"])]),_:1}),e(lt,{gutter:20},{default:t(()=>[e(qe,{span:12},{default:t(()=>[e(Se,{label:"SMTPæå¡å¨"},{default:t(()=>[e(Ge,{modelValue:V.value.smtp_host,"onUpdate:modelValue":Z[3]||(Z[3]=le=>V.value.smtp_host=le),placeholder:"smtp.example.com",disabled:!V.value.enabled},null,8,["modelValue","disabled"])]),_:1})]),_:1}),e(qe,{span:12},{default:t(()=>[e(Se,{label:"SMTP端å£"},{default:t(()=>[e(We,{modelValue:V.value.smtp_port,"onUpdate:modelValue":Z[4]||(Z[4]=le=>V.value.smtp_port=le),min:1,max:65535,disabled:!V.value.enabled},null,8,["modelValue","disabled"])]),_:1})]),_:1})]),_:1}),e(Se,{label:"ç¨æ·å"},{default:t(()=>[e(Ge,{modelValue:V.value.username,"onUpdate:modelValue":Z[5]||(Z[5]=le=>V.value.username=le),placeholder:"[email protected]",disabled:!V.value.enabled},null,8,["modelValue","disabled"])]),_:1}),e(Se,{label:"å¯ç "},{default:t(()=>[e(Ge,{modelValue:V.value.password,"onUpdate:modelValue":Z[6]||(Z[6]=le=>V.value.password=le),type:"password",placeholder:"SMTPå¯ç ",disabled:!V.value.enabled,"show-password":""},null,8,["modelValue","disabled"])]),_:1}),e(Se,{label:"å件人é®ç®±"},{default:t(()=>[e(Ge,{modelValue:V.value.from_email,"onUpdate:modelValue":Z[7]||(Z[7]=le=>V.value.from_email=le),placeholder:"[email protected]",disabled:!V.value.enabled},null,8,["modelValue","disabled"])]),_:1}),e(Se,{label:"æ¶ä»¶äººé®ç®±"},{default:t(()=>[e(Ge,{modelValue:V.value.to_email,"onUpdate:modelValue":Z[8]||(Z[8]=le=>V.value.to_email=le),placeholder:"[email protected]",disabled:!V.value.enabled},null,8,["modelValue","disabled"])]),_:1}),e(Se,null,{default:t(()=>[e(Y,{type:"primary",onClick:D,loading:f.value},{default:t(()=>[...Z[21]||(Z[21]=[s(" ä¿å设置 ",-1)])]),_:1},8,["loading"]),e(Y,{onClick:U,disabled:!V.value.enabled,loading:m.value,style:{"margin-left":"10px"}},{default:t(()=>[...Z[22]||(Z[22]=[s(" åéæµè¯é®ä»¶ ",-1)])]),_:1},8,["disabled","loading"])]),_:1})]),_:1},8,["model"])])]),_:1}),e(xe,{label:"SSLè¯ä¹¦è®¾ç½®"},{default:t(()=>[w.value||v.value?(n(),k("div",Ji,[l("div",Xi,[l("p",null,[Z[23]||(Z[23]=l("strong",null,"è¯ä¹¦æä»¶:",-1)),s(" "+S(w.value||"æªè®¾ç½®"),1)]),l("p",null,[Z[24]||(Z[24]=l("strong",null,"ç§é¥æä»¶:",-1)),s(" "+S(v.value||"æªè®¾ç½®"),1)])])])):te("",!0),l("div",Qi,[e(Xe,{class:"certificate-uploader",action:"/api/admin/system/certificate",headers:_.value,"show-file-list":!1,"before-upload":X,"on-success":E,"on-error":Q,data:{type:"certificate"},name:"certificate"},{default:t(()=>[e(Y,{type:"primary"},{default:t(()=>[...Z[25]||(Z[25]=[s("ä¸ä¼ è¯ä¹¦æä»¶",-1)])]),_:1})]),_:1},8,["headers"]),e(Xe,{class:"key-uploader",action:"/api/admin/system/certificate",headers:_.value,"show-file-list":!1,"before-upload":G,"on-success":oe,"on-error":re,data:{type:"key"},name:"key"},{default:t(()=>[e(Y,{type:"primary"},{default:t(()=>[...Z[26]||(Z[26]=[s("ä¸ä¼ ç§é¥æä»¶",-1)])]),_:1})]),_:1},8,["headers"]),l("div",Zi,[e(P,{type:"info"},{default:t(()=>[...Z[27]||(Z[27]=[s("ä¸ä¼ SSLè¯ä¹¦åç§é¥ä»¥å¯ç¨HTTPSæ¯æ",-1)])]),_:1})])])]),_:1})]),_:1})]),_:1})}}}),tu=Ce(eu,[["__scopeId","data-v-2d94ea4c"]]),lu={key:0,class:"total-count"},au={class:"import-section"},ou={class:"import-actions"},nu={key:0,class:"import-result"},su=ge({__name:"VocabularyImport",setup(q){const c=d(null),w=d(!1),v=d(null),y=d(null),C=m=>{c.value=m.raw,v.value=null},h=async()=>{try{const m=await A.get("/api/vocabulary/total-count");y.value=m.data.total}catch(m){console.error("Failed to load vocabulary count:",m),y.value=null}},u=async()=>{var m,_;if(!c.value){b.warning("è¯·éæ©è¦å¯¼å
¥çæä»¶");return}w.value=!0,v.value=null;try{const p=await f(c.value),r=JSON.parse(p);await A.post("/api/vocabulary/import",r),v.value={success:!0,message:"è¯æ±å¯¼å
¥æå"},b.success("è¯æ±å¯¼å
¥æå"),await h()}catch(p){console.error("Import error:",p);let r="è¯æ±å¯¼å
¥å¤±è´¥";(_=(m=p.response)==null?void 0:m.data)!=null&&_.error?r=p.response.data.error:p.message&&(r=p.message),v.value={success:!1,message:r},b.error(r)}finally{w.value=!1}},f=m=>new Promise((_,p)=>{const r=new FileReader;r.onload=()=>_(r.result),r.onerror=p,r.readAsText(m)});return be(()=>{h()}),(m,_)=>{const p=a("el-icon"),r=a("el-upload"),o=a("el-button"),g=a("el-alert");return n(),k(ue,null,[y.value!==null?(n(),k("div",lu," å½åæ»è¯æ±é: "+S(y.value),1)):te("",!0),l("div",au,[e(r,{class:"upload-demo",drag:"","auto-upload":!1,"on-change":C,"show-file-list":!0,accept:".json"},{tip:t(()=>[..._[0]||(_[0]=[l("div",{class:"el-upload__tip"}," ä»
æ¯æ JSON æ ¼å¼æä»¶ ",-1)])]),default:t(()=>[e(p,{class:"el-icon--upload"},{default:t(()=>[e(se(Tt))]),_:1}),_[1]||(_[1]=l("div",{class:"el-upload__text"},[s(" ææ½æä»¶å°æ¤å¤æ "),l("em",null,"ç¹å»ä¸ä¼ ")],-1))]),_:1}),l("div",ou,[e(o,{type:"primary",onClick:u,disabled:!c.value||w.value,loading:w.value},{default:t(()=>[s(S(w.value?"导å
¥ä¸...":"导å
¥è¯æ±"),1)]),_:1},8,["disabled","loading"])]),v.value?(n(),k("div",nu,[e(g,{type:v.value.success?"success":"error",title:v.value.message,"show-icon":""},null,8,["type","title"])])):te("",!0)])],64)}}}),ru=Ce(su,[["__scopeId","data-v-dce31f19"]]),iu={class:"vocabulary-management"},uu={class:"card-header"},du={key:1},cu={class:"definitions-input"},pu={class:"add-definition"},mu=ge({__name:"VocabularyManagement",setup(q){const c=d(),w=d([]),v=d([{prop:"word",label:"åè¯",searchable:!0},{prop:"grade",label:"年级",searchable:!0,width:120,kind:"slot",searchKind:"select",options:w.value},{prop:"unit",label:"åå
",width:120},{prop:"label",label:"æ ç¾",width:120,searchable:!0},{prop:"actions",label:"æä½",width:150,kind:"slot"}]),y=d(!1),C=d(!1),h=d(),u=d(""),f=d(!1),m=Ae({id:0,word:"",grade:"",unit:"",label:"",definitions:[]}
129),_={word:[{required:!0,message:"请è¾å
¥åè¯",trigger:"blur"}],grade:[{required:!0,message:"è¯·éæ©å¹´çº§",trigger:"change"}],definitions:[{required:!0,message:"请è³å°æ·»å ä¸ä¸ªå®ä¹",trigger:"blur"}]},p=()=>{u.value.trim()&&(m.definitions.push(u.value.trim()),u.value="")},r=L=>{m.definitions.splice(L,1)},o=()=>{m.id=0,m.word="",m.grade="",m.unit="",m.label="",m.definitions=[],u.value=""},g=L=>{C.value=!0,m.id=L.id,m.word=L.word,m.grade=L.grade,m.unit=L.unit,m.label=L.label,m.definitions=L.definitions?L.definitions.map(I=>I.text):[],y.value=!0},V=async L=>{try{await et.confirm(`ç¡®å®è¦å é¤åè¯ "${L.word}" åï¼`,"å é¤ç¡®è®¤",{confirmButtonText:"ç¡®å®",cancelButtonText:"åæ¶",type:"warning"}),await A.delete(`/api/vocabulary/${L.id}`),b.success("å 餿å"),c.value&&c.value.loadData()}catch(I){I!=="cancel"&&(b.error("å é¤å¤±è´¥"),console.error(I))}},z=async()=>{if(h.value)try{await h.value.validate(),C.value?(await A.put(`/api/vocabulary/${m.id}`,{word:m.word,grade:m.grade,unit:m.unit,label:m.label,definitions:m.definitions}),b.success("æ´æ°æå")):(await A.post("/api/vocabulary",{word:m.word,grade:m.grade,unit:m.unit,label:m.label,definitions:m.definitions}),b.success("æ·»å æå")),y.value=!1,o(),C.value=!1,c.value&&c.value.loadData()}catch(L){console.error(L),b.error("æä½å¤±è´¥")}},M=()=>{y.value=!1,o(),C.value=!1,h.value&&h.value.clearValidate()};return be(()=>{for(const L in Ke)w.value.push({label:Ke[L],value:L})}),(L,I)=>{const O=a("el-button"),j=a("el-space"),R=a("el-tag"),K=a("el-card"),H=a("el-input"),x=a("el-form-item"),B=a("el-option"),D=a("el-select"),U=a("el-form"),F=a("el-dialog");return n(),k("div",iu,[e(K,null,{header:t(()=>[l("div",uu,[I[11]||(I[11]=l("span",null,"è¯æ±ç®¡ç",-1)),e(j,null,{default:t(()=>[e(O,{class:"button",type:"primary",onClick:I[0]||(I[0]=i=>y.value=!0)},{default:t(()=>[...I[9]||(I[9]=[s(" æ·»å è¯æ± ",-1)])]),_:1}),e(O,{class:"button",type:"primary",onClick:I[1]||(I[1]=i=>f.value=!0)},{default:t(()=>[...I[10]||(I[10]=[s(" æ¹é导å
¥ ",-1)])]),_:1})]),_:1})])]),default:t(()=>[e(mt,{ref_key:"paginationTableRef",ref:c,dataURL:"/api/vocabulary",columns:v.value},{word:t(({row:i})=>[l("span",null,S(i.word),1)]),grade:t(({row:i})=>[e(R,{size:"small"},{default:t(()=>[s(S(se(Ke)[i.grade]||i.grade),1)]),_:2},1024)]),actions:t(({row:i})=>[e(O,{size:"small",onClick:$=>g(i)},{default:t(()=>[...I[12]||(I[12]=[s("ç¼è¾",-1)])]),_:1},8,["onClick"]),e(O,{size:"small",type:"danger",onClick:$=>V(i)},{default:t(()=>[...I[13]||(I[13]=[s("å é¤",-1)])]),_:1},8,["onClick"])]),_:1},8,["columns"])]),_:1}),e(F,{title:C.value?"ç¼è¾è¯æ±":"æ·»å è¯æ±",modelValue:y.value,"onUpdate:modelValue":I[7]||(I[7]=i=>y.value=i),width:"600px","before-close":M},{footer:t(()=>[e(O,{onClick:M},{default:t(()=>[...I[15]||(I[15]=[s("åæ¶",-1)])]),_:1}),e(O,{type:"primary",onClick:z},{default:t(()=>[...I[16]||(I[16]=[s("ç¡®å®",-1)])]),_:1})]),default:t(()=>[e(U,{model:m,rules:_,ref_key:"formRef",ref:h,"label-width":"100px"},{default:t(()=>[e(x,{label:"åè¯",prop:"word"},{default:t(()=>[C.value?(n(),k("span",du,S(m.word),1)):(n(),N(H,{key:0,modelValue:m.word,"onUpdate:modelValue":I[2]||(I[2]=i=>m.word=i),placeholder:"请è¾å
¥åè¯"},null,8,["modelValue"]))]),_:1}),e(x,{label:"年级",prop:"grade"},{default:t(()=>[e(D,{modelValue:m.grade,"onUpdate:modelValue":I[3]||(I[3]=i=>m.grade=i),placeholder:"è¯·éæ©å¹´çº§",style:{width:"100%"}},{default:t(()=>[(n(!0),k(ue,null,fe(w.value,i=>(n(),N(B,{key:i.value,label:i.label,value:i.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(x,{label:"åå
",prop:"unit"},{default:t(()=>[e(H,{modelValue:m.unit,"onUpdate:modelValue":I[4]||(I[4]=i=>m.unit=i),placeholder:"请è¾å
¥åå
ï¼å¯éï¼"},null,8,["modelValue"])]),_:1}),e(x,{label:"æ ç¾",prop:"label"},{default:t(()=>[e(H,{modelValue:m.label,"onUpdate:modelValue":I[5]||(I[5]=i=>m.label=i),placeholder:"请è¾å
¥æ ç¾ï¼å¯éï¼"},null,8,["modelValue"])]),_:1}),e(x,{label:"å®ä¹",prop:"definitions"},{default:t(()=>[l("div",cu,[(n(!0),k(ue,null,fe(m.definitions,(i,$)=>(n(),N(R,{key:$,closable:"",onClose:X=>r($),type:"info",style:{margin:"0 5px 5px 0"}},{default:t(()=>[s(S(i),1)]),_:2}
129,1032,["onClose"]))),128)),l("div",pu,[e(H,{modelValue:u.value,"onUpdate:modelValue":I[6]||(I[6]=i=>u.value=i),placeholder:"è¾å
¥å®ä¹å¹¶æå车添å ",onKeyup:Je(p,["enter"]),style:{flex:"1","margin-right":"10px"}},null,8,["modelValue"]),e(O,{onClick:p},{default:t(()=>[...I[14]||(I[14]=[s("æ·»å ",-1)])]),_:1})])])]),_:1})]),_:1},8,["model"])]),_:1},8,["title","modelValue"]),e(F,{title:"æ¹é导å
¥",modelValue:f.value,"onUpdate:modelValue":I[8]||(I[8]=i=>f.value=i),width:"600px"},{default:t(()=>[e(ru)]),_:1},8,["modelValue"])])}}}),vu=Ce(mu,[["__scopeId","data-v-e2dd7c2e"]]),fu={style:{color:"var(--el-text-color-secondary)","font-size":"12px","margin-left":"10px"}},_u={style:{display:"flex","justify-content":"space-between","align-items":"center"}},yu={style:{display:"flex",gap:"10px"}},gu={style:{display:"flex","justify-content":"space-between","align-items":"center"}},bu={class:"server-name"},wu={class:"server-description"},ku={class:"server-info"},hu={class:"server-actions"},$u={key:0},Vu={style:{"margin-top":"20px"}},Cu=ge({__name:"AdminMCPServers",setup(q){const c=d("my-servers"),w=d(!1),v=d(null),y=d(!1),C=d(!1),h=d(null),u=d(""),f=d({name:"",description:"",type:"custom",transport:"stdio",command:"",args:"",url:"",env_vars:"",is_enabled:!0}),m=d([]),_=d([]),p=d([{id:"filesystem",name:"Filesystem",description:"å®å
¨æä»¶æä½ï¼æ¯æå¯é
ç½®çè®¿é®æ§å¶",category:"File Systems",language:"TypeScript",official:!0,package:"@modelcontextprotocol/server-filesystem",installCommand:"npx -y @modelcontextprotocol/server-filesystem /path/to/allowed/files",transport:"stdio"},{id:"fetch",name:"Fetch",description:"ç½é¡µå
容è·åå转æ¢ï¼ä¼å LLM 使ç¨",category:"Developer Tools",language:"TypeScript",official:!0,package:"@modelcontextprotocol/server-fetch",installCommand:"npx -y @modelcontextprotocol/server-fetch",transport:"stdio"},{id:"github",name:"GitHub",description:"è®¿é® GitHub APIï¼å®ç°é¡¹ç®ç®¡ç",category:"Developer Tools",language:"TypeScript",official:!0,package:"@modelcontextprotocol/server-github",installCommand:"npx -y @modelcontextprotocol/server-github",transport:"stdio"},{id:"puppeteer",name:"Puppeteer",description:"æµè§å¨èªå¨ååç½é¡µæå",category:"Browser Automation",language:"TypeScript",official:!0,package:"@modelcontextprotocol/server-puppeteer",installCommand:"npx -y @modelcontextprotocol/server-puppeteer",transport:"stdio"},{id:"brave-search",name:"Brave Search",description:"ä½¿ç¨ Brave Search API è¿è¡ç½ç»æç´¢",category:"Research And Data",language:"TypeScript",official:!0,package:"@modelcontextprotocol/server-brave-search",installCommand:"npx -y @modelcontextprotocol/server-brave-search",transport:"stdio"},{id:"sqlite",name:"SQLite",description:"SQLite æ°æ®åºæä½",category:"Databases",language:"TypeScript",official:!0,package:"@modelcontextprotocol/server-sqlite",installCommand:"npx -y @modelcontextprotocol/server-sqlite --db-path /path/to/database.db",transport:"stdio"},{id:"redis",name:"Redis",description:"Redis æ°æ®åºè®¿é®ï¼æ¯æé®å¼å卿ä½",category:"Databases",language:"TypeScript",official:!0,package:"@modelcontextprotocol/server-redis",installCommand:"npx -y @modelcontextprotocol/server-redis",transport:"stdio"},{id:"time",name:"Time",description:"æ¶é´åæ¶åºè½¬æ¢åè½ï¼æ¯æ IANA æ¶åºåç§°",category:"Developer Tools",language:"TypeScript",official:!0,package:"@modelcontextprotocol/server-time",installCommand:"npx -y @modelcontextprotocol/server-time",transport:"stdio"},{id:"sequential-thinking",name:"Sequential Thinking",description:"éè¿ç»æåæç»´è¿ç¨å®ç°å¨æååææ§é®é¢è§£å³",category:"Knowledge And Memory",language:"TypeScript",official:!0,package:"@modelcontextprotocol/server-sequential-thinking",installCommand:"npx -y @modelcontextprotocol/server-sequential-thinking",transport:"stdio"},{id:"memory",name:"Memory",description:"å
åæ°æ®åå¨ï¼ç¨äºå¯¹è¯ä¸ä¸æç®¡ç",category:"Knowledge And Memory",language:"TypeScript",official:!0,package:"@modelcontextprotocol/server-memory",installCommand:"npx -y @modelcontextprotocol/server-memory",transport:"stdio"},{id:"sentry",name:"Sentry",description:"ä» Sentry.io æ£ç´¢ååæé误",category:"Monitoring",language:"TypeScript",official:!0,package:"@modelcontextprotocol/server-sentry",installCommand:"npx -y @modelcontextprotocol/server-sentry",transport:"stdio"},{id:"gitlab",name:"GitLab",description:"GitLab API éæï¼å®ç°é¡¹ç®ç®¡ç",category:"Developer Tools",language:"TypeScript",official:!0,package:"@modelcontextprotocol/server-gitlab",installCommand:"npx -y @modelcontextprotocol/server-gitlab",transport:"stdio"}]);async function r(){var F,i;try{const $=await A.get("/api/admin/mcp-servers");m.value=$.data}catch($){b.error("å è½½ MCP æå¡å¨å¤±è´¥: "+(((i=(F=$.response)==null?void 0:F.data)==null?void 0:i.error)||$.message))}}async function o(){var F,i;
129try{const $=await A.get("/api/admin/mcp-servers/presets");_.value=$.data}catch($){b.error("å è½½é¢è®¾æå¡å¨å¤±è´¥: "+(((i=(F=$.response)==null?void 0:F.data)==null?void 0:i.error)||$.message))}}function g(){f.value.type==="custom"&&(f.value.preset_id=void 0)}async function V(){const F=_.value.find(i=>i.id===f.value.preset_id);F&&(f.value.name=F.name,f.value.description=F.description,f.value.transport=F.transport)}async function z(){var F,i;try{w.value?(await A.put(`/api/admin/mcp-servers/${f.value.id}`,f.value),b.success("æ´æ°æå")):(await A.post("/api/admin/mcp-servers",f.value),b.success("å建æå")),L(),r()}catch($){b.error("æä½å¤±è´¥: "+(((i=(F=$.response)==null?void 0:F.data)==null?void 0:i.error)||$.message))}}function M(F){w.value=!0,f.value={...F}}function L(){w.value=!1,f.value={name:"",description:"",type:"custom",transport:"stdio",command:"",args:"",url:"",env_vars:"",is_enabled:!0}}async function I(F){var i,$;v.value=F;try{const X=await A.post(`/api/admin/mcp-servers/${F}/test`);X.data.status==="active"?b.success("è¿æ¥æµè¯æå"):b.warning("è¿æ¥æµè¯å¤±è´¥: "+X.data.message),r()}catch(X){b.error("æµè¯å¤±è´¥: "+((($=(i=X.response)==null?void 0:i.data)==null?void 0:$.error)||X.message))}finally{v.value=null}}async function O(F){var i,$;try{await A.put(`/api/admin/mcp-servers/${F.id}`,{is_enabled:F.is_enabled}),b.success(F.is_enabled?"å·²å¯ç¨":"å·²ç¦ç¨")}catch(X){b.error("æä½å¤±è´¥: "+((($=(i=X.response)==null?void 0:i.data)==null?void 0:$.error)||X.message)),r()}}async function j(F){var i,$;try{await et.confirm("ç¡®å®è¦å é¤è¿ä¸ª MCP æå¡å¨åï¼","确认",{type:"warning"}),await A.delete(`/api/admin/mcp-servers/${F}`),b.success("å 餿å"),r()}catch(X){X!=="cancel"&&b.error("å é¤å¤±è´¥: "+((($=(i=X.response)==null?void 0:i.data)==null?void 0:$.error)||X.message))}}function R(F){switch(F){case"active":return"success";case"error":return"danger";case"inactive":return"info";default:return"warning"}}function K(F){return m.value.some(i=>{var $,X;return(($=i.command)==null?void 0:$.includes(F))||((X=i.args)==null?void 0:X.includes(F))})}function H(){window.open("https://mcp.so/servers","_blank")}async function x(F){var E,oe;if(K(F.package)){b.info("该æå¡å¨å·²æ·»å ");return}const i=F.installCommand.split(" "),$=i[0],X=i.slice(1).join(" "),G={name:F.name,description:F.description,type:"custom",transport:F.transport||"stdio",command:$,args:X,is_enabled:!0};try{await A.post("/api/admin/mcp-servers",G),b.success(`已添å ${F.name}`),r()}catch(Q){b.error("æ·»å 失败: "+(((oe=(E=Q.response)==null?void 0:E.data)==null?void 0:oe.error)||Q.message))}}function B(F){h.value=F,y.value=!0}function D(){h.value&&(navigator.clipboard.writeText(h.value.installCommand),b.success("å·²å¤å¶å°åªè´´æ¿"))}async function U(){var F,i;try{const $=JSON.parse(u.value);if(!$.name){b.error("JSON 缺å°å¿
éåæ®µ: name");return}const X={name:$.name,description:$.description||"",type:"custom",transport:$.transport||"stdio",command:$.command||"",args:$.args||"",url:$.url||"",env_vars:$.env_vars?JSON.stringify(typeof $.env_vars=="object"?[$.env_vars]:$.env_vars):"",is_enabled:$.is_enabled!==void 0?$.is_enabled:!0};await A.post("/api/admin/mcp-servers",X),b.success("æå¡å¨å¯¼å
¥æå"),C.value=!1,u.value="",r()}catch($){$ instanceof SyntaxError?b.error("JSON æ ¼å¼é误: "+$.message):b.error("导å
¥å¤±è´¥: "+(((i=(F=$.response)==null?void 0:F.data)==null?void 0:i.error)||$.message))}}return be(()=>{r(),o()}),(F,i)=>{const $=a("el-option"),X=a("el-select"),G=a("el-form-item"),E=a("el-input"),oe=a("el-switch"),Q=a("el-button"),re=a("el-form"),me=a("el-card"),ie=a("el-col"),ce=a("el-table-column"),ke=a("el-tag"),De=a("el-table"),ve=a("el-row"),W=a("el-tab-pane"),Z=a("el-icon"),Ve=a("el-alert"),xe=a("el-empty"),ae=a("el-tabs"),ee=a("el-descriptions-item"),Y=a("el-descriptions"),P=a("el-dialog");return n(),k("div",null,[e(ae,{modelValue:c.value,"onUpdate:modelValue":i[11]||(i[11]=ne=>c.value=ne),type:"border-card"},{default:t(()=>[e(W,{label:"æçæå¡å¨",name:"my-servers"},{default:t(()=>[e(ve,{gutter:20},{default:t(()=>[e(ie,{span:8,xs:24},{default:t(()=>[e(me,null,{default:t(()=>[l("h3",null,S(w.value?"ç¼è¾ MCP æå¡å¨":"æ·»å MCP æå¡å¨"),1),e(re,{model:f.value,"label-width":"100px"},{default:t(()=>[e(G,{label:"æå¡å¨ç±»å"},{default:t(()=>[e(X,{modelValue:f.value.type,"onUpdate:modelValue":i[0]||(i[0]=ne=>f.value.type=ne),onChange:g},{default:t(()=>[e($,{label:"é¢è®¾æå¡å¨",value:"preset"}),e($,{label:"èªå®ä¹æå¡å¨",value:"custom"})]),_:1},8,["modelValue"])]),_:1}
129),f.value.type==="preset"?(n(),N(G,{key:0,label:"é¢è®¾æå¡å¨"},{default:t(()=>[e(X,{modelValue:f.value.preset_id,"onUpdate:modelValue":i[1]||(i[1]=ne=>f.value.preset_id=ne),onChange:V,placeholder:"éæ©é¢è®¾æå¡å¨"},{default:t(()=>[(n(!0),k(ue,null,fe(_.value,ne=>(n(),N($,{key:ne.id,label:ne.name,value:ne.id},{default:t(()=>[l("span",null,S(ne.name),1),l("span",fu,S(ne.description),1)]),_:2},1032,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1})):te("",!0),e(G,{label:"åç§°"},{default:t(()=>[e(E,{modelValue:f.value.name,"onUpdate:modelValue":i[2]||(i[2]=ne=>f.value.name=ne),disabled:f.value.type==="preset"},null,8,["modelValue","disabled"])]),_:1}),e(G,{label:"æè¿°"},{default:t(()=>[e(E,{modelValue:f.value.description,"onUpdate:modelValue":i[3]||(i[3]=ne=>f.value.description=ne),type:"textarea",disabled:f.value.type==="preset"},null,8,["modelValue","disabled"])]),_:1}),e(G,{label:"ä¼ è¾æ¹å¼"},{default:t(()=>[e(X,{modelValue:f.value.transport,"onUpdate:modelValue":i[4]||(i[4]=ne=>f.value.transport=ne),disabled:f.value.type==="preset"},{default:t(()=>[e($,{label:"stdio",value:"stdio"}),e($,{label:"SSE",value:"sse"}),e($,{label:"WebSocket",value:"ws"})]),_:1},8,["modelValue","disabled"])]),_:1}),f.value.transport==="stdio"?(n(),k(ue,{key:1},[e(G,{label:"å½ä»¤"},{default:t(()=>[e(E,{modelValue:f.value.command,"onUpdate:modelValue":i[5]||(i[5]=ne=>f.value.command=ne),disabled:f.value.type==="preset",placeholder:"å¦: npx"},null,8,["modelValue","disabled"])]),_:1}),e(G,{label:"åæ°"},{default:t(()=>[e(E,{modelValue:f.value.args,"onUpdate:modelValue":i[6]||(i[6]=ne=>f.value.args=ne),disabled:f.value.type==="preset",placeholder:"å¦: -y @modelcontextprotocol/server-filesystem /tmp/mcp-files"},null,8,["modelValue","disabled"])]),_:1}),e(G,{label:"ç¯å¢åé"},{default:t(()=>[e(E,{modelValue:f.value.env_vars,"onUpdate:modelValue":i[7]||(i[7]=ne=>f.value.env_vars=ne),type:"textarea",disabled:f.value.type==="preset",placeholder:'JSONæ ¼å¼: [{"API_KEY":"xxx"}]'},null,8,["modelValue","disabled"])]),_:1})],64)):(n(),N(G,{key:2,label:"URL"},{default:t(()=>[e(E,{modelValue:f.value.url,"onUpdate:modelValue":i[8]||(i[8]=ne=>f.value.url=ne),disabled:f.value.type==="preset",placeholder:"æå¡å¨å°å"},null,8,["modelValue","disabled"])]),_:1})),e(G,{label:"ç¶æ"},{default:t(()=>[e(oe,{modelValue:f.value.is_enabled,"onUpdate:modelValue":i[9]||(i[9]=ne=>f.value.is_enabled=ne),"active-text":"å¯ç¨","inactive-text":"ç¦ç¨"},null,8,["modelValue"])]),_:1}),e(G,null,{default:t(()=>[e(Q,{type:"primary",onClick:z},{default:t(()=>[s(S(w.value?"æ´æ°":"å建"),1)]),_:1}),w.value?(n(),N(Q,{key:0,onClick:L},{default:t(()=>[...i[19]||(i[19]=[s("åæ¶",-1)])]),_:1})):te("",!0)]),_:1})]),_:1},8,["model"])]),_:1})]),_:1}),e(ie,{span:16,xs:24},{default:t(()=>[e(me,null,{default:t(()=>[i[23]||(i[23]=l("h3",null,"MCP æå¡å¨å表",-1)),e(De,{data:m.value,style:{width:"100%"}},{default:t(()=>[e(ce,{prop:"id",label:"#",width:"60"}),e(ce,{prop:"name",label:"åç§°",width:"200"}),e(ce,{prop:"type",label:"ç±»å",width:"100"},{default:t(({row:ne})=>[e(ke,{type:ne.type==="preset"?"success":"info",size:"small"},{default:t(()=>[s(S(ne.type==="preset"?"é¢è®¾":"èªå®ä¹"),1)]),_:2},1032,["type"])]),_:1}),e(ce,{prop:"transport",label:"ä¼ è¾",width:"80"}),e(ce,{prop:"status",label:"ç¶æ",width:"100"},{default:t(({row:ne})=>[e(ke,{type:R(ne.status),size:"small"},{default:t(()=>[s(S(ne.status||"inactive"),1)]),_:2},1032,["type"])]),_:1}),e(ce,{prop:"is_enabled",label:"å¯ç¨",width:"80"},{default:t(({row:ne})=>[e(oe,{modelValue:ne.is_enabled,"onUpdate:modelValue":we=>ne.is_enabled=we,onChange:we=>O(ne)},null,8,["modelValue","onUpdate:modelValue","onChange"])]),_:1}),e(ce,{label:"æä½",width:"280"},{default:t(({row:ne})=>[e(Q,{size:"small",onClick:we=>I(ne.id),loading:v.value===ne.id},{default:t(()=>[...i[20]||(i[20]=[s(" æµè¯è¿æ¥ ",-1)])]),_:1},8,["onClick","loading"]),e(Q,{size:"small",onClick:we=>M(ne)},{default:t(()=>[...i[21]||(i[21]=[s("ç¼è¾",-1)])]),_:1},8,["onClick"]),e(Q,{size:"small",type:"danger",onClick:we=>j(ne.id)},{default:t(()=>[...i[22]||(i[22]=[s("å é¤",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])]),_:1})]),_:1})]),_:1})]),_:1}),e(W,{label:"æµè§ mcp.so",name:"browse-mcpso"},{default:t(()=>[e(me,null,{header:t(()=>[l("div",_u,[i[26]||(i[26]=l("h3",null,"æ¢ç´¢ mcp.so æå¡å¨",-1)),l("div",yu,[e(Q,{onClick:i[10]||(i[10]=ne=>C.value=!0)},{default:t(()=>[e(Z,null,{default:t(()=>[e(se(kt))]),_:1}),i[24]||(i[24]=s(" JSON 导å
¥ ",-1))]),_:1}),e(Q,{type:"primary",onClick:H,target:"_blank"},{default:t(()=>[e(Z,null,{default:t(()=>[e(se(Dl))]),_:1}
129),i[25]||(i[25]=s(" è®¿é® mcp.so ",-1))]),_:1})])])]),default:t(()=>[e(Ve,{title:"ä» mcp.so éæ©ç鍿å¡å¨å¿«éæ·»å ",type:"info",closable:!1,style:{"margin-bottom":"20px"}},{default:t(()=>[...i[27]||(i[27]=[s(" mcp.so æ¯æå¤§ç MCP æå¡å¨æ³¨åä¸å¿ï¼æ¥æè¶ è¿ 15,000 个æå¡å¨ãä¸é¢æ¯ä¸äºç鍿¨èã ",-1)])]),_:1}),e(ve,{gutter:20},{default:t(()=>[(n(!0),k(ue,null,fe(p.value,ne=>(n(),N(ie,{key:ne.id,span:8,xs:24,style:{"margin-bottom":"20px"}},{default:t(()=>[e(me,{shadow:"hover",class:"server-card"},{header:t(()=>[l("div",gu,[l("span",bu,S(ne.name),1),e(ke,{size:"small",type:ne.official?"success":"info"},{default:t(()=>[s(S(ne.official?"宿¹":"社åº"),1)]),_:2},1032,["type"])])]),default:t(()=>[l("div",wu,S(ne.description),1),l("div",ku,[e(ke,{size:"small",style:{"margin-right":"5px"}},{default:t(()=>[s(S(ne.category),1)]),_:2},1024),e(ke,{size:"small",type:"info"},{default:t(()=>[s(S(ne.language),1)]),_:2},1024)]),l("div",hu,[e(Q,{type:"primary",size:"small",onClick:we=>x(ne),disabled:K(ne.package)},{default:t(()=>[e(Z,null,{default:t(()=>[e(se(xl))]),_:1}),s(" "+S(K(ne.package)?"已添å ":"å¿«éæ·»å "),1)]),_:2},1032,["onClick","disabled"]),e(Q,{size:"small",onClick:we=>B(ne)},{default:t(()=>[...i[28]||(i[28]=[s(" 详æ ",-1)])]),_:1},8,["onClick"])])]),_:2},1024)]),_:2},1024))),128))]),_:1}),p.value.length===0?(n(),N(xe,{key:0,description:"æ£å¨å è½½æå¡å¨å表..."})):te("",!0)]),_:1})]),_:1})]),_:1},8,["modelValue"]),e(P,{modelValue:y.value,"onUpdate:modelValue":i[15]||(i[15]=ne=>y.value=ne),title:"æå¡å¨è¯¦æ ",width:"600px"},{default:t(()=>[h.value?(n(),k("div",$u,[l("h3",null,S(h.value.name),1),l("p",null,S(h.value.description),1),e(Y,{column:1,border:""},{default:t(()=>[e(ee,{label:"åç±»"},{default:t(()=>[s(S(h.value.category),1)]),_:1}),e(ee,{label:"è¯è¨"},{default:t(()=>[s(S(h.value.language),1)]),_:1}),e(ee,{label:"宿¹"},{default:t(()=>[s(S(h.value.official?"æ¯":"å¦"),1)]),_:1}),e(ee,{label:"å®è£ å½ä»¤"},{default:t(()=>[e(E,{modelValue:h.value.installCommand,"onUpdate:modelValue":i[12]||(i[12]=ne=>h.value.installCommand=ne),readonly:""},{append:t(()=>[e(Q,{onClick:D},{default:t(()=>[...i[29]||(i[29]=[s("å¤å¶",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1}),l("div",Vu,[e(Q,{type:"primary",onClick:i[13]||(i[13]=ne=>x(h.value))},{default:t(()=>[...i[30]||(i[30]=[s(" æ·»å å°æçæå¡å¨ ",-1)])]),_:1}),e(Q,{onClick:i[14]||(i[14]=ne=>y.value=!1)},{default:t(()=>[...i[31]||(i[31]=[s("å ³é",-1)])]),_:1})])])):te("",!0)]),_:1},8,["modelValue"]),e(P,{modelValue:C.value,"onUpdate:modelValue":i[18]||(i[18]=ne=>C.value=ne),title:"JSON å¯¼å ¥",width:"700px"},{footer:t(()=>[e(Q,{onClick:i[17]||(i[17]=ne=>C.value=!1)},{default:t(()=>[...i[33]||(i[33]=[s("åæ¶",-1)])]),_:1}),e(Q,{type:"primary",onClick:U},{default:t(()=>[...i[34]||(i[34]=[s("å¯¼å ¥",-1)])]),_:1})]),default:t(()=>[e(Ve,{title:"ç²è´´ MCP æå¡å¨é ç½® JSON",type:"info",closable:!1,style:{"margin-bottom":"15px"}},{default:t(()=>[...i[32]||(i[32]=[s(" æ¯æä» mcp.so æå ¶ä»æ¥æºå¤å¶ MCP æå¡å¨é ç½®ãJSON æ ¼å¼ç¤ºä¾ï¼ ",-1),l("pre",{style:{margin:"10px 0",padding:"10px",background:"#f5f5f5","border-radius":"4px","font-size":"12px"}},`{ 130 "name": "My MCP Server", 131 "description": "Server description", 132 "command": "npx", 133 "args": "-y @modelcontextprotocol/server-filesystem /tmp/files", 134 "transport": "stdio", 135 "env_vars": {"API_KEY": "your-key"} 136}`,-1)])]),_:1}),e(E,{modelValue:u.value,"onUpdate:modelValue":i[16]||(i[16]=ne=>u.value=ne),type:"textarea",rows:15,placeholder:"ç²è´´ MCP æå¡å¨ JSON é ç½®...",style:{"font-family":"monospace"}},null,8,["modelValue"])]),_:1},8,["modelValue"])])}}}),xu=Ce(Cu,[["__scopeId","data-v-3d58cb85"]]),Du={key:0},Su={key:1},Mu=ge({__name:"TeacherDetail",setup(q){de.extend(pt),de.extend(xt);const c=st(),w=Ie(),v=d(null),y=d([]);be(async()=>{const h=c.params.id;if(!h){w.push("/student");return}try{const u=await A.get(`/api/teachers/${h}`);v.value=u.data;const f=await A.get(`/api/teachers/${h}/courses`);y.value=f.data}catch(u){console.error("è·åæå¸ä¿¡æ¯å¤±è´¥:",u),b.error("è·åæå¸ä¿¡æ¯å¤±è´¥"),w.push("/student")}});function C(){w.go(-1)}return(h,u)=>{const f=a("el-page-header"),m=a("el-descriptions-item"),_=a("el-descriptions"),p=a("el-card"),r=a("el-container");return n(),N(r,{style:{padding:"20px","max-width":"1000px",margin:"auto"}},{default:t(()=>[e(p,null,{default:t(()=>[e(f,{onBack:C,content:"æå¸è¯¦æ ",style:{"margin-bottom":"20px"}}),v.value?(n(),k("div",Du,[e(_,{title:"æå¸ä¿¡æ¯",column:1,border:""},{default:t(()=>[e(m,{label:"å§å"},{default:t(()=>[s(S(v.value.name),1)]),_:1}),e(m,{label:"é®ç®±"},{default:t(()=>[s(S(v.value.email),1)]),_:1})]),_:1})])):(n(),k("div",Su,[...u[0]||(u[0]=[l("p",null,"å è½½ä¸...",-1)])]))]),_:1})]),_:1})}}}),Uu={class:"institution-dashboard"},Iu={class:"actions-bar"},Tu={class:"stats-container"},Au={class:"chart-container"},zu={class:"teachers-list"},Lu={class:"calendar-toolbar"},Yu=["onClick"],Eu={class:"calendar-day-number"},Ru={class:"calendar-day-slots"},Fu={key:0,class:"timeslots-details"},Bu={key:0},Pu={key:1},Hu={key:2,class:"timeslots-list"},Ou={class:"timeslot-teacher"},qu={class:"timeslot-course"},Nu={class:"timeslot-time"},ju={class:"timeslot-status"},Wu={class:"dialog-footer"},Ku=ge({__name:"InstitutionDashboard",setup(q){const c=d([]),w=d(!0),v=d(null),y=d(""),C=d("");let h=null;Ie();const u=d(new Date),f=d(null),m=d([]),_=d(!1),p=d([]),r=d(!1),o=d(null),g=async()=>{try{const x=await A.get("/api/institution/teachers");c.value=x.data}catch(x){console.error("Failed to fetch teachers:",x)}finally{w.value=!1}},V=async x=>{let B;const D=sessionStorage.getItem("user");D&&(B=JSON.parse(D).id);try{const F=(await A.get(`/api/institutions/${B}/teachers/${x.id}/details`)).data;o.value={...F.user,achievement:F.details.achievement,style:F.details.style,subject:F.details.subject,background:F.details.background,link:F.details.link,role:F.role},r.value=!0}catch(U){console.error("Failed to fetch teacher details:",U),b.error("Failed to fetch teacher details")}},z=async()=>{try{const B=(await A.get("/api/institution/teacher-join-stats")).data,D=Object.keys(B).sort(),U=D.map(F=>B[F]);if(v.value){h&&h.dispose(),h=ut(v.value);const F={tooltip:{trigger:"axis"},xAxis:{type:"category",data:D},yAxis:{type:"value",minInterval:1},series:[{data:U,type:"line",smooth:!0}]};h.setOption(F)}}catch(x){console.error("Failed to fetch join stats:",x)}},M=()=>
136{if(!o.value)return;let x;const B=sessionStorage.getItem("user");B&&(x=JSON.parse(B).id),A.delete(`/api/institutions/${x}/teachers/${o.value.id}`).then(g).then(()=>{r.value=!1,b.success("æåç§»é¤æå¸")})},L=async()=>{if(!o.value)return;let x;const B=sessionStorage.getItem("user");B&&(x=JSON.parse(B).id);try{await A.put(`/api/institutions/${x}/teachers/${o.value.id}/details`,{achievement:o.value.achievement,style:o.value.style,subject:o.value.subject,background:o.value.background,link:o.value.link,role:o.value.role,phone:o.value.phone,email:o.value.email,city:o.value.city}),await A.post(`/api/admin/users/${o.value.id}/remark`,{remark:o.value.remark}),b.success("Teacher information saved successfully"),r.value=!1,await g()}catch(D){console.error("Failed to save teacher information:",D),b.error("Failed to save teacher information")}},I=()=>{const x=sessionStorage.getItem("user");if(x){const B=JSON.parse(x),D=`${window.location.origin}/institution/${B.id}/showcase`;window.open(D,"_blank")}};je(y,x=>{O()});const O=async()=>{try{_.value=!0;const x=await A.get("/api/institution/teachers-timeslots",{params:{teacher_id:y.value}});p.value=x.data||[],f.value=""}catch(x){console.error("Failed to fetch teachers timeslots:",x),b.error("è·åæå¸è¯¾æ¶ä¿¡æ¯å¤±è´¥")}finally{_.value=!1}},j=x=>p.value.filter(B=>de(B.start).format("YYYY-MM-DD")===x),R=x=>{f.value=x.day,K(x.day)},K=x=>{m.value=j(x)},H=x=>de(x).format("HH:mm");return be(()=>{g(),z(),O()}),(x,B)=>{const D=a("el-button"),U=a("el-tag"),F=a("el-table-column"),i=a("el-table"),$=a("el-calendar"),X=a("el-form-item"),G=a("el-input"),E=a("el-option"),oe=a("el-select"),Q=a("el-form"),re=a("el-dialog"),me=Ee("loading");return n(),k("div",Uu,[B[27]||(B[27]=l("h1",null,"Institution Dashboard",-1)),l("div",Iu,[e(D,{type:"primary",onClick:I,icon:"Share"},{default:t(()=>[...B[15]||(B[15]=[s(" å享æå¸é¡µé¢ ",-1)])]),_:1})]),l("div",Tu,[l("div",Au,[B[16]||(B[16]=l("h2",null,"Teacher Joining Trends",-1)),l("div",{ref_key:"chartContainer",ref:v,style:{width:"100%",height:"400px"}},null,512)]),l("div",zu,[B[21]||(B[21]=l("h2",null,"Your Teachers",-1)),Me((n(),N(i,{data:c.value,style:{width:"100%"}},{default:t(()=>[e(F,{prop:"name",label:"å§å",width:"150"},{default:t(({row:ie})=>[e(U,{onClick:ce=>{y.value=ie.id,C.value=ie.name}},{default:t(()=>[s(S(ie.name),1)]),_:2},1032,["onClick"])]),_:1}),e(F,{prop:"email",label:"Email"}),e(F,{prop:"city",label:"åå¸"}),e(F,{prop:"institutionRole",label:"è§è²"},{default:t(({row:ie})=>[ie.institutionRole==="teacher"?(n(),N(U,{key:0,type:"primary"},{default:t(()=>[...B[17]||(B[17]=[s("èå¸",-1)])]),_:1})):te("",!0),ie.institutionRole==="manager"?(n(),N(U,{key:1,type:"success"},{default:t(()=>[...B[18]||(B[18]=[s("管çå",-1)])]),_:1})):te("",!0),ie.institutionRole==="todo"?(n(),N(U,{key:2,type:"warning"},{default:t(()=>[...B[19]||(B[19]=[s("å¾
å®¡æ ¸",-1)])]),_:1})):te("",!0)]),_:1}),e(F,{label:"æä½"},{default:t(({row:ie})=>[e(D,{size:"small",onClick:ce=>V(ie)},{default:t(()=>[...B[20]||(B[20]=[s("æ¥ç详æ
",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[me,w.value]])])]),l("div",null,[B[23]||(B[23]=l("h2",null,"èå¸ç©ºé²è¯¾æ¶æ¥ç",-1)),l("div",null,[l("div",Lu,[e(D,{onClick:B[0]||(B[0]=ie=>{y.value=""})},{default:t(()=>[...B[22]||(B[22]=[s("å·æ°",-1)])]),_:1}),p.value.length>0?(n(),N(U,{key:0},{default:t(()=>[s(S(p.value.length),1)]),_:1})):te("",!0),C.value!==""?(n(),N(U,{key:1,closable:"",onClose:B[1]||(B[1]=ie=>{C.value="",y.value=""})},{default:t(()=>[s(S(C.value),1)]),_:1})):te("",!0)]),e($,{modelValue:u.value,"onUpdate:modelValue":B[2]||(B[2]=ie=>u.value=ie)},{"date-cell":t(({data:ie})=>[l("div",{class:"calendar-day",onClick:ce=>R(ie)},[l("div",Eu,S(ie.day.split("-")[2]),1),l("div",Ru,[(n(!0),k(ue,null,fe(j(ie.day),ce=>(n(),k("div",{key:ce.id,class:Ye(["slot-indicator",{booked:ce.booked}])},null,2))),128))])],8,Yu)]),_:1},8,["modelValue"]),f.value?(n(),k("div",Fu,[l("h3",null,S(f.value)+" ç课æ¶å®æ",1),_.value?(n(),k("div",Bu,"å è½½ä¸...")):m.value.length===0?(n(),k("div",Pu,"è¯¥æ¥ææ²¡æå¯ç¨è¯¾æ¶")):(n(),k("div",Hu,[(n(!0),k(ue,null,fe(m.value,ie=>(n(),k("div",{key:ie.id,class:Ye(["timeslot-item",{booked:ie.booked}])},[l("div",Ou,S(ie.teacherName),1),l("div",qu,S(ie.courseTitle),1),l("div",Nu,S(H(ie.start))+" - "+S(H(ie.end)),1),l("div",ju,[e(U,{type:ie.booked?"danger":"success"},{default:t(()=>[s(S(ie.booked?"å·²é¢çº¦":"空é²"),1)]),_:2},1032,["type"])])],2))),128))]))])):te("",!0)])]),e(re,{modelValue:r.value,"onUpdate:modelValue":B[14]||(B[14]=ie=>r.value=ie),title:"èå¸è¯¦æ
",width:"50%"},{footer:t(()=>[l("span",Wu,[e(D,{onClick:B[13]||(B[13]=ie=>r.value=!1)},{default:t(()=>[...B[24]||(B[24]=[s("åæ¶",-1)])]),_:1}),e(D,{type:"danger",onClick:M},{default:t(()=>[...B[25]||(B[25]=[s("ç§»é¤",-1)])]),_:1}),e(D,{type:"primary",onClick:L},{default:t(()=>[...B[26]||(B[26]=[s("ä¿å",-1)])]),_:1})])]),default:t(()=>[o.value?(n(),N(Q,{key:0,"label-width":"auto"},{default:t(()=>[e(X,{label:"Name"},{default:t(()=>[l("span",null,S(o.value.name),1)]),_:1}),e(X,{label:"Email"},{default:t(()=>[e(G,{modelValue:o.value.email,"onUpdate:modelValue":B[3]||(B[3]=ie=>o.value.email=ie)},null,8,["modelValue"])]),_:1}),e(X,{label:"çµè¯"},{default:t(()=>[e(G,{modelValue:o.value.phone,"onUpdate:modelValue":B[4]||(B[4]=ie=>o.value.phone=ie)},null,8,["modelValue"])]),_:1}),e(X,{label:"åå¸"},{default:t(()=>[e(G,{modelValue:o.value.city,"onUpdate:modelValue":B[5]||(B[5]=ie=>o.value.city=ie)},null,8,["modelValue"])]),_:1}),e(X,{label:"è§è²"},{default:t(()=>[e(oe,{modelValue:o.value.role,"onUpdate:modelValue":B[6]||(B[6]=ie=>o.value.role=ie),placeholder:"Select role"},{default:t(()=>
136[e(E,{label:"èå¸",value:"teacher"}),e(E,{label:"管çå",value:"manager"}),e(E,{label:"å¾
å®¡æ ¸",value:"todo"})]),_:1},8,["modelValue"])]),_:1}),e(X,{label:"æå¦ç§ç®"},{default:t(()=>[e(G,{modelValue:o.value.subject,"onUpdate:modelValue":B[7]||(B[7]=ie=>o.value.subject=ie),placeholder:"æå¦ç§ç®"},null,8,["modelValue"])]),_:1}),e(X,{label:"æå¦èæ¯"},{default:t(()=>[e(G,{modelValue:o.value.background,"onUpdate:modelValue":B[8]||(B[8]=ie=>o.value.background=ie),type:"textarea",autosize:{minRows:2,maxRows:4},placeholder:"Enter teacher's background"},null,8,["modelValue"])]),_:1}),e(X,{label:"æå¦é£æ ¼"},{default:t(()=>[e(G,{modelValue:o.value.style,"onUpdate:modelValue":B[9]||(B[9]=ie=>o.value.style=ie),type:"textarea",autosize:{minRows:2,maxRows:4},placeholder:"Enter teacher's teaching style"},null,8,["modelValue"])]),_:1}),e(X,{label:"æå¦æå°±"},{default:t(()=>[e(G,{modelValue:o.value.achievement,"onUpdate:modelValue":B[10]||(B[10]=ie=>o.value.achievement=ie),type:"textarea",autosize:{minRows:2,maxRows:4},placeholder:"Enter teacher's achievement"},null,8,["modelValue"])]),_:1}),e(X,{label:"ä¸ªäººé¾æ¥"},{default:t(()=>[e(G,{modelValue:o.value.link,"onUpdate:modelValue":B[11]||(B[11]=ie=>o.value.link=ie)},null,8,["modelValue"])]),_:1}),e(X,{label:"夿³¨"},{default:t(()=>[e(G,{modelValue:o.value.remark,"onUpdate:modelValue":B[12]||(B[12]=ie=>o.value.remark=ie),type:"textarea",autosize:{minRows:2,maxRows:4},placeholder:"Enter remark for this teacher"},null,8,["modelValue"])]),_:1})]),_:1})):te("",!0)]),_:1},8,["modelValue"])])}}}),Gu=Ce(Ku,[["__scopeId","data-v-34682634"]]),Ju={class:"institution-showcase"},Xu={class:"institution-header"},Qu={class:"header-content"},Zu={class:"institution-slogan"},ed={class:"main-content"},td={key:0,class:"loading-placeholder"},ld={key:1},ad={key:0,class:"empty-state"},od={key:1,class:"teachers-grid"},nd={class:"teacher-content"},sd={class:"teacher-header"},rd={class:"teacher-avatar"},id={key:0,class:"avatar-placeholder"},ud={class:"teacher-basic-info"},dd={class:"teacher-name"},cd={class:"teacher-subject"},pd={key:0,class:"experience-tag"},md={class:"teacher-details"},vd={key:0,class:"teacher-extra-info"},fd={key:0,class:"info-item"},_d={class:"info-content"},yd={key:1,class:"info-item"},gd={class:"info-content"},bd={key:2,class:"info-item"},wd={class:"info-content"},kd={key:0,class:"teacher-location"},hd={key:0},$d={key:1},Vd={key:2},Cd={class:"teacher-id"},xd={class:"contact-section"},Dd={class:"contact-content"},Sd={class:"contact-item"},Md={class:"contact-text"},Ud={class:"contact-location"},Id={class:"contact-item"},Td={class:"contact-text"},Ad={class:"contact-phone"},zd=ge({__name:"InstitutionShowcase",setup(q){const c=st(),w=Ie(),v=d(null),y=d({name:"",remark:"",phone:""}),C=d([]),h=d([]),u=d(!0);be(()=>{const _=c.params.institutionId;_?(v.value=parseInt(_),m(),f()):w.push("/")});const f=async()=>{if(v.value)try{const _=await A.get(`/api/public/institutions/${v.value}/managers`);h.value=_.data}catch(_){console.error("è·å管ç人å失败:",_)}},m=async()=>{if(v.value)try{const _=await A.get(`/api/public/institutions/${v.value}`);y.value=_.data;const p=await A.get(`/api/public/institutions/${v.value}/teachers`);C.value=p.data}catch(_){console.error("è·åæå¸å表失败:",_)}finally{u.value=!1}};return(_,p)=>{const r=a("el-icon"),o=a("el-tag");return n(),k("div",Ju,[l("header",Xu,[l("div",Qu,[p[0]||(p[0]=l("h1",{class:"institution-title"},"ä¼ç§æå¸å¢é",-1)),l("p",Zu,S(y.value.remark||"æä»¬æ¥æä¸æ¯ç»éªä¸°å¯ãæå¦æ°´å¹³é«è¶
çæå¸å¢éï¼è´åäºä¸ºå¦çæä¾æä¼è´¨çæè²æå¡"),1)])]),l("div",ed,[u.value?(n(),k("div",td,[...p[1]||(p[1]=[l("div",{class:"spinner"},null,-1),l("p",null,"æå¸ä¿¡æ¯å è½½ä¸...",-1)])])):(n(),k("div",ld,[C.value.length===0?(n(),k("div",ad,[e(r,{class:"empty-icon"},{default:t(()=>[e(se(Sl))]),_:1}),p[2]||(p[2]=l("p",null,"è¯¥æºæææ æå¸ä¿¡æ¯",-1))])):(n(),k("div",od,[(n(!0),k(ue,null,fe(C.value,g=>(n(),k("div",{key:g.id,class:"teacher-card"},[l("div",nd,[l("div",sd,[l("div",rd,[g.avatar?te("",!0):(n(),k("div",id,[e(r,{class:"contact-icon"},{default:t(()=>[e(se(_t))]),_:1})]))]),l("div",ud,[l("h3",dd,S(g.name),1),l("p",cd,[e(o,{size:"small",class:"subject-tag"},{default:t(()=>[s(S(g.info.subject||"å
¨ç§æå¸"),1)]),_:2},1024),g.yearsOfExperience?(n(),k("span",pd,S(g.yearsOfExperience)+"å¹´æé¾ ",1)):te("",!0)])])]),l("div",md,[g.info?(n(),k("div",vd,[g.info.background?(n(),k("div",fd,[p[3]||(p[3]=l("h4",{class:"info-title"},"æå¦èæ¯",-1)),l("p",_d,S(g.info.background),1)])):te("",!0),g.info.style?(n(),k("div",yd,[p[4]||(p[4]=l("h4",{class:"info-title"},"æå¦é£æ ¼",-1)),l("p",gd,S(g.info.style),1)])):te("",!0),g.info.achievement?(n(),k("div",bd,[p[5]||(p[5]=l("h4",{class:"info-title"}
136,"æå¦ææ",-1)),l("p",wd,S(g.info.achievement),1)])):te("",!0)])):te("",!0)]),g.city||g.region?(n(),k("div",kd,[e(r,{class:"location-icon"},{default:t(()=>[e(se(Ml))]),_:1}),l("span",null,[g.city?(n(),k("span",hd,S(g.city),1)):te("",!0),g.city&&g.region?(n(),k("span",$d,"ï¼")):te("",!0),g.region?(n(),k("span",Vd,S(g.region),1)):te("",!0)])])):te("",!0),l("div",Cd,"#"+S(g.id),1)])]))),128))]))]))]),l("div",xd,[l("div",Dd,[p[8]||(p[8]=l("h2",{class:"section-title"},"èç³»æä»¬",-1)),(n(!0),k(ue,null,fe(h.value,g=>(n(),k("div",{class:"contact-info",key:g.id},[l("div",Sd,[e(r,{class:"contact-icon"},{default:t(()=>[e(se(_t))]),_:1}),l("div",Md,[p[6]||(p[6]=l("h4",null,"å°åºè´è´£äºº",-1)),l("p",null,S(g.name),1),l("p",Ud,S(g.city),1)])]),l("div",Id,[e(r,{class:"contact-icon"},{default:t(()=>[e(se(Ul))]),_:1}),l("div",Td,[p[7]||(p[7]=l("h4",null,"èç³»çµè¯",-1)),l("p",Ad,S(g.phone),1)])])]))),128))])])])}}}),Ld=Ce(zd,[["__scopeId","data-v-3afb60ce"]]),Yd={class:"note-detail"},Ed={class:"card-header"},Rd={key:0,class:"note-display"},Fd={class:"note-info"},Bd={class:"create-time"},Pd=["innerHTML"],Hd={class:"actions"}
136,Od={key:1,class:"note-edit"},qd={class:"toolbar"},Nd={class:"actions"},jd=["data-note-title"],Wd={class:"print-header"},Kd={class:"print-metadata"},Gd=["innerHTML"],Jd=ge({__name:"NoteDetail",setup(q){const c=st(),w=Ie(),v=new Jt,y=d({id:0,content:"",is_public:!1,created_at:""}),C=d(!1),h=d({content:"",is_public:!1,fontSize:"16px"});be(()=>{u()});async function u(){try{const z=c.params.id,M=await A.get(`/api/notes/${z}`);y.value=M.data,y.value.font_size=M.data.font_size||"16px"}catch(z){console.error("Failed to load note:",z),w.back()}}function f(){w.back()}function m(){h.value.content=y.value.content,h.value.is_public=y.value.is_public,h.value.fontSize=y.value.font_size||"16px",C.value=!0}function _(){C.value=!1}async function p(){try{const z={booking_id:y.value.booking_id,content:h.value.content,is_public:h.value.is_public,font_size:h.value.fontSize};await A.put(`/api/notes/${y.value.id}`,z),y.value.content=h.value.content,y.value.is_public=h.value.is_public,y.value.font_size=h.value.fontSize,C.value=!1}catch(z){console.error("Failed to save note:",z),alert("ä¿åç¬è®°å¤±è´¥")}}async function r(){if(confirm("ç¡®å®è¦å é¤è¿æ¡ç¬è®°åï¼"))try{await A.delete(`/api/notes/${y.value.id}`),w.back()}catch(z){console.error("Failed to delete note:",z),alert("å é¤ç¬è®°å¤±è´¥")}}function o(z){return v.render(z)}function g(z){return de(z).format("YYYY-MM-DD HH:mm")}function V(){window.print()}return(z,M)=>{const L=a("el-page-header"),I=a("el-tag"),O=a("el-button"),j=a("el-option"),R=a("el-select"),K=a("el-input"),H=a("el-form-item"),x=a("el-scrollbar"),B=a("el-radio"),D=a("el-radio-group"),U=a("el-form"),F=a("el-card");return n(),k("div",Yd,[e(F,{class:"note-card"},{header:t(()=>[l("div",Ed,[e(L,{onBack:f,content:C.value?"ç¼è¾ç¬è®°":"æ¥çç¬è®°"},null,8,["content"])])]),default:t(()=>[C.value?(n(),k("div",Od,[e(U,{model:h.value,"label-width":"80px",class:"note-edit-form"},{default:t(()=>[e(x,{class:"note-editor-scrollbar"},{default:t(()=>[e(H,{label:"ç¬è®°å
容"},{default:t(()=>[l("div",qd,[M[6]||(M[6]=l("span",null,"åä½å¤§å°: ",-1)),e(R,{modelValue:h.value.fontSize,"onUpdate:modelValue":M[0]||(M[0]=i=>h.value.fontSize=i),placeholder:"éæ©åä½å¤§å°",size:"small",style:{width:"120px","margin-right":"10px"}},{default:t(()=>[e(j,{label:"å°",value:"14px"}),e(j,{label:"ä¸",value:"16px"}),e(j,{label:"大",value:"18px"}),e(j,{label:"è¶
大",value:"24px"})]),_:1},8,["modelValue"])]),e(K,{modelValue:h.value.content,"onUpdate:modelValue":M[1]||(M[1]=i=>h.value.content=i),type:"textarea",autosize:"{ minRows: 10 }",style:ft({fontSize:h.value.fontSize||"16px"}),placeholder:"æ¯æMarkdownæ ¼å¼"},null,8,["modelValue","style"])]),_:1})]),_:1}),e(H,{label:"å¯è§æ§"},{default:t(()=>[e(D,{modelValue:h.value.is_public,"onUpdate:modelValue":M[2]||(M[2]=i=>h.value.is_public=i)},{default:t(()=>[e(B,{label:!0},{default:t(()=>[...M[7]||(M[7]=[s("å
¬å¼",-1)])]),_:1}),e(B,{label:!1},{default:t(()=>[...M[8]||(M[8]=[s("ç§æ",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["model"]),l("div",Nd,[e(O,{onClick:_},{default:t(()=>[...M[9]||(M[9]=[s("åæ¶",-1)])]),_:1}),e(O,{type:"primary",onClick:p},{default:t(()=>[...M[10]||(M[10]=[s("ä¿å",-1)])]),_:1})])])):(n(),k("div",Rd,[l("div",Fd,[e(I,{type:y.value.is_public?"success":"info"},{default:t(()=>[s(S(y.value.is_public?"å
¬å¼":"ç§æ"),1)]),_:1},8,["type"]),l("span",Bd,S(g(y.value.created_at)),1)]),l("div",{class:"note-content",innerHTML:o(y.value.content)}
136,null,8,Pd),l("div",Hd,[y.value.is_editable?(n(),N(O,{key:0,type:"primary",onClick:m},{default:t(()=>[...M[3]||(M[3]=[s("ç¼è¾",-1)])]),_:1})):te("",!0),e(O,{type:"primary",onClick:V,ref:"printButton"},{default:t(()=>[...M[4]||(M[4]=[s("æå°",-1)])]),_:1},512),y.value.is_editable?(n(),N(O,{key:1,type:"danger",onClick:r},{default:t(()=>[...M[5]||(M[5]=[s("å é¤",-1)])]),_:1})):te("",!0)])]))]),_:1}),C.value?te("",!0):(n(),k("div",{key:0,id:"print-area",class:"print-area","data-note-title":`ç¬è®° - ${g(y.value.created_at)}`},[l("div",Wd,[M[11]||(M[11]=l("h2",null,"ç¬è®°è¯¦æ
",-1)),l("div",Kd,[l("span",{class:Ye(["print-tag",y.value.is_public?"public":"private"])},S(y.value.is_public?"å
¬å¼":"ç§æ"),3),l("span",null,S(g(y.value.created_at)),1)])]),l("div",{class:"print-content",innerHTML:o(y.value.content)},null,8,Gd)],8,jd))])}}}),Xd=Ce(Jd,[["__scopeId","data-v-b23d08f8"]]),Qd={class:"vocabulary-leaderboard"},Zd={class:"header"},ec={key:0,class:"loading"},tc={key:1,class:"leaderboard-container"},lc={class:"masked-name"},ac={key:2,class:"no-data"},oc=ge({__name:"VocabularyLeaderboard",setup(q){const c=Ie(),w=d([]),v=d(!0),y=()=>{c.go(-1)},C=u=>u===1?"rank-first":u===2?"rank-second":u===3?"rank-third":"rank-other",h=async()=>{try{v.value=!0;const u=await A.get("/api/vocabulary/leaderboard");w.value=u.data}catch(u){console.error("å è½½æè¡æ¦å¤±è´¥:",u)}finally{v.value=!1}};return be(()=>{h()}),(u,f)=>{const m=a("el-button"),_=a("el-spinner"),p=a("el-table-column"),r=a("el-table");return n(),k("div",Qd,[l("div",Zd,[f[1]||(f[1]=l("h2",null,"åè¯å¦ä¹ æè¡æ¦",-1)),e(m,{onClick:y,type:"primary",plain:""},{default:t(()=>[...f[0]||(f[0]=[s("è¿å",-1)])]),_:1})]),v.value?(n(),k("div",ec,[e(_),f[2]||(f[2]=l("p",null,"å è½½æè¡æ¦ä¸...",-1))])):w.value.length>0?(n(),k("div",tc,[e(r,{data:w.value,style:{width:"100%"},stripe:""},{default:t(()=>[e(p,{prop:"rank",label:"æå",width:"80",align:"center"},{default:t(o=>[l("span",{class:Ye(C(o.$index+1))},S(o.$index+1),3)]),_:1}),e(p,{prop:"studentName",label:"ç¨æ·å"},{default:t(o=>[l("span",lc,S(o.row.student_name),1)]),_:1}),e(p,{prop:"words_learned",label:"ææ¡åè¯æ°",align:"center"})]),_:1},8,["data"])])):(n(),k("div",ac,[...f[3]||(f[3]=[l("p",null,"ææ æè¡æ¦æ°æ®",-1)])]))])}}}),nc=Ce(oc,[["__scopeId","data-v-34cdfb3d"]]),sc={class:"leaderboard-page"},rc=ge({__name:"VocabularyLeaderboardPage",setup(q){return(c,w)=>{const v=a("el-card");return n(),k("div",sc,[e(v,null,{default:t(()=>[e(nc)]),_:1})])}}}),ic=Ce(rc,[["__scopeId","data-v-f56cf905"]]),uc={key:1,style:{"margin-top":"20px","text-align":"center"}},dc={class:"api-providers-header"},cc={key:1},pc={style:{"margin-top":"20px","text-align":"center"}},mc={class:"dialog-footer"},vc={class:"dialog-footer"},fc=ge({__name:"Profile",setup(q){const c=Ie(),w=d(null),v=d(localStorage.getItem("profile_active_tab")||"basic"),y=Ae({school:"",grade:""}),C=d(!1),h=d(),u=d([]),f=d(!1),m=d(!1),_=d(!1),p=Ae({id:0,name:"",provider:"",token:"",model:"",base_url:"",tokenLink:"",is_default:!1,model_text_to_image:"",model_vlm:""});je(()=>p.provider,F=>{F==="siliconflow"?(p.tokenLink="https://cloud.siliconflow.cn/i/Hpf6kA2O",p.base_url=p.base_url||"https://api.siliconflow.cn/v1",p.name=p.name||"æçSiliconFlowè´¦æ·"):(p.model="",p.base_url="",p.tokenLink="")});const r=d(),o=d([]),g=d([]),V=d([]),z=async()=>{var F,i,$,X,G,E;try{const oe=await A.get("/api/dictionary/models?model_sub_type=chat",{params:{token:p.token,base_url:p.base_url}});o.value=oe.data.data||[]}catch(oe){console.error("Load models error:",oe),b.error("å 载模åå表失败: "+(((i=(F=oe.response)==null?void 0:F.data)==null?void 0:i.error)||oe.message))}try{const oe=await A.get("/api/dictionary/models?model_sub_type=text-to-image",{params:{token:p.token,base_url:p.base_url}});g.value=oe.data.data||[]}catch(oe){console.error("Load text-to-image models error:",oe),b.error("å è½½ææ¬è½¬å¾ç模åå表失败: "+(((X=($=oe.response)==null?void 0:$.data)==null?void 0:X.error)||oe.message))}try{const Q=(await A.get("/api/dictionary/models",{params:{token:p.token,base_url:p.base_url}})).data.data||[];V.value=Q.filter(re=>re.id.toLowerCase().includes("vlm")||re.id.toLowerCase().includes("vision")||re.id.toLowerCase().includes("qwen2-vl")||re.id.toLowerCase().includes("llava"))}catch(oe){console.error("Load VLM models error:",oe),b.error("å è½½è§è§æ¨¡åå表失败: "+(((E=(G=oe.response)==null?void 0:G.data)==null?void 0:E.error)||oe.message))}};function M(){p.token&&p.base_url&&z()}function L(){p.token&&p.base_url&&z()}be(()=>{const F=sessionStorage.getItem("user");if(!F){c.push("/login");return}try{w.value=JSON.parse(F)}catch{b.error("ç¨æ·ä¿¡æ¯è§£æå¤±è´¥"),c.push("/login")}});function I(){w.value.role==="student"&&(y.school=w.value.school||"",y.grade=w.value.grade||"",C.value=!0)}async function O(){try{const F=await A.put("/api/user/student-info",y),i=sessionStorage.getItem("user");if(i){const $=JSON.parse(i);$.school=F.data.school,$.grade=F.data.grade,sessionStorage.setItem("user",JSON.stringify($)),w.value=$}C.value=!1,b.success("ä¿¡æ¯æ´æ°æå")}catch{b.error("ä¿¡æ¯æ´æ°å¤±è´¥")}}async function j(){f.value=!0;try{const F=await A.get("/api/user/api-providers");u.value=F.data}catch{b.error("å è½½AIæä¾å失败")}finally{f.value=!1}}function R(){_.value=!1,Object.assign(p,{id:0,name:"",provider:"",token:"",model:"",base_url:"",is_default:!1,model_text_to_image:""}),m.value=!0}function K(F){_.value=!0,Object.assign(p,F),m.value=!0}function H(F){et.confirm(`ç¡®å®è¦å é¤AIæä¾å "${F.name}
136" åï¼`,"确认å é¤",{confirmButtonText:"ç¡®å®",cancelButtonText:"åæ¶",type:"warning"}).then(async()=>{try{await A.delete(`/api/user/api-providers/${F.id}`),b.success("å 餿å"),j()}catch{b.error("å é¤å¤±è´¥")}}).catch(()=>{})}async function x(){r.value&&await r.value.validate(async F=>{if(F)try{_.value?(await A.put(`/api/user/api-providers/${p.id}`,p),b.success("æ´æ°æå")):(await A.post("/api/user/api-providers",p),b.success("æ·»å æå")),m.value=!1,j()}catch{b.error(_.value?"æ´æ°å¤±è´¥":"æ·»å 失败")}})}function B(F){return parseFloat(F.toFixed(2))}function D(){c.back()}const U=async()=>{var i;if(!((i=w.value)!=null&&i.invite_code)){b.error("é请ç ä¸åå¨");return}const F=`${window.location.origin}/register?inviteCode=${w.value.invite_code}`;try{await navigator.clipboard.writeText(F),b.success("éè¯·é¾æ¥å·²å¤å¶å°åªè´´æ¿")}catch{const X=document.createElement("textarea");X.value=F,document.body.appendChild(X),X.select(),document.execCommand("copy"),document.body.removeChild(X),b.success("éè¯·é¾æ¥å·²å¤å¶å°åªè´´æ¿")}};return je(v,F=>{localStorage.setItem("profile_active_tab",F),F==="apiProviders"&&u.value.length===0&&j()}),(F,i)=>{const $=a("el-descriptions-item"),X=a("el-tag"),G=a("el-descriptions"),E=a("el-button"),oe=a("el-tab-pane"),Q=a("el-table-column"),re=a("el-table"),me=a("el-card"),ie=a("el-tabs"),ce=a("el-input"),ke=a("el-form-item"),De=a("el-option"),ve=a("el-select"),W=a("el-form"),Z=a("el-dialog"),Ve=a("el-link"),xe=a("el-switch"),ae=a("el-main"),ee=Ee("loading");return n(),N(ae,{class:"main-content"},{default:t(()=>[e(me,null,{header:t(()=>[...i[15]||(i[15]=[l("div",{class:"profile-header"},[l("h2",null,"个人主页")],-1)])]),default:t(()=>[e(ie,{modelValue:v.value,"onUpdate:modelValue":i[0]||(i[0]=Y=>v.value=Y),class:"profile-tabs"},{default:t(()=>[e(oe,{label:"åºæ¬ä¿¡æ¯",name:"basic"},{default:t(()=>[w.value?(n(),N(G,{key:0,column:1,border:""},{default:t(()=>[e($,{label:"å§å"},{default:t(()=>[s(S(w.value.name),1)]),_:1}),e($,{label:"é®ç®±"},{default:t(()=>[s(S(w.value.email),1)]),_:1}),e($,{label:"è§è²"},{default:t(()=>[s(S(w.value.role),1)]),_:1}),e($,{label:"æçé请ç "},{default:t(()=>[e(X,{type:"success",size:"large",onClick:U,style:{cursor:"pointer"}},{default:t(()=>[s(S(w.value.invite_code),1)]),_:1})]),_:1}),w.value.registered_by_invite_code?(n(),N($,{key:0,label:"注åé请ç "},{default:t(()=>[s(S(w.value.registered_by_invite_code),1)]),_:1})):te("",!0),e($,{label:"è´¦æ·ä½é¢"},{default:t(()=>[s(S(B(w.value.balance))+" å
",1)]),_:1}),w.value.role==="student"?(n(),N($,{key:1,label:"妿 ¡"},{default:t(()=>[s(S(w.value.school||"æªå¡«å"),1)]),_:1})):te("",!0),w.value.role==="student"?(n(),N($,{key:2,label:"年级"},{default:t(()=>[s(S(w.value.grade||"æªå¡«å"),1)]),_:1})):te("",!0)]),_:1})):te("",!0),w.value&&w.value.role==="student"?(n(),k("div",uc,[e(E,{type:"primary",onClick:I},{default:t(()=>[...i[16]||(i[16]=[s("ç¼è¾å¦æ ¡å¹´çº§ä¿¡æ¯",-1)])]),_:1})])):te("",!0)]),_:1}),e(oe,{label:"AIæä¾å",name:"apiProviders"},{default:t(()=>[e(me,{class:"api-providers-card"},{header:t(()=>[l("div",dc,[e(E,{type:"primary",size:"small",onClick:R},{default:t(()=>[...i[17]||(i[17]=[s("æ·»å æä¾å",-1)])]),_:1})])]),default:t(()=>[Me((n(),N(re,{data:u.value,style:{width:"100%"},"empty-text":"ææ AIæä¾å"},{default:t(()=>[e(Q,{prop:"name",label:"åç§°"}),e(Q,{prop:"provider",label:"æä¾å"}),e(Q,{prop:"model",label:"é»è®¤æ¨¡å"}),e(Q,{prop:"model_text_to_image",label:"ææ¬è½¬å¾ç模å"}),e(Q,{prop:"base_url",label:"åºç¡URL"}),e(Q,{label:"é»è®¤"},{default:t(Y=>[Y.row.is_default?(n(),N(X,{key:0,type:"success"},{default:t(()=>[...i[18]||(i[18]=[s("æ¯",-1)])]),_:1})):(n(),k("span",cc,"-"))]),_:1}),e(Q,{label:"æä½",width:"150"},{default:t(Y=>[e(E,{size:"small",onClick:P=>K(Y.row)},{default:t(()=>[...i[19]||(i[19]=[s("ç¼è¾",-1)])]),_:1},8,["onClick"]),e(E,{size:"small",type:"danger",onClick:P=>H(Y.row)},{default:t(()=>[...i[20]||(i[20]=[s("å é¤",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[ee,f.value]])]),_:1})]),_:1})]),_:1},8,["modelValue"]),l("div",pc,[e(E,{onClick:D},{default:t(()=>[...i[21]||(i[21]=[s("è¿å",-1)])]),_:1})])]),_:1}),e(Z,{modelValue:C.value,"onUpdate:modelValue":i[4]||(i[4]=Y=>C.value=Y),title:"ç¼è¾å¦æ ¡å¹´çº§ä¿¡æ¯",width:"500px"},{footer:t(()=>[l("span",mc,[e(E,{onClick:i[3]||(i[3]=Y=>C.value=!1)},{default:t(()=>[...i[22]||(i[22]=[s("åæ¶",-1)])]),_:1}),e(E,{type:"primary",onClick:O},{default:t(()=>[...i[23]||(i[23]=[s("ä¿å",-1)])]),_:1})])]),default:t(()=>[e(W,{model:y,"label-width":"100px",ref_key:"studentFormRef",ref:h},{default:t(()=>[e(ke,{label:"妿 ¡"},{default:t(()=>[e(ce,{modelValue:y.school,"onUpdate:modelValue":i[1]||(i[1]=Y=>y.school=Y),placeholder:"请è¾å
¥å¦æ ¡åç§°"},null,8,["modelValue"])]),_:1}),e(ke,{label:"年级"},{default:t(()=>[e(ve,{modelValue:y.grade,"onUpdate:modelValue":i[2]||(i[2]=Y=>y.grade=Y),placeholder:"è¯·éæ©å¹´çº§",style:{width:"100%"}},{default:t(()=>[(n(!0),k(ue,null,fe(se(rt),Y=>(n(),N(De,{label:Y,value:Y,key:Y},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue"]),e(Z,{modelValue:m.value,"onUpdate:modelValue":i[14]||(i[14]=Y=>m.value=Y),title:(_.value?"ç¼è¾":"æ·»å ")+"AIæä¾å",width:"600px"},{footer:t(()=>[l("span",vc,[e(E,{onClick:i[13]||(i[13]=Y=>m.value=!1)},{default:t(()=>[...i[25]||(i[25]=[s("åæ¶",-1)])]),_:1}),e(E,{type:"primary",onClick:x},{default:t(()=>[...i[26]||(i[26]=[s("ä¿å",-1)])]),_:1})])]),default:t(()=>[e(W,{model:p,"label-width":"auto",ref_key:"providerFormRef",ref:r},{default:t(()=>[e(ke,{label:"åç§°",prop:"name",rules:[{required:!0,message:"请è¾å
¥åç§°",trigger:"blur"}]},{default:t(()=>[e(ce,{modelValue:p.name,"onUpdate:modelValue":i[5]||(i[5]=Y=>
136p.name=Y),placeholder:"ä¾å¦ï¼æçOpenAIè´¦æ·"},null,8,["modelValue"])]),_:1}),e(ke,{label:"æä¾å",prop:"provider",rules:[{required:!0,message:"è¯·éæ©æä¾å",trigger:"change"}]},{default:t(()=>[e(ve,{modelValue:p.provider,"onUpdate:modelValue":i[6]||(i[6]=Y=>p.provider=Y),placeholder:"è¯·éæ©æä¾å",style:{width:"100%"}},{default:t(()=>[e(De,{label:"SiliconFlow",value:"siliconflow"}),e(De,{label:"èªå®ä¹",value:"custom"})]),_:1},8,["modelValue"])]),_:1}),e(ke,{label:"APIå¯é¥",prop:"token",rules:[{required:!0,message:"请è¾å ¥APIå¯é¥",trigger:"blur"}]},{default:t(()=>[e(ce,{modelValue:p.token,"onUpdate:modelValue":i[7]||(i[7]=Y=>p.token=Y),type:"password",placeholder:"请è¾å ¥APIå¯é¥","show-password":"",onBlur:M},null,8,["modelValue"]),p.tokenLink?(n(),N(Ve,{key:0,class:"ml-2",href:p.tokenLink,target:"_blank"},{default:t(()=>[...i[24]||(i[24]=[s(" è·åAPIå¯é¥ ",-1)])]),_:1},8,["href"])):te("",!0)]),_:1}),e(ke,{label:"åºç¡URL",prop:"base_url"},{default:t(()=>[e(ce,{modelValue:p.base_url,"onUpdate:modelValue":i[8]||(i[8]=Y=>p.base_url=Y),placeholder:"ä¾å¦ï¼https://api.siliconflow.cn/v1",onBlur:L},null,8,["modelValue"])]),_:1}),e(ke,{label:"é»è®¤æ¨¡å",prop:"model"},{default:t(()=>[e(ve,{modelValue:p.model,"onUpdate:modelValue":i[9]||(i[9]=Y=>p.model=Y),placeholder:"è¯·éæ©é»è®¤æ¨¡å",style:{width:"100%"}},{default:t(()=>[(n(!0),k(ue,null,fe(o.value,Y=>(n(),N(De,{key:Y.id,label:Y.id,value:Y.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(ke,{label:"ææ¬è½¬å¾ç模å",prop:"model_text_to_image"},{default:t(()=>[e(ve,{modelValue:p.model_text_to_image,"onUpdate:modelValue":i[10]||(i[10]=Y=>p.model_text_to_image=Y),placeholder:"è¯·éæ©é»è®¤æ¨¡å",style:{width:"100%"}},{default:t(()=>[(n(!0),k(ue,null,fe(g.value,Y=>(n(),N(De,{key:Y.id,label:Y.id,value:Y.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(ke,{label:"è§è§è¯å«æ¨¡å(VLM)",prop:"model_vlm"},{default:t(()=>[e(ve,{modelValue:p.model_vlm,"onUpdate:modelValue":i[11]||(i[11]=Y=>p.model_vlm=Y),placeholder:"è¯·éæ©VLM模å",style:{width:"100%"}},{default:t(()=>[(n(!0),k(ue,null,fe(V.value,Y=>(n(),N(De,{key:Y.id,label:Y.id,value:Y.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(ke,{label:"设为é»è®¤"},{default:t(()=>[e(xe,{modelValue:p.is_default,"onUpdate:modelValue":i[12]||(i[12]=Y=>p.is_default=Y)},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])]),_:1})}}}),_c=Ce(fc,[["__scopeId","data-v-9b33d142"]]),yc=q=>{dt(()=>{if(q){const c=q.innerHTML,w=document.body.innerHTML;document.body.innerHTML=` 137 <html> 138 <head> 139 <title>éé¢è¯å·</title> 140 <style> 141 body { font-family: Arial, sans-serif; font-size: 14px; } 142 .options p { margin: 5px 0; } 143 .mistake-details p { margin: 8px 0; } 144 @media print { 145 body { margin: 15px; } 146 .print-area { max-width: 100%; } 147 } 148 </style> 149 </head> 150 <body> 151 ${c} 152 </body> 153 </html> 154 `,window.print(),document.body.innerHTML=w,location.reload()}})},gc={class:"search-section"},bc={class:"card-header"},wc={class:"pagination-container"},kc=["innerHTML"],hc={key:0},$c={class:"options"},Vc=["innerHTML"],Cc=["innerHTML"],xc=["innerHTML"],Dc=["innerHTML"],Sc={key:0},Mc={key:0},Uc={class:"dialog-footer"},Ic=ge({__name:"MistakeBrowser",setup(q){const c=d(!1),w=d(!1),v=d(null),y=d([]),C=Ae({keyword:"",subject:"",question_type:"",status:"",grade:""}),h=()=>{C.keyword="",C.subject="",C.question_type="",C.status="",C.grade="",_()},u=d({data:[],total:0,page_size:0}),f=()=>{if(y.value.length===0){b.warning("请å éæ©è¦é¢è§çéé¢");return}c.value=!0},m=o=>{y.value=o},_=async()=>{const o=await A.get("/api/admin/mistakes",{params:{...C,page:u.value.page,page_size:u.value.page_size}});u.value=o.data,console.log(u.value)},p=o=>{u.value.page_size=o,_()},r=o=>{u.value.page=o,_()};return be(()=>{_()}),(o,g)=>{const V=a("el-input"),z=a("el-col"),M=a("el-option"),L=a("el-select"),I=a("el-button"),O=a("el-row"),j=a("el-table-column"),R=a("el-table"),K=a("el-pagination"),H=a("el-card"),x=a("el-switch"),B=a("el-dialog");return n(),k(ue,null,[l("div",gc,[e(O,{gutter:20},{default:t(()=>[e(z,{span:4,xs:24},{default:t(()=>[e(V,{modelValue:C.keyword,"onUpdate:modelValue":g[0]||(g[0]=D=>C.keyword=D),placeholder:"ç¥è¯ç¹",clearable:"",onKeyup:Je(_,["enter"])},null,8,["modelValue"])]),_:1}),e(z,{span:4,xs:24},{default:t(()=>[e(L,{modelValue:C.grade,"onUpdate:modelValue":g[1]||(g[1]=D=>C.grade=D),placeholder:"年级",clearable:"",style:{width:"100%"},onChange:_},{default:t(()=>[(n(!0),k(ue,null,fe(se(rt),D=>(n(),N(M,{label:D,value:D,key:D},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(z,{span:4,xs:24},{default:t(()=>[e(L,{modelValue:C.subject,"onUpdate:modelValue":g[2]||(g[2]=D=>C.subject=D),placeholder:"å¦ç§",clearable:"",style:{width:"100%"},onChange:_},{default:t(()=>[(n(!0),k(ue,null,fe(se($t),D=>(n(),N(M,{label:D,value:D,key:D},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(z,{span:4,xs:24},{default:t(()=>[e(L,{modelValue:C.question_type,"onUpdate:modelValue":g[3]||(g[3]=D=>C.question_type=D),placeholder:"é¢å",clearable:"",style:{width:"100%"},onChange:_},{default:t(()=>[(n(!0),k(ue,null,fe(se(It),D=>(n(),N(M,{label:D,value:D,key:D},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(z,{span:8,xs:24},{default:t(()=>[e(I,{type:"primary",onClick:_},{default:t(()=>[...g[10]||(g[10]=[s("æç´¢",-1)])]),_:1}),e(I,{onClick:h},{default:t(()=>
154[...g[11]||(g[11]=[s("éç½®",-1)])]),_:1})]),_:1})]),_:1})]),e(H,null,Ot({default:t(()=>[e(R,{data:u.value.data,onSelectionChange:m,"show-overflow-tooltip":""},{default:t(()=>[e(j,{type:"selection"}),e(j,{prop:"topic",label:"ç¥è¯ç¹"}),e(j,{prop:"grade",label:"年级"}),e(j,{prop:"subject",label:"å¦ç§"}),e(j,{prop:"question_type",label:"é¢ç®ç±»å"}),e(j,{prop:"stem",label:"é¢å¹²"})]),_:1},8,["data"]),l("div",wc,[e(K,{"current-page":u.value.page,"onUpdate:currentPage":g[4]||(g[4]=D=>u.value.page=D),"page-size":u.value.page_size,"onUpdate:pageSize":g[5]||(g[5]=D=>u.value.page_size=D),"page-sizes":[10,20,50,100],total:u.value.total,layout:"total, sizes, prev, pager, next, jumper",onSizeChange:p,onCurrentChange:r},null,8,["current-page","page-size","total"])])]),_:2},[y.value.length!==0?{name:"header",fn:t(()=>[l("div",bc,[e(I,{type:"success",size:"small",onClick:f},{default:t(()=>[...g[12]||(g[12]=[s(" çæè¯å· ",-1)])]),_:1})])]),key:"0"}:void 0]),1024),e(B,{modelValue:c.value,"onUpdate:modelValue":g[9]||(g[9]=D=>c.value=D),title:"è¯å·é¢è§",width:"80%",class:"preview-dialog"},{header:t(()=>[e(x,{modelValue:w.value,"onUpdate:modelValue":g[6]||(g[6]=D=>w.value=D),"active-text":"æ¾ç¤ºçæ¡","inactive-text":"éèçæ¡"},null,8,["modelValue"])]),footer:t(()=>[l("span",Uc,[e(I,{onClick:g[7]||(g[7]=D=>c.value=!1)},{default:t(()=>[...g[18]||(g[18]=[s("å
³é",-1)])]),_:1}),e(I,{type:"primary",onClick:g[8]||(g[8]=D=>se(yc)(v.value))},{default:t(()=>[...g[19]||(g[19]=[s("æå°è¯å·",-1)])]),_:1})])]),default:t(()=>[l("div",{class:"print-area",ref_key:"printAreaRef",ref:v},[g[17]||(g[17]=l("h2",{style:{"text-align":"center"}},"éé¢è¯å·",-1)),(n(!0),k(ue,null,fe(y.value,(D,U)=>(n(),k("div",{class:"mistake-item",key:D.id},[l("div",null,[s(S(U+1)+". ("+S(D.subject)+") "+S(D.question_type)+" - ",1),l("span",{innerHTML:se(Qe)(D.stem)},null,8,kc)]),D.question_type==="åéé¢"?(n(),k("div",hc,[l("table",$c,[l("tbody",null,[l("tr",null,[l("td",null,[g[13]||(g[13]=s("A. ",-1)),l("span",{innerHTML:se(Qe)(D.option_a)},null,8,Vc)]),l("td",null,[g[14]||(g[14]=s("B. ",-1)),l("span",{innerHTML:se(Qe)(D.option_b)},null,8,Cc)])]),l("tr",null,[l("td",null,[g[15]||(g[15]=s("C. ",-1)),l("span",{innerHTML:se(Qe)(D.option_c)},null,8,xc)]),l("td",null,[g[16]||(g[16]=s("D. ",-1)),l("span",{innerHTML:se(Qe)(D.option_d)},null,8,Dc)])])])])])):te("",!0)]))),128)),w.value?(n(),k("div",Sc,[(n(!0),k(ue,null,fe(y.value,(D,U)=>(n(),k("span",{class:"answer",key:D.id},[D.question_type==="åéé¢"?(n(),k("span",Mc,S(D.answer),1)):te("",!0)]))),128))])):te("",!0)],512)]),_:1},8,["modelValue"])],64)}}}),gt=dl({history:cl(),routes:[{path:"/",component:ql},{path:"/login",component:Ql},{path:"/register",component:ma},{path:"/reset-password",component:ka},{path:"/forgot-password",component:Ma},{path:"/student",component:Ur},{path:"/teacher",component:oi},{path:"/teacher/:id/detail",name:"TeacherDetail",component:Mu,props:!0},{path:"/institution",component:Gu},{path:"/institution/:institutionId/showcase",name:"InstitutionShowcase",component:Ld,props:!0},{path:"/note/:id",name:"NoteDetail",component:Xd,props:!0},{path:"/vocabulary-leaderboard",component:ic},{path:"/profile",component:_c},{path:"/calendar",component:zt},{path:"/ai-dictionary",component:yt},{path:"/admin",component:si,redirect:"/admin/users",children:[{path:"users",component:ii},{path:"users/:id",name:"AdminUserDetail",component:ci,props:!0},{path:"courses",component:pi},{path:"stats",component:mi},{path:"students",component:fi},{path:"hour_records",component:bi},{path:"google_analytics",component:hi},{path:"advertisements",component:Mi},{path:"meta_tags",component:Yi},{path:"vocabulary",component:vu},{path:"mcp-servers",component:xu},{path:"system",component:tu},{path:"mistake_browser",component:Ic}]}]});gt.beforeEach((q,c,w)=>{q.path==="/student"&&q.query.tab==="dictation"||q.path==="/reset-password"||q.path==="/forgot-password"||q.path.endsWith("/showcase")?w():q.path!=="/login"&&q.path!=="/register"&&q.path!=="/vocabulary-leaderboard"&&q.path!=="/"&&!sessionStorage.getItem("token")?w("/login"):w()});const A=Ll.create({baseURL:"/",timeout:2e4});A.interceptors.request.use(q=>{const c=sessionStorage.getItem("token");return c&&(q.headers={...q.headers||{},Authorization:`Bearer ${c}`}),q});A.interceptors.response.use(q=>q,q=>(q.response&&q.response.status===403&&(b.error("æ æé访é®è¯¥èµæºï¼è¯·éæ°ç»å½"),sessionStorage.removeItem("token"),sessionStorage.removeItem("user"),gt.push("/login")),Promise.reject(q)));async function Tc(){try{const q=await A.get("/api/admin/google-analytics");return q.data.measurement_id?q.data:null}catch(q){return console.error("Failed to fetch Google Analytics configuration:",q),null}}const Ac=ge({__name:"GoogleAnalytics",setup(q){let c=!1;be(async()=>
154{if(!c)try{const v=await Tc();v&&v.measurement_id&&(w(v.measurement_id),c=!0)}catch(v){console.error("Failed to initialize Google Analytics:",v)}});function w(v){const y=document.createElement("script");y.async=!0,y.src=`https://www.googletagmanager.com/gtag/js?id=${v}`,document.head.appendChild(y);const C=document.createElement("script");C.text=` 155 window.dataLayer = window.dataLayer || []; 156 function gtag(){dataLayer.push(arguments);} 157 gtag('js', new Date()); 158 gtag('config', '${v}'); 159 `,document.head.appendChild(C)}return(v,y)=>te("",!0)}}),zc={key:0,class:"advertisements-container"},Lc={key:0,class:"ad-header"},Yc={key:1,class:"ad-content"},Ec={key:0,class:"ad-image"},Rc=["src","alt"],Fc=["innerHTML"],Bc={key:1,class:"ad-link"},Pc=ge({__name:"Advertisement",setup(q){const c=d([]),w=d(window.innerWidth<=768),v=d(new Set),y=()=>{w.value=window.innerWidth<=768};be(async()=>{window.addEventListener("resize",y),await C()}),ct(()=>{window.removeEventListener("resize",y)});const C=async()=>{try{const f=await A.get("/api/advertisements");c.value=f.data.filter(m=>!v.value.has(m.id))}catch(f){console.error("Failed to load advertisements:",f)}},h=f=>{v.value.add(f),c.value=c.value.filter(m=>m.id!==f)},u=f=>{window.open(f,"_blank")};return setInterval(C,5*60*1e3),(f,m)=>{const _=a("el-icon"),p=a("el-button");return c.value.length>0?(n(),k("div",zc,[(n(!0),k(ue,null,fe(c.value,r=>(n(),k("div",{key:r.id,class:Ye(["advertisement-card",{mobile:w.value}])},[r.content.startsWith("<script")?te("",!0):(n(),k("div",Lc,[l("h3",null,S(r.title),1),e(p,{class:"close-btn",type:"danger",size:"small",onClick:o=>h(r.id),circle:""},{default:t(()=>[e(_,null,{default:t(()=>[e(se(Il))]),_:1})]),_:1},8,["onClick"])])),r.content.startsWith("<script")?te("",!0):(n(),k("div",Yc,[r.image_url?(n(),k("div",Ec,[l("img",{src:r.image_url,alt:r.title},null,8,Rc)])):te("",!0),l("div",{class:"ad-text",innerHTML:r.content},null,8,Fc),r.link_url?(n(),k("div",Bc,[e(p,{type:"primary",onClick:o=>u(r.link_url)},{default:t(()=>[...m[0]||(m[0]=[s("æ¥ç详æ ",-1)])]),_:1},8,["onClick"])])):te("",!0)]))],2))),128))])):te("",!0)}}}),Hc=Ce(Pc,[["__scopeId","data-v-092b55b5"]]),Oc={class:"ai-assistant"},qc={key:0,class:"no-provider-state"},Nc={class:"setup-hints"},jc={key:0,class:"provider-section"},Wc={key:0,class:"model-info"},Kc={class:"message-content"},Gc={key:0,class:"message-avatar"},Jc={class:"message-text"},Xc={key:0,class:"command-result"},Qc={class:"command-details"},Zc={key:1,class:"clarification-result"},ep={class:"clarification-details"},tp={key:2,class:"text-content"},lp={key:1,class:"message-avatar user"},ap={key:0,class:"message assistant"},op={class:"message-content"},np={class:"message-avatar"},sp={class:"quick-actions"},rp={class:"input-area"},ip={class:"input-actions"},up=ge({__name:"AiAssistant",props:{visible:{type:Boolean}},emits:["update:visible"],setup(q,{emit:c}){const w=Ie(),v=q,y=c,C=d(v.visible),h=d(),u=d([]),f=d([]),m=d(""),_=d(!1),p=d(!1),r=d(),o=d(!1),g=d("600px"),V=d(!1),z=d(""),M=Le(()=>h.value?u.value.find(D=>D.id===h.value):null),L=[{label:"æ·»å æç»©",prompt:"æ°å¦85å"},{label:"æ¥çæç»©",prompt:"æ¥çä»å¤©çæç»©"},{label:"æ·»å æ¥ç¨",prompt:"æå¤©ä¸å2ç¹å¼ä¼"},{label:"æ¥çæ¥ç¨",prompt:"æ¥çä»å¤©çæ¥ç¨"}];je(()=>v.visible,D=>{C.value=D}),je(C,D=>{y("update:visible",D),D?(I(),window.addEventListener("resize",I)):window.removeEventListener("resize",I)});const I=()=>{o.value=window.innerWidth<=768,o.value?V.value=!0:(V.value=!1,g.value="600px")},O=async()=>{p.value=!0;try{const D=await A.get("/api/user/api-providers");u.value=D.data;const U=D.data.find(F=>F.is_default);U?h.value=U.id:D.data.length>0&&(h.value=D.data[0].id)}catch(D){console.error("Failed to load API providers:",D)}finally{p.value=!1}},j=()=>{u.value.length===0&&O(),f.value.length===0&&f.value.push({role:"assistant",content:`æ¨å¥½ï¼ææ¯ AI æºè½å©æï¼å¯ä»¥å¸®æ¨ï¼ 160 161⢠添å /ä¿®æ¹/å é¤èè¯æç»© 162⢠æ¥è¯¢èè¯æç»© 163⢠添å /æ¥è¯¢æ¥ç¨å®æ 164â¢ å ¶ä»ç³»ç»æä½ 165 166请ç¨èªç¶è¯è¨åè¯ææ¨éè¦ä»ä¹å¸®å©ï¼`})},R=()=>{dt(()=>{r.value&&(r.value.scrollTop=r.value.scrollHeight)})},K=async()=>{var U,F;const D=m.value.trim();if(!(!D||!h.value)){f.value.push({role:"user",content:D}),m.value="",R(),_.value=!0;try{const $=(await A.post("/api/ai/chat",{provider_id:h.value,message:D,history:f.value.slice(-10),conversation_id:z.value})).data;$.conversation_id&&(z.value=$.conversation_id),$.type==="command"?f.value.push({role:"assistant",type:"command",content:$.message||"æä½å·²å®æ"}):$.type==="clarification"?f.value.push({role:"assistant",type:"clarification",content:$.message||"请确认æ¨çéæ©"}):f.value.push({role:"assistant",content:$.message||$.response||"æ±æï¼ææ²¡æçè§£æ¨ç请æ±ã"})}catch(i){console.error("AI chat error:",i),b.error(((F=(U=i.response)==null?void 0:U.data)==null?void 0:F.error)||"AI å©æææ¶æ æ³ååºï¼
166请ç¨ååè¯"),f.value.push({role:"assistant",content:"æ±æï¼åçäºé误ï¼è¯·ç¨ååè¯ã"})}finally{_.value=!1,R()}}},H=D=>{m.value=D.prompt,K()},x=()=>{},B=()=>{C.value=!1,w.push("/profile#ai-provider")};return(D,U)=>{const F=a("el-button"),i=a("el-result"),$=a("el-alert"),X=a("el-option"),G=a("el-select"),E=a("el-tag"),oe=a("avatar"),Q=a("el-icon"),re=a("user"),me=a("el-input"),ie=a("el-dialog");return n(),N(ie,{modelValue:C.value,"onUpdate:modelValue":U[3]||(U[3]=ce=>C.value=ce),title:"AI æºè½å©æ",width:g.value,"close-on-click-modal":!1,onOpen:j,fullscreen:V.value,class:"ai-assistant-dialog"},{default:t(()=>[l("div",Oc,[!p.value&&u.value.length===0?(n(),k("div",qc,[e(i,{icon:"warning",title:"æªé
ç½® AI æä¾å","sub-title":"æ¨éè¦å
é
ç½® AI æä¾åæè½ä½¿ç¨æºè½å©æåè½"},{extra:t(()=>[e(F,{type:"primary",onClick:B},{default:t(()=>[...U[4]||(U[4]=[s("åå¾é
ç½®",-1)])]),_:1}),e(F,{onClick:U[0]||(U[0]=ce=>C.value=!1)},{default:t(()=>[...U[5]||(U[5]=[s("åæ¶",-1)])]),_:1})]),_:1}),l("div",Nc,[U[7]||(U[7]=l("h4",null,"é
ç½®æ¥éª¤ï¼",-1)),U[8]||(U[8]=l("ol",null,[l("li",null,'ç¹å»ä¸æ¹"åå¾é
ç½®"æé®è¿å
¥ä¸ªäººä¸»é¡µ'),l("li",null,'å¨"API æä¾å"é¨åæ·»å æ¨ç AI æå¡é
ç½®'),l("li",null,"æ¯æ OpenAIãSiliconFlow çå¤ç§ AI æå¡"),l("li",null,"é
ç½®å®æåå³å¯ä½¿ç¨æºè½å©æ")],-1)),e($,{type:"info",closable:!1,"show-icon":""},{title:t(()=>[...U[6]||(U[6]=[l("div",{style:{"font-size":"13px"}},[s(" æ¨å¯ä»¥ä½¿ç¨ä»¥ä¸æå¡ï¼"),l("br"),s(" ⢠"),l("strong",null,"OpenAI"),s(" - æ¯æ GPT-4ãGPT-3.5 çæ¨¡å"),l("br"),s(" ⢠"),l("strong",null,"SiliconFlow"),s(" - å½å
访é®å好ç AI æå¡"),l("br"),s(" ⢠å
¶ä»å
¼å®¹ OpenAI API çæå¡ ")],-1)])]),_:1})])])):(n(),k(ue,{key:1},[u.value.length>0?(n(),k("div",jc,[e(G,{modelValue:h.value,"onUpdate:modelValue":U[1]||(U[1]=ce=>h.value=ce),placeholder:"éæ© AI æä¾å",onChange:x,size:"small",style:{width:"200px"}},{default:t(()=>[(n(!0),k(ue,null,fe(u.value,ce=>(n(),N(X,{key:ce.id,label:ce.name,value:ce.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),M.value?(n(),k("div",Wc,[e(E,{size:"small",type:"info"},{default:t(()=>[s(S(M.value.model||"é»è®¤æ¨¡å"),1)]),_:1})])):te("",!0)])):te("",!0),l("div",{class:"chat-container",ref_key:"chatContainer",ref:r},[(n(!0),k(ue,null,fe(f.value,(ce,ke)=>(n(),k("div",{key:ke,class:Ye(["message",ce.role])},[l("div",Kc,[ce.role==="assistant"?(n(),k("div",Gc,[e(Q,null,{default:t(()=>[e(oe)]),_:1})])):te("",!0),l("div",Jc,[ce.type==="command"?(n(),k("div",Xc,[e(E,{type:"success",size:"small"},{default:t(()=>[...U[9]||(U[9]=[s("å·²æ§è¡",-1)])]),_:1}),l("div",Qc,S(ce.content),1)])):ce.type==="clarification"?(n(),k("div",Zc,[e(E,{type:"warning",size:"small"},{default:t(()=>[...U[10]||(U[10]=[s("éè¦ç¡®è®¤",-1)])]),_:1}),l("div",ep,S(ce.content),1)])):(n(),k("div",tp,S(ce.content),1))]),ce.role==="user"?(n(),k("div",lp,[e(Q,null,{default:t(()=>[e(re)]),_:1})])):te("",!0)])],2))),128)),_.value?(n(),k("div",ap,[l("div",op,[l("div",np,[e(Q,{class:"is-loading"},{default:t(()=>[e(se(_))]),_:1})]),U[11]||(U[11]=l("div",{class:"message-text"},[l("div",{class:"typing-indicator"},[l("span"),l("span"),l("span")])],-1))])])):te("",!0)],512),l("div",sp,[(n(),k(ue,null,fe(L,ce=>e(E,{key:ce.label,onClick:ke=>H(ce),class:"quick-action-tag",effect:"plain",size:"small"},{default:t(()=>[s(S(ce.label),1)]),_:2},1032,["onClick"])),64))]),l("div",rp,[e(me,{modelValue:m.value,"onUpdate:modelValue":U[2]||(U[2]=ce=>m.value=ce),type:"textarea",rows:2,placeholder:"ç¨èªç¶è¯è¨æè¿°æ¨çéæ±ï¼ä¾å¦ï¼'æ·»å ä¸åºæ°å¦èè¯ï¼å¾å85å'...",onKeydown:Je(Oe(K,["ctrl"]),["enter"]),disabled:_.value||!h.value},null,8,["modelValue","onKeydown","disabled"]),l("div",ip,[U[13]||(U[13]=l("span",{class:"hint"},"Ctrl + Enter åé",-1)),e(F,{type:"primary",onClick:K,loading:_.value,disabled:!m.value.trim()||!h.value,size:"small"},{default:t(()=>[...U[12]||(U[12]=[s(" åé ",-1)])]),_:1},8,["loading","disabled"])])])],64))])]),_:1},8,["modelValue","width","fullscreen"])}}}),dp=Ce(up,[["__scopeId","data-v-e7dec39b"]]),cp={id:"app"},pp={key:0,class:"user-info"},mp={class:"user-name"},vp=ge({__name:"App",setup(q){const c=Ie(),w=d(null),v=d(!1),y=()=>{const u=sessionStorage.getItem("token"),f=sessionStorage.getItem("user"),m=window.location.href;if(!(m.endsWith("/student?tab=dictation")||m.indexOf("/reset-password")!=-1||m.endsWith("/showcase")||window.location.pathname==="/"||window.location.pathname==="/register")){if(!u||!f){c.push("/login");return}try{w.value=JSON.parse(f)}catch{b.error("ç¨æ·ä¿¡æ¯è§£æå¤±è´¥"),c.push("/login")}}};be(()=>y()),window.addEventListener("loginSuccess",()=>y());function C(){sessionStorage.removeItem("token"),sessionStorage.removeItem("user"),c.push("/")}function h(u){u==="profile"?c.push("/profile"):u==="logout"?C():u==="ai-assistant"&&(v.value=!0)}return(u,f)=>{const m=a("el-icon"),_=a("el-dropdown-item"),p=a("el-dropdown-menu"),r=a("el-dropdown"),o=a("el-button"),g=a("el-header"),V=a("router-view"),z=
166a("el-main"),M=a("el-container");return n(),k("div",cp,[e(Ac),e(Hc),u.$route.path!=="/login"&&u.$route.path!=="/"?(n(),N(M,{key:0,class:"layout-container"},{default:t(()=>[e(g,{class:"header"},{default:t(()=>[f[5]||(f[5]=l("div",{class:"logo"},"弿¾è¯¾ç¨ç³»ç»",-1)),w.value?(n(),k("div",pp,[e(r,{onCommand:h},{dropdown:t(()=>[e(p,null,{default:t(()=>[e(_,{command:"ai-assistant"},{default:t(()=>[e(m,null,{default:t(()=>[e(se(Tl))]),_:1}),f[1]||(f[1]=l("span",null,"AI æºè½å©æ",-1))]),_:1}),e(_,{command:"profile"},{default:t(()=>[e(m,null,{default:t(()=>[e(se(w))]),_:1}),f[2]||(f[2]=l("span",null,"个人主页",-1))]),_:1}),e(_,{command:"logout",divided:""},{default:t(()=>[e(m,null,{default:t(()=>[e(se(Al))]),_:1}),f[3]||(f[3]=l("span",null,"éåº",-1))]),_:1})]),_:1})]),default:t(()=>[l("span",mp,[s(S(w.value.name)+" ("+S(w.value.role)+") ",1),e(m,{class:"el-icon--right"},{default:t(()=>[e(se(Wt))]),_:1})])]),_:1})])):(n(),N(o,{key:1,onClick:C},{default:t(()=>[...f[4]||(f[4]=[s("é¦é¡µ",-1)])]),_:1}))]),_:1}),e(z,{class:"main"},{default:t(()=>[e(V)]),_:1})]),_:1})):(n(),N(V,{key:1})),e(dp,{visible:v.value,"onUpdate:visible":f[0]||(f[0]=L=>v.value=L)},null,8,["visible"])])}}});de.extend(pt);de.extend(xt);const Dt=ul(vp);Dt.use(Yl);for(const[q,c]of Object.entries(zl))Dt.component(q,c);Dt.use(gt);Dt.mount("#app");
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.