import{c as T,r as k,_ as E,q as R,V as F,x as n,y as o,z as e,L as $,R as v,J as C,P as g,C as M,Y as S,O as y,T as q,K as _,aq as U,Q as N,aT as z,ac as A,o as J,av as H,aU as Q,I as j,aV as Y,M as G}from"./vue-vendor-DfnFpxGJ.js";import{_ as V,u as W,b as D}from"./index-BdtiivzQ.js";import{s as b}from"./toast-BvwA7Mwb.js";import{L as X}from"./LogoTitle-CipNTyYU.js";import{T as Z}from"./ThemeToggle-DACcdK5F.js";import"./element-plus-CMedNaYf.js";import"./vendor-BDiMbLwQ.js";const ee={class:"glass-strong mb-4 rounded-xl p-3 shadow-xl sm:mb-6 sm:rounded-2xl sm:p-4 md:mb-8 md:rounded-3xl md:p-6",style:{"z-index":"10",position:"relative"}},te={class:"flex flex-col items-center justify-between gap-3 sm:flex-row sm:gap-4"},se={class:"flex w-full items-center justify-center gap-2 sm:w-auto sm:justify-start sm:gap-3 md:gap-4"},ae={class:"flex items-center gap-1 sm:gap-2"},re={class:"font-mono text-xs text-gray-400 dark:text-gray-500 sm:text-sm"},oe=["href"],ne={class:"flex items-center gap-2 sm:gap-4"},le={class:"flex items-center"},de={class:"user-menu-container relative"},ie={class:"hidden sm:inline"},ue={class:"border-b border-gray-100 px-4 py-3 dark:border-gray-700"},ce={class:"flex items-center justify-between text-sm"},me={class:"font-mono text-gray-700 dark:text-gray-300"},ge={key:0,class:"mt-2"},pe={class:"mb-2 flex items-center justify-between text-sm"},fe={class:"font-mono text-green-600 dark:text-green-400"},xe=["href"],ve={key:1,class:"mt-2 text-center text-xs text-gray-500 dark:text-gray-400"},ye={key:2,class:"mt-2 text-center"},be={key:"message",class:"inline-block rounded-lg border border-green-200 bg-green-100 px-3 py-1.5 dark:border-green-800 dark:bg-green-900/30"},ke={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},he={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-md flex-col p-4 sm:p-6 md:p-8"},we=["value"],_e={class:"flex gap-3 pt-4"},Ue=["disabled"],Ce={key:0,class:"loading-spinner mr-2"},Pe={key:1,class:"fas fa-save mr-2"},Ie={__name:"AppHeader",setup(h){const p=z(),u=W(),c=T(()=>u.user||{username:"Admin"}),a=T(()=>u.oemSettings||{}),w=T(()=>u.oemLoading),s=k({current:"...",latest:"",hasUpdate:!1,checkingUpdate:!1,lastChecked:null,releaseInfo:null,noUpdateMessage:!1}),l=k(!1),f=k(!1),x=k(!1),r=E({currentPassword:"",newPassword:"",confirmPassword:"",newUsername:""}),P=async()=>{if(!s.value.checkingUpdate){s.value.checkingUpdate=!0;try{const i=await D.get("/admin/check-updates");if(i.success){const t=i.data;s.value.current=t.current,s.value.latest=t.latest,s.value.hasUpdate=t.hasUpdate,s.value.releaseInfo=t.releaseInfo,s.value.lastChecked=new Date,localStorage.setItem("versionInfo",JSON.stringify({current:t.current,latest:t.latest,lastChecked:s.value.lastChecked,hasUpdate:t.hasUpdate,releaseInfo:t.releaseInfo})),t.hasUpdate||(s.value.noUpdateMessage=!0,setTimeout(()=>{s.value.noUpdateMessage=!1},3e3))}}catch(i){console.error("Error checking for updates:",i);const t=localStorage.getItem("versionInfo");if(t){const m=JSON.parse(t);s.value.current=m.current||s.value.current,s.value.latest=m.latest,s.value.hasUpdate=m.hasUpdate,s.value.releaseInfo=m.releaseInfo,s.value.lastChecked=new Date(m.lastChecked)}}finally{s.value.checkingUpdate=!1}}},B=()=>{r.currentPassword="",r.newPassword="",r.confirmPassword="",r.newUsername="",f.value=!0,l.value=!1},I=()=>{f.value=!1},K=async()=>{if(r.newPassword!==r.confirmPassword){b("两次输入的密码不一致","error");return}if(r.newPassword.length<8){b("新密码长度至少8位","error");return}x.value=!0;try{const i=await D.post("/web/auth/change-password",{currentPassword:r.currentPassword,newPassword:r.newPassword,newUsername:r.newUsername||void 0});if(i.success){const t=r.newUsername?"账户信息修改成功,请重新登录":"密码修改成功,请重新登录";b(t,"success"),I(),setTimeout(()=>{u.logout(),p.push("/login")},1500)}else b(i.message||"修改失败","error")}catch{b("修改密码失败","error")}finally{x.value=!1}},O=()=>{confirm("确定要退出登录吗?")&&(u.logout(),p.push("/login"),b("已安全退出","success")),l.value=!1},L=i=>{!i.target.closest(".user-menu-container")&&l.value&&(l.value=!1)};return R(()=>{P(),setInterval(()=>{P()},36e5),document.addEventListener("click",L)}),F(()=>{document.removeEventListener("click",L)}),(i,t)=>{var m;return o(),n(N,null,[e("div",ee,[e("div",te,[e("div",se,[v(X,{loading:w.value,"logo-src":a.value.siteIconData||a.value.siteIcon,subtitle:"管理后台",title:a.value.siteName,"title-class":"text-white dark:text-gray-100"},{"after-title":C(()=>{var d;return[e("div",ae,[e("span",re,"v"+g(s.value.current||"..."),1),s.value.hasUpdate?(o(),n("a",{key:0,class:"inline-flex animate-pulse items-center gap-1 rounded-full border border-green-600 bg-green-500 px-2 py-0.5 text-xs text-white transition-colors hover:bg-green-600",href:((d=s.value.releaseInfo)==null?void 0:d.htmlUrl)||"#",target:"_blank",title:"有新版本可用"},t[7]||(t[7]=[e("i",{class:"fas fa-arrow-up text-[10px]"},null,-1),e("span",null,"新版本",-1)]),8,oe)):$("",!0)])]}),_:1},8,["loading","logo-src","title"])]),e("div",ne,[e("div",le,[v(Z,{mode:"dropdown"})]),t[18]||(t[18]=e("div",{class:"h-8 w-px bg-gradient-to-b from-transparent via-gray-300 to-transparent opacity-50 dark:via-gray-600"},null,-1)),e("div",de,[e("button",{class:"user-menu-button flex items-center gap-2 rounded-2xl bg-gradient-to-r from-blue-500 to-blue-600 px-3 py-2 text-sm font-semibold text-white shadow-lg transition-all duration-200 hover:scale-105 hover:shadow-xl active:scale-95 sm:px-4 sm:py-2.5",onClick:t[0]||(t[0]=d=>l.value=!l.value)},[t[8]||(t[8]=e("i",{class:"fas fa-user-circle text-sm sm:text-base"},null,-1)),e("span",ie,g(c.value.username||"Admin"),1),e("i",{class:M(["fas fa-chevron-down ml-1 text-xs transition-transform duration-200",{"rotate-180":l.value}])},null,2)]),l.value?(o(),n("div",{key:0,class:"user-menu-dropdown absolute right-0 top-full mt-2 w-48 rounded-xl border border-gray-200 bg-white py-2 shadow-xl dark:border-gray-700 dark:bg-gray-800 sm:w-56",style:{"z-index":"999999"},onClick:t[2]||(t[2]=S(()=>{},["stop"]))},[e("div",ue,[e("div",ce,[t[9]||(t[9]=e("span",{class:"text-gray-500 dark:text-gray-400"},"当前版本",-1)),e("span",me,"v"+g(s.value.current||"..."),1)]),s.value.hasUpdate?(o(),n("div",ge,[e("div",pe,[t[10]||(t[10]=e("span",{class:"font-medium text-green-600 dark:text-green-400"},[e("i",{class:"fas fa-arrow-up mr-1"}),y("有新版本 ")],-1)),e("span",fe,"v"+g(s.value.latest),1)]),e("a",{class:"block w-full rounded-lg bg-green-500 px-3 py-1.5 text-center text-sm text-white transition-colors hover:bg-green-600",href:((m=s.value.releaseInfo)==null?void 0:m.htmlUrl)||"#",target:"_blank"},t[11]||(t[11]=[e("i",{class:"fas fa-external-link-alt mr-1"},null,-1),y("查看更新 ",-1)]),8,xe)])):s.value.checkingUpdate?(o(),n("div",ve,t[12]||(t[12]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),y("检查更新中... ",-1)]))):(o(),n("div",ye,[v(q,{mode:"out-in",name:"fade"},{default:C(()=>[s.value.noUpdateMessage?(o(),n("div",be,t[13]||(t[13]=[e("p",{class:"text-xs font-medium text-green-700 dark:text-green-400"},[e("i",{class:"fas fa-check-circle mr-1"}),y("当前已是最新版本 ")],-1)]))):(o(),n("button",{key:"button",class:"text-xs text-blue-500 transition-colors hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300",onClick:t[1]||(t[1]=d=>P())},t[14]||(t[14]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),y("检查更新 ",-1)])))]),_:1})]))]),e("button",{class:"flex w-full items-center gap-3 px-4 py-3 text-left text-gray-700 transition-colors hover:bg-gray-50 dark:text-gray-300 dark:hover:bg-gray-700",onClick:B},t[15]||(t[15]=[e("i",{class:"fas fa-key text-blue-500"},null,-1),e("span",null,"修改账户信息",-1)])),t[17]||(t[17]=e("hr",{class:"my-2 border-gray-200 dark:border-gray-700"},null,-1)),e("button",{class:"flex w-full items-center gap-3 px-4 py-3 text-left text-gray-700 transition-colors hover:bg-gray-50 dark:text-gray-300 dark:hover:bg-gray-700",onClick:O},t[16]||(t[16]=[e("i",{class:"fas fa-sign-out-alt text-red-500"},null,-1),e("span",null,"退出登录",-1)]))])):$("",!0)])])])]),f.value?(o(),n("div",ke,[e("div",he,[e("div",{class:"mb-6 flex items-center justify-between"},[t[20]||(t[20]=e("div",{class:"flex items-center gap-3"},[e("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-blue-500 to-blue-600"},[e("i",{class:"fas fa-key text-white"})]),e("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"修改账户信息")],-1)),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:hover:text-gray-300",onClick:I},t[19]||(t[19]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),e("form",{class:"modal-scroll-content custom-scrollbar flex-1 space-y-6",onSubmit:S(K,["prevent"])},[e("div",null,[t[21]||(t[21]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"当前用户名",-1)),e("input",{class:"form-input w-full cursor-not-allowed bg-gray-100 dark:bg-gray-700 dark:text-gray-300",disabled:"",type:"text",value:c.value.username||"Admin"},null,8,we),t[22]||(t[22]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 当前用户名,输入新用户名以修改 ",-1))]),e("div",null,[t[23]||(t[23]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新用户名",-1)),_(e("input",{"onUpdate:modelValue":t[3]||(t[3]=d=>r.newUsername=d),class:"form-input w-full",placeholder:"输入新用户名(留空保持不变)",type:"text"},null,512),[[U,r.newUsername]]),t[24]||(t[24]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},"留空表示不修改用户名",-1))]),e("div",null,[t[25]||(t[25]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"当前密码",-1)),_(e("input",{"onUpdate:modelValue":t[4]||(t[4]=d=>r.currentPassword=d),class:"form-input w-full",placeholder:"请输入当前密码",required:"",type:"password"},null,512),[[U,r.currentPassword]])]),e("div",null,[t[26]||(t[26]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新密码",-1)),_(e("input",{"onUpdate:modelValue":t[5]||(t[5]=d=>r.newPassword=d),class:"form-input w-full",placeholder:"请输入新密码",required:"",type:"password"},null,512),[[U,r.newPassword]]),t[27]||(t[27]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},"密码长度至少8位",-1))]),e("div",null,[t[28]||(t[28]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"确认新密码",-1)),_(e("input",{"onUpdate:modelValue":t[6]||(t[6]=d=>r.confirmPassword=d),class:"form-input w-full",placeholder:"请再次输入新密码",required:"",type:"password"},null,512),[[U,r.confirmPassword]])]),e("div",_e,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:I}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:x.value,type:"submit"},[x.value?(o(),n("div",Ce)):(o(),n("i",Pe)),y(" "+g(x.value?"保存中...":"保存修改"),1)],8,Ue)])],32)])])):$("",!0)],64)}}},Te=V(Ie,[["__scopeId","data-v-1d65ae6c"]]),$e={class:"mb-4 sm:mb-6"},Me={class:"block rounded-xl bg-white/10 p-2 backdrop-blur-sm dark:bg-gray-800/20 sm:hidden"},Ne=["value"],Ve=["value"],Le={class:"hidden flex-wrap gap-2 rounded-2xl bg-white/10 p-2 backdrop-blur-sm dark:bg-gray-800/20 sm:flex"},Se=["onClick"],Ae={class:"hidden md:inline"},je={class:"md:hidden"},De={__name:"TabBar",props:{activeTab:{type:String,required:!0}},emits:["tab-change"],setup(h){const p=[{key:"dashboard",name:"仪表板",shortName:"仪表板",icon:"fas fa-tachometer-alt"},{key:"apiKeys",name:"API Keys",shortName:"API",icon:"fas fa-key"},{key:"accounts",name:"账户管理",shortName:"账户",icon:"fas fa-user-circle"},{key:"tutorial",name:"使用教程",shortName:"教程",icon:"fas fa-graduation-cap"},{key:"settings",name:"其他设置",shortName:"设置",icon:"fas fa-cogs"}];return(u,c)=>(o(),n("div",$e,[e("div",Me,[e("select",{class:"focus:ring-primary-color w-full rounded-lg bg-white/90 px-4 py-3 font-semibold text-gray-700 focus:outline-none focus:ring-2 dark:bg-gray-800/90 dark:text-gray-200 dark:focus:ring-indigo-400",value:h.activeTab,onChange:c[0]||(c[0]=a=>u.$emit("tab-change",a.target.value))},[(o(),n(N,null,A(p,a=>e("option",{key:a.key,value:a.key},g(a.name),9,Ve)),64))],40,Ne)]),e("div",Le,[(o(),n(N,null,A(p,a=>e("button",{key:a.key,class:M(["tab-btn flex-1 px-3 py-2 text-xs font-semibold transition-all duration-300 sm:px-4 sm:py-3 sm:text-sm md:px-6",h.activeTab===a.key?"active":"text-gray-700 hover:bg-white/10 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700/30 dark:hover:text-gray-100"]),onClick:w=>u.$emit("tab-change",a.key)},[e("i",{class:M(a.icon+" mr-1 sm:mr-2")},null,2),e("span",Ae,g(a.name),1),e("span",je,g(a.shortName||a.name),1)],10,Se)),64))])]))}},qe=V(De,[["__scopeId","data-v-2dada84c"]]),ze={class:"min-h-screen p-3 sm:p-4 md:p-6"},Be={class:"glass-strong rounded-xl p-3 shadow-xl sm:rounded-2xl sm:p-4 md:rounded-3xl md:p-6",style:{"z-index":"1","min-height":"calc(100vh - 120px)"}},Ke={class:"tab-content"},Oe={__name:"MainLayout",setup(h){const p=Q(),u=z(),c=k("dashboard"),a={dashboard:"/dashboard",apiKeys:"/api-keys",accounts:"/accounts",tutorial:"/tutorial",settings:"/settings"};J(()=>p.path,s=>{const l=Object.keys(a).find(f=>a[f]===s);l&&(c.value=l)},{immediate:!0});const w=s=>{c.value=s,u.push(a[s])};return(s,l)=>{const f=H("router-view");return o(),n("div",ze,[v(Te),e("div",Be,[v(qe,{"active-tab":c.value,onTabChange:w},null,8,["active-tab"]),e("div",Ke,[v(f,null,{default:C(({Component:x})=>[v(q,{mode:"out-in",name:"slide-up"},{default:C(()=>[(o(),j(Y,{include:["DashboardView","ApiKeysView"]},[(o(),j(G(x)))],1024))]),_:2},1024)]),_:1})])])])}}},Ge=V(Oe,[["__scopeId","data-v-8a08dab6"]]);export{Ge as default};