xto-fronted 0.3.4 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.umd.js CHANGED
@@ -1 +1 @@
1
- (function(r,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("pinia"),require("vue-router"),require("@xto/navigation"),require("@xto/base"),require("@xto/form"),require("@xto/feedback"),require("axios"),require("@xto/data")):typeof define=="function"&&define.amd?define(["exports","vue","pinia","vue-router","@xto/navigation","@xto/base","@xto/form","@xto/feedback","axios","@xto/data"],e):(r=typeof globalThis<"u"?globalThis:r||self,e(r.XtoFronted={},r.Vue,r.Pinia,r.VueRouter,r.navigation,r.base,r.form,r.feedback,r.axios,r.data))})(this,function(r,e,oe,R,Y,w,h,z,Pe,A){"use strict";const re="/vite.svg",J="xto_",ge=t=>({get(l){const n=t.getItem(J+l);if(!n)return null;try{return JSON.parse(n)}catch{return n}},set(l,n){if(n==null){t.removeItem(J+l);return}const s=typeof n=="string"?n:JSON.stringify(n);t.setItem(J+l,s)},remove(l){t.removeItem(J+l)},clear(){Object.keys(t).forEach(n=>{n.startsWith(J)&&t.removeItem(n)})}}),G=ge(window.localStorage),Q=ge(window.sessionStorage),E={get:G.get,set:G.set,remove:G.remove,clear:G.clear},Oe={get:Q.get,set:Q.set,remove:Q.remove,clear:Q.clear},W=oe.defineStore("app",()=>{const t=e.ref(E.get("appName")||"XTO App"),l=e.ref(E.get("indexPath")||"/dashboard"),n=e.ref(E.get("isDark")||!1),s=e.ref(E.get("theme")||"light"),d=e.ref(E.get("layout")||"sidebar"),i=e.ref(E.get("isCollapsed")||!1),a=e.ref(E.get("showTabs")??!0),o=e.ref(E.get("showFooter")??!0),m=e.ref(E.get("showBreadcrumb")??!0),g=e.ref(E.get("primaryColor")||"#409eff"),V=e.ref([]),b=e.computed(()=>n.value?"dark":"light"),p=x=>{t.value=x,E.set("appName",x)},k=x=>{l.value=x,E.set("indexPath",x)},S=()=>{n.value=!n.value,s.value=n.value?"dark":"light",f()},_=x=>{s.value=x,n.value=x==="dark",f()},f=()=>{const x=document.documentElement;n.value?x.classList.add("dark"):x.classList.remove("dark"),E.set("isDark",n.value),E.set("theme",s.value)},D=()=>{i.value=!i.value,E.set("isCollapsed",i.value)},F=x=>{d.value=x,E.set("layout",x)},q=()=>{a.value=!a.value,E.set("showTabs",a.value)},I=()=>{o.value=!o.value,E.set("showFooter",o.value)},u=()=>{m.value=!m.value,E.set("showBreadcrumb",m.value)},c=x=>{g.value=x,document.documentElement.style.setProperty("--color-primary",x),E.set("primaryColor",x)},N=x=>{V.value.includes(x)||V.value.push(x)},$=x=>{const K=V.value.indexOf(x);K>-1&&V.value.splice(K,1)},P=()=>{V.value=[]},T=()=>{f(),g.value!=="#409eff"&&document.documentElement.style.setProperty("--color-primary",g.value)};return e.watch(n,f),{appName:t,indexPath:l,isDark:n,theme:s,layout:d,isCollapsed:i,showTabs:a,showFooter:o,showBreadcrumb:m,primaryColor:g,cachedViews:V,themeClass:b,setAppName:p,setIndexPath:k,toggleTheme:S,toggleCollapse:D,setTheme:_,setLayout:F,toggleTabs:q,toggleFooter:I,toggleBreadcrumb:u,setPrimaryColor:c,addCachedView:N,removeCachedView:$,clearCachedViews:P,initTheme:T}}),je=(t,l,n)=>{const s=t[l];return s?typeof s=="function"?s():Promise.resolve(s):new Promise((d,i)=>{(typeof queueMicrotask=="function"?queueMicrotask:setTimeout)(i.bind(null,new Error("Unknown variable dynamic import: "+l+(l.split("/").length!==n?". Note that variables only represent file names one level deep.":""))))})},se=[{path:"/login",name:"Login",component:()=>Promise.resolve().then(()=>No),meta:{title:"登录",hidden:!0}},{path:"/404",name:"NotFound",component:()=>Promise.resolve().then(()=>ko),meta:{title:"404",hidden:!0}},{path:"/403",name:"Forbidden",component:()=>Promise.resolve().then(()=>Bo),meta:{title:"403",hidden:!0}}],ie={path:"/:pathMatch(.*)*",redirect:"/404",meta:{hidden:!0}},de={path:"/",name:"Layout",component:()=>Promise.resolve().then(()=>so),redirect:"/dashboard",children:[{path:"/dashboard",name:"Dashboard",component:()=>Promise.resolve().then(()=>Le),meta:{title:"仪表盘",icon:"dashboard",keepAlive:!0,affix:!0}},{path:"/system/user",name:"SystemUser",component:()=>Promise.resolve().then(()=>Ie),meta:{title:"用户管理",icon:"user",keepAlive:!0}},{path:"/system/role",name:"SystemRole",component:()=>Promise.resolve().then(()=>Me),meta:{title:"角色管理",icon:"role",keepAlive:!0}},{path:"/system/menu",name:"SystemMenu",component:()=>Promise.resolve().then(()=>Ae),meta:{title:"菜单管理",icon:"menu",keepAlive:!0}}]},qe=[{path:"/dashboard",name:"Dashboard",component:()=>Promise.resolve().then(()=>Le),meta:{title:"仪表盘",icon:"dashboard",keepAlive:!0,affix:!0}},{path:"/system",name:"System",redirect:"/system/user",meta:{title:"系统管理",icon:"setting"},children:[{path:"user",name:"SystemUser",component:()=>Promise.resolve().then(()=>Ie),meta:{title:"用户管理",icon:"user",keepAlive:!0}},{path:"role",name:"SystemRole",component:()=>Promise.resolve().then(()=>Me),meta:{title:"角色管理",icon:"role",keepAlive:!0}},{path:"menu",name:"SystemMenu",component:()=>Promise.resolve().then(()=>Ae),meta:{title:"菜单管理",icon:"menu",keepAlive:!0}}]}],Ne=[{id:1,name:"Dashboard",path:"/dashboard",component:"dashboard/index",icon:"dashboard",title:"仪表盘",keepAlive:!0,affix:!0},{id:2,name:"System",path:"/system",redirect:"/system/user",icon:"setting",title:"系统管理",children:[{id:21,name:"SystemUser",path:"/system/user",component:"system/user/index",icon:"user",title:"用户管理",keepAlive:!0},{id:22,name:"SystemRole",path:"/system/role",component:"system/role/index",icon:"role",title:"角色管理",keepAlive:!0},{id:23,name:"SystemMenu",path:"/system/menu",component:"system/menu/index",icon:"menu",title:"菜单管理",keepAlive:!0}]}],ce="token",me="refresh_token",pe="token_expire",ne=()=>E.get(ce),ye=t=>{E.set(ce,t)},He=()=>E.get(me),Ee=t=>{E.set(me,t)},ke=()=>E.get(pe),Ce=t=>{E.set(pe,t)},we=t=>{ye(t.token),Ee(t.refreshToken),Ce(t.expireTime)},ue=()=>{E.remove(ce),E.remove(me),E.remove(pe)},Be=()=>{const t=ke();return t?Date.now()>t:!0},fe=()=>!!ne()&&!Be(),j=oe.defineStore("user",()=>{const t=e.ref(E.get("userInfo")),l=e.ref(E.get("roles")||[]),n=e.ref(E.get("permissions")||[]),s=e.computed(()=>!!t.value),d=e.computed(()=>{var p;return((p=t.value)==null?void 0:p.username)||""}),i=e.computed(()=>{var p;return((p=t.value)==null?void 0:p.nickname)||""}),a=e.computed(()=>{var p;return((p=t.value)==null?void 0:p.avatar)||""}),o=e.computed(()=>{var p;return(p=t.value)==null?void 0:p.id});return{userInfo:t,roles:l,permissions:n,isLoggedIn:s,username:d,nickname:i,avatar:a,userId:o,setUserInfo:p=>{t.value=p,l.value=p.roles||[],n.value=p.permissions||[],E.set("userInfo",p),E.set("roles",p.roles||[]),E.set("permissions",p.permissions||[])},clearUserInfo:()=>{t.value=null,l.value=[],n.value=[],E.remove("userInfo"),E.remove("roles"),E.remove("permissions")},hasPermission:p=>Array.isArray(p)?p.some(k=>n.value.includes(k)):n.value.includes(p),hasRole:p=>Array.isArray(p)?p.some(k=>l.value.includes(k)):l.value.includes(p)}}),le=R.createRouter({history:R.createWebHistory(),routes:[...se,de,ie],scrollBehavior:()=>({left:0,top:0})}),Ke=["/login","/404","/403"];le.beforeEach(async(t,l,n)=>{const s=W();if(s.initTheme(),fe())if(t.path==="/login")n({path:"/"});else{const d=j();d.isLoggedIn||(d.setUserInfo({id:1,username:"admin",nickname:"管理员",avatar:"",email:"admin@example.com",phone:"13800138000",status:1,roles:["admin"],permissions:["*"],createTime:new Date().toISOString()}),Z().setMenuList(Ne)),t.name&&t.meta.keepAlive&&s.addCachedView(t.name),n()}else Ke.includes(t.path)?n():n("/login")});function Ye(){const t=R.createRouter({history:R.createWebHistory(),routes:[...se,de,ie]});le.matcher=t.matcher}const Z=oe.defineStore("menu",()=>{const t=e.ref(E.get("menuList")||[]),l=e.computed(()=>t.value.length>0),n=a=>{t.value=a,E.set("menuList",a)},s=()=>{t.value=[],E.remove("menuList")},d=a=>a.filter(o=>!o.hidden).map(o=>{const m={path:o.path,name:o.name,meta:{title:o.title,icon:o.icon,keepAlive:o.keepAlive,hidden:o.hidden}};return o.redirect&&(m.redirect=o.redirect),o.component&&(m.component=()=>je(Object.assign({}),`../views/${o.component}.vue`,3)),o.children&&o.children.length>0&&(m.children=d(o.children)),m});return{menuList:t,hasMenu:l,setMenuList:n,clearMenu:s,generateRoutes:d,addRoutes:a=>{d(a).forEach(m=>{le.addRoute("Layout",m)})}}}),v=oe.defineStore("auth",()=>{const t=e.ref(ne()),l=e.computed(()=>fe()),n=e.ref(""),s=e.ref(""),d=e.ref(""),i=e.ref("/login");return{token:t,isLoggedIn:l,baseUrl:n,appId:s,clientId:d,loginPath:i,login:p=>{t.value=p.token,we(p)},logout:()=>{t.value=null,ue()},setBaseUrl:p=>{n.value=p},setAppId:p=>{s.value=p},setClientId:p=>{d.value=p},setLoginPath:p=>{i.value=p}}}),We={key:0,class:"sidebar__logo"},Xe={key:1,class:"sidebar__search"},Je={key:0,class:"sidebar__search-results"},Ge=["onClick"],Qe={class:"menu-icon"},Ze={class:"sidebar__search-item-info"},ve={class:"sidebar__search-item-title"},et={key:0,class:"sidebar__search-item-parent"},tt={class:"menu-icon"},ot={class:"menu-icon"},nt={class:"menu-icon"},lt={key:2,class:"sidebar__user"},at={class:"sidebar__user-info"},rt={class:"sidebar__user-name"},st={class:"sidebar__user-role"},it=e.defineComponent({__name:"Sidebar",props:{mode:{default:"vertical"},showLogo:{type:Boolean,default:!0}},setup(t){const l=t,n=R.useRoute(),s=R.useRouter(),d=Z(),i=j(),a=v(),o=W(),m=e.ref(""),g=e.computed(()=>o.isCollapsed),V=e.computed(()=>n.path),b=e.computed(()=>o.isDark?"#1d1e1f":"#fff"),p=e.computed(()=>o.isDark?"#cfd3dc":"#303133"),k=e.computed(()=>"#409eff"),S=(N,$="")=>{const P=[];return N.forEach(T=>{T.children&&T.children.length>0?P.push(...S(T.children,T.title)):P.push({...T,parentTitle:$})}),P},_=e.computed(()=>m.value.trim()?S(d.menuList).filter($=>$.title.toLowerCase().includes(m.value.toLowerCase())):[]),f=e.computed(()=>m.value.trim()?d.menuList.map(N=>{if(N.children&&N.children.length>0){const $=N.children.filter(P=>P.title.toLowerCase().includes(m.value.toLowerCase()));return $.length>0?{...N,children:$}:null}return N.title.toLowerCase().includes(m.value.toLowerCase())?N:null}).filter(Boolean):d.menuList),D=N=>{N&&N!==n.path&&(s.push(N),m.value="")},F=N=>{s.push(N),m.value=""},q=()=>{a.logout(),i.clearUserInfo(),d.clearMenu(),s.push("/login")},I=N=>({dashboard:"📊",system:"⚙️",user:"👤",role:"👥",menu:"📋",setting:"🔧"})[N||""]||"📄",u=e.computed(()=>l.mode==="vertical"),c=e.computed(()=>l.mode==="horizontal");return(N,$)=>{var P;return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["sidebar",[`sidebar--${t.mode}`,{"sidebar--collapsed":g.value&&u.value},{"sidebar--horizontal":c.value}]])},[t.showLogo&&u.value?(e.openBlock(),e.createElementBlock("div",We,[$[1]||($[1]=e.createElementVNode("img",{src:re,alt:"Logo",class:"sidebar__logo-img"},null,-1)),e.withDirectives(e.createElementVNode("span",{class:"sidebar__logo-text"},e.toDisplayString(e.unref(o).appName),513),[[e.vShow,!g.value]])])):e.createCommentVNode("",!0),u.value&&!g.value?(e.openBlock(),e.createElementBlock("div",Xe,[e.createVNode(e.unref(h.Input),{modelValue:m.value,"onUpdate:modelValue":$[0]||($[0]=T=>m.value=T),placeholder:"搜索菜单...",size:"small",clearable:""},null,8,["modelValue"]),_.value.length>0?(e.openBlock(),e.createElementBlock("div",Je,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(_.value,T=>(e.openBlock(),e.createElementBlock("div",{key:T.path,class:"sidebar__search-item",onClick:x=>F(T.path)},[e.createElementVNode("span",Qe,e.toDisplayString(I(T.icon)),1),e.createElementVNode("div",Ze,[e.createElementVNode("span",ve,e.toDisplayString(T.title),1),T.parentTitle?(e.openBlock(),e.createElementBlock("span",et,e.toDisplayString(T.parentTitle),1)):e.createCommentVNode("",!0)])],8,Ge))),128))])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createVNode(e.unref(Y.Menu),{"default-active":V.value,mode:t.mode,collapse:g.value&&u.value,"collapse-transition":!1,"background-color":b.value,"text-color":p.value,"active-text-color":k.value,class:"sidebar__menu",onSelect:D},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.value,T=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:T.path},[T.children&&T.children.length>0?(e.openBlock(),e.createBlock(e.unref(Y.SubMenu),{key:0,index:T.path},{title:e.withCtx(()=>[e.createElementVNode("span",tt,e.toDisplayString(I(T.icon)),1),e.createElementVNode("span",null,e.toDisplayString(T.title),1)]),default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(T.children,x=>(e.openBlock(),e.createBlock(e.unref(Y.MenuItem),{key:x.path,index:x.path},{default:e.withCtx(()=>[e.createElementVNode("span",ot,e.toDisplayString(I(x.icon)),1),e.createElementVNode("span",null,e.toDisplayString(x.title),1)]),_:2},1032,["index"]))),128))]),_:2},1032,["index"])):(e.openBlock(),e.createBlock(e.unref(Y.MenuItem),{key:1,index:T.path},{default:e.withCtx(()=>[e.createElementVNode("span",nt,e.toDisplayString(I(T.icon)),1),e.createElementVNode("span",null,e.toDisplayString(T.title),1)]),_:2},1032,["index"]))],64))),128))]),_:1},8,["default-active","mode","collapse","background-color","text-color","active-text-color"]),u.value&&!g.value?(e.openBlock(),e.createElementBlock("div",lt,[e.createElementVNode("div",at,[e.createElementVNode("span",rt,e.toDisplayString(e.unref(i).nickname),1),e.createElementVNode("span",st,e.toDisplayString((P=e.unref(i).roles)==null?void 0:P.join(", ")),1)]),e.createVNode(e.unref(w.Button),{type:"text",size:"small",onClick:q},{default:e.withCtx(()=>[...$[2]||($[2]=[e.createTextVNode("退出",-1)])]),_:1})])):e.createCommentVNode("",!0)],2)}}}),O=(t,l)=>{const n=t.__vccOpts||t;for(const[s,d]of l)n[s]=d;return n},ee=O(it,[["__scopeId","data-v-c12b0ee4"]]),dt={class:"header"},ct={class:"header__left"},mt={viewBox:"0 0 24 24",width:"18",height:"18",fill:"currentColor"},pt={key:0,d:"M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"},ut={key:1,d:"M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"},ft={key:0,class:"header__breadcrumb"},ht={key:0,class:"breadcrumb-separator"},_t={class:"header__right"},Vt=["title"],gt={key:0,viewBox:"0 0 24 24",width:"16",height:"16",fill:"currentColor"},Nt={key:1,viewBox:"0 0 24 24",width:"16",height:"16",fill:"currentColor"},yt={key:0,class:"header__layout-dropdown"},Et={class:"header__layout-options"},kt=["onClick"],Ct={class:"layout-icon"},wt={class:"header__color-options"},Bt=["title","onClick"],St={key:0,viewBox:"0 0 24 24",width:"16",height:"16",fill:"currentColor"},xt={key:1,viewBox:"0 0 24 24",width:"16",height:"16",fill:"currentColor"},bt={class:"header__avatar"},Dt={class:"header__user-name"},Tt={key:0,class:"header__dropdown"},$t={class:"header__dropdown-header"},Lt={class:"header__dropdown-avatar"},It={class:"header__dropdown-info"},Mt={class:"header__dropdown-name"},At={class:"header__dropdown-role"},zt={class:"search-container"},Ut={class:"search-input-wrapper"},Rt={key:0,class:"search-results"},Ft=["onClick"],Pt={class:"search-result-icon"},Ot={class:"search-result-info"},jt={class:"search-result-title"},qt={key:0,class:"search-result-parent"},Ht={key:1,class:"search-empty"},ae=O(e.defineComponent({__name:"Header",setup(t){const l=R.useRoute(),n=R.useRouter(),s=W(),d=j(),i=v(),a=Z(),o=e.ref(!1),m=e.ref(!1),g=e.ref(null),V=e.ref(!1),b=e.ref(!1),p=e.ref(""),k=e.ref(null),S=[{value:"sidebar",label:"左侧菜单",icon:"📋"},{value:"top",label:"顶部菜单",icon:"☰"},{value:"mix",label:"混合菜单",icon:"⚡"}],_=[{value:"#409eff",label:"默认蓝"},{value:"#1890ff",label:"科技蓝"},{value:"#52c41a",label:"极光绿"},{value:"#faad14",label:"日落橙"},{value:"#f5222d",label:"薄暮红"},{value:"#722ed1",label:"酱紫"}],f=e.computed(()=>l.matched.filter(y=>y.meta&&y.meta.title).map(y=>({title:y.meta.title,path:y.path}))),D=(M,y="")=>{const X=[];return M.forEach(B=>{B.children&&B.children.length>0?X.push(...D(B.children,B.title)):X.push({...B,parentTitle:y})}),X},F=e.computed(()=>p.value.trim()?D(a.menuList).filter(y=>y.title.toLowerCase().includes(p.value.toLowerCase())):[]),q=e.computed(()=>s.layout),I=()=>{s.toggleCollapse()},u=()=>{s.toggleTheme()},c=M=>{s.setLayout(M),m.value=!1},N=()=>{const M=document.documentElement;M.classList.contains("grey-mode")?M.classList.remove("grey-mode"):M.classList.add("grey-mode")},$=()=>{document.fullscreenElement?document.exitFullscreen():document.documentElement.requestFullscreen()},P=()=>{V.value=!!document.fullscreenElement},T=()=>{o.value=!o.value,m.value=!1},x=()=>{m.value=!m.value,o.value=!1},K=()=>{o.value=!1,m.value=!1},ze=()=>{b.value=!0},Ve=()=>{b.value=!1,p.value=""},Ue=M=>{n.push(M),Ve()},qn=M=>{s.setPrimaryColor(M)},Hn=()=>{K(),n.push("/profile")},Kn=()=>{K(),n.push("/change-password")},Yn=()=>{K(),i.logout(),d.clearUserInfo(),a.clearMenu(),n.push("/login")},Re=M=>{g.value&&!g.value.contains(M.target)&&K(),k.value&&!k.value.contains(M.target)&&Ve()},Fe=M=>{M.key==="Escape"&&(Ve(),K()),(M.ctrlKey||M.metaKey)&&M.key==="k"&&(M.preventDefault(),ze())};return e.onMounted(()=>{document.addEventListener("click",Re),document.addEventListener("fullscreenchange",P),document.addEventListener("keydown",Fe),s.initTheme()}),e.onUnmounted(()=>{document.removeEventListener("click",Re),document.removeEventListener("fullscreenchange",P),document.removeEventListener("keydown",Fe)}),(M,y)=>{var X;return e.openBlock(),e.createElementBlock("div",dt,[e.createElementVNode("div",ct,[e.createElementVNode("div",{class:"header__collapse",onClick:I},[(e.openBlock(),e.createElementBlock("svg",mt,[e.unref(s).isCollapsed?(e.openBlock(),e.createElementBlock("path",pt)):(e.openBlock(),e.createElementBlock("path",ut))]))]),e.unref(s).showBreadcrumb?(e.openBlock(),e.createElementBlock("div",ft,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.value,(B,H)=>(e.openBlock(),e.createElementBlock("span",{key:B.path},[H>0?(e.openBlock(),e.createElementBlock("span",ht,"/")):e.createCommentVNode("",!0),e.createElementVNode("span",{class:e.normalizeClass({"is-current":H===f.value.length-1})},e.toDisplayString(B.title),3)]))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",_t,[e.createElementVNode("div",{class:"header__action",onClick:ze,title:"搜索 (Ctrl+K)"},[...y[2]||(y[2]=[e.createElementVNode("svg",{viewBox:"0 0 24 24",width:"16",height:"16",fill:"currentColor"},[e.createElementVNode("path",{d:"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"})],-1)])]),e.createElementVNode("div",{class:"header__action",onClick:$,title:V.value?"退出全屏":"全屏"},[V.value?(e.openBlock(),e.createElementBlock("svg",gt,[...y[3]||(y[3]=[e.createElementVNode("path",{d:"M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"},null,-1)])])):(e.openBlock(),e.createElementBlock("svg",Nt,[...y[4]||(y[4]=[e.createElementVNode("path",{d:"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"},null,-1)])]))],8,Vt),e.createElementVNode("div",{class:"header__action header__layout",ref_key:"dropdownRef",ref:g},[e.createElementVNode("div",{class:"header__action-trigger",onClick:e.withModifiers(x,["stop"])},[...y[5]||(y[5]=[e.createElementVNode("svg",{viewBox:"0 0 24 24",width:"16",height:"16",fill:"currentColor"},[e.createElementVNode("path",{d:"M3 3h18v18H3V3zm2 2v6h14V5H5zm0 8v6h6v-6H5zm8 0v6h6v-6h-6z"})],-1)])]),e.createVNode(e.Transition,{name:"dropdown"},{default:e.withCtx(()=>[m.value?(e.openBlock(),e.createElementBlock("div",yt,[y[7]||(y[7]=e.createElementVNode("div",{class:"header__layout-title"},"布局模式",-1)),e.createElementVNode("div",Et,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(S,B=>e.createElementVNode("div",{key:B.value,class:e.normalizeClass(["header__layout-option",{"is-active":q.value===B.value}]),onClick:H=>c(B.value)},[e.createElementVNode("span",Ct,e.toDisplayString(B.icon),1),e.createElementVNode("span",null,e.toDisplayString(B.label),1)],10,kt)),64))]),y[8]||(y[8]=e.createElementVNode("div",{class:"header__layout-divider"},null,-1)),y[9]||(y[9]=e.createElementVNode("div",{class:"header__layout-title"},"主题色",-1)),e.createElementVNode("div",wt,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(_,B=>e.createElementVNode("div",{key:B.value,class:e.normalizeClass(["header__color-option",{"is-active":e.unref(s).primaryColor===B.value}]),style:e.normalizeStyle({backgroundColor:B.value}),title:B.label,onClick:H=>qn(B.value)},null,14,Bt)),64))]),y[10]||(y[10]=e.createElementVNode("div",{class:"header__layout-divider"},null,-1)),e.createElementVNode("div",{class:"header__layout-item",onClick:N},[...y[6]||(y[6]=[e.createElementVNode("span",{class:"layout-icon"},"🌫️",-1),e.createElementVNode("span",null,"灰色模式",-1)])])])):e.createCommentVNode("",!0)]),_:1})],512),e.createElementVNode("div",{class:"header__action",onClick:u,title:"切换主题"},[e.unref(s).isDark?(e.openBlock(),e.createElementBlock("svg",St,[...y[11]||(y[11]=[e.createElementVNode("path",{d:"M12 3c-4.97 0-9 4.03-9 9s4.03 9 9 9 9-4.03 9-9c0-.46-.04-.92-.1-1.36-.98 1.37-2.58 2.26-4.4 2.26-3.03 0-5.5-2.47-5.5-5.5 0-1.82.89-3.42 2.26-4.4-.44-.06-.9-.1-1.36-.1z"},null,-1)])])):(e.openBlock(),e.createElementBlock("svg",xt,[...y[12]||(y[12]=[e.createElementVNode("path",{d:"M6.76 4.84l-1.4-1.4-1.41 1.41 1.4 1.4 1.41-1.41zm10.49 10.49l-1.4-1.4-1.41 1.41 1.4 1.4 1.41-1.41zM12 4c-4.97 0-9 4.03-9 9s4.03 9 9 9 9-4.03 9-9-4.03-9-9-9zm0 16c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7zm1-9h-2v4h2v-4zm0-6h-2v2h2V5zM4.84 17.24l-1.41 1.41 1.4 1.4 1.41-1.41-1.4-1.4z"},null,-1)])]))]),e.createElementVNode("div",{class:"header__user",ref_key:"dropdownRef",ref:g},[e.createElementVNode("div",{class:"header__user-trigger",onClick:e.withModifiers(T,["stop"])},[e.createElementVNode("div",bt,[e.createElementVNode("span",null,e.toDisplayString(((X=e.unref(d).nickname)==null?void 0:X.charAt(0))||"U"),1)]),e.createElementVNode("span",Dt,e.toDisplayString(e.unref(d).nickname),1),e.createElementVNode("span",{class:e.normalizeClass(["header__user-arrow",{"is-active":o.value}])},"▼",2)]),e.createVNode(e.Transition,{name:"dropdown"},{default:e.withCtx(()=>{var B,H;return[o.value?(e.openBlock(),e.createElementBlock("div",Tt,[e.createElementVNode("div",$t,[e.createElementVNode("div",Lt,[e.createElementVNode("span",null,e.toDisplayString(((B=e.unref(d).nickname)==null?void 0:B.charAt(0))||"U"),1)]),e.createElementVNode("div",It,[e.createElementVNode("div",Mt,e.toDisplayString(e.unref(d).nickname),1),e.createElementVNode("div",At,e.toDisplayString((H=e.unref(d).roles)==null?void 0:H.join(", ")),1)])]),y[17]||(y[17]=e.createElementVNode("div",{class:"header__dropdown-divider"},null,-1)),e.createElementVNode("div",{class:"header__dropdown-menu"},[e.createElementVNode("div",{class:"header__dropdown-item",onClick:Hn},[...y[13]||(y[13]=[e.createElementVNode("span",{class:"header__dropdown-icon"},"👤",-1),e.createElementVNode("span",null,"个人信息",-1)])]),e.createElementVNode("div",{class:"header__dropdown-item",onClick:Kn},[...y[14]||(y[14]=[e.createElementVNode("span",{class:"header__dropdown-icon"},"🔐",-1),e.createElementVNode("span",null,"修改密码",-1)])]),y[16]||(y[16]=e.createElementVNode("div",{class:"header__dropdown-divider"},null,-1)),e.createElementVNode("div",{class:"header__dropdown-item header__dropdown-item--danger",onClick:Yn},[...y[15]||(y[15]=[e.createElementVNode("span",{class:"header__dropdown-icon"},"🚪",-1),e.createElementVNode("span",null,"退出登录",-1)])])])])):e.createCommentVNode("",!0)]}),_:1})],512)]),e.createVNode(e.Transition,{name:"search"},{default:e.withCtx(()=>[b.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"header__search-modal",ref_key:"searchRef",ref:k},[e.createElementVNode("div",zt,[e.createElementVNode("div",Ut,[y[18]||(y[18]=e.createElementVNode("svg",{class:"search-icon",viewBox:"0 0 24 24",width:"20",height:"20",fill:"currentColor"},[e.createElementVNode("path",{d:"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"})],-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":y[0]||(y[0]=B=>p.value=B),type:"text",class:"search-input",placeholder:"搜索菜单...",autofocus:"",onKeyup:y[1]||(y[1]=e.withKeys(B=>F.value[0]&&Ue(F.value[0].path),["enter"]))},null,544),[[e.vModelText,p.value]]),y[19]||(y[19]=e.createElementVNode("span",{class:"search-shortcut"},"ESC 关闭",-1))]),F.value.length>0?(e.openBlock(),e.createElementBlock("div",Rt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(F.value,(B,H)=>(e.openBlock(),e.createElementBlock("div",{key:B.path,class:e.normalizeClass(["search-result-item",{"is-first":H===0}]),onClick:il=>Ue(B.path)},[e.createElementVNode("span",Pt,e.toDisplayString(B.icon||"📄"),1),e.createElementVNode("div",Ot,[e.createElementVNode("span",jt,e.toDisplayString(B.title),1),B.parentTitle?(e.openBlock(),e.createElementBlock("span",qt,e.toDisplayString(B.parentTitle),1)):e.createCommentVNode("",!0)])],10,Ft))),128))])):p.value?(e.openBlock(),e.createElementBlock("div",Ht," 未找到匹配的菜单 ")):e.createCommentVNode("",!0)])],512)):e.createCommentVNode("",!0)]),_:1})])}}}),[["__scopeId","data-v-7095203b"]]),Kt={class:"layout__header-top"},Yt={class:"layout__header-logo"},Wt={class:"layout__logo-text"},Xt={class:"layout__header-right"},Jt={class:"layout__content"},Gt={class:"layout__header-mix"},Qt={class:"layout__header-left"},Zt={viewBox:"0 0 24 24",width:"18",height:"18",fill:"currentColor"},vt={key:0,d:"M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"},eo={key:1,d:"M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"},to={class:"layout__header-right"},oo={class:"layout__body"},no={class:"layout__content"},lo={class:"layout__main"},ao={class:"layout__header"},ro={class:"layout__content"},he=O(e.defineComponent({__name:"index",setup(t){const l=W(),n=e.computed(()=>l.isCollapsed?"64px":"210px"),s=e.computed(()=>l.layout),d=e.computed(()=>s.value==="sidebar"),i=e.computed(()=>s.value==="top"),a=e.computed(()=>s.value==="mix");return(o,m)=>{const g=e.resolveComponent("router-view");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["layout",`layout--${s.value}`])},[i.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createElementVNode("header",Kt,[e.createElementVNode("div",Yt,[m[1]||(m[1]=e.createElementVNode("img",{src:re,alt:"Logo",class:"layout__logo-img"},null,-1)),e.createElementVNode("span",Wt,e.toDisplayString(e.unref(l).appName),1)]),e.createVNode(ee,{class:"layout__top-menu",mode:"horizontal"}),e.createElementVNode("div",Xt,[e.createVNode(ae,{"show-breadcrumb":!1,"show-collapse":!1})])]),e.createElementVNode("main",Jt,[e.createVNode(g)])],64)):a.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createElementVNode("header",Gt,[e.createElementVNode("div",Qt,[e.createElementVNode("div",{class:"layout__collapse",onClick:m[0]||(m[0]=(...V)=>e.unref(l).toggleCollapse&&e.unref(l).toggleCollapse(...V))},[(e.openBlock(),e.createElementBlock("svg",Zt,[e.unref(l).isCollapsed?(e.openBlock(),e.createElementBlock("path",vt)):(e.openBlock(),e.createElementBlock("path",eo))]))]),e.createVNode(ee,{class:"layout__top-menu",mode:"horizontal"})]),e.createElementVNode("div",to,[e.createVNode(ae,{"show-breadcrumb":!1,"show-collapse":!1})])]),e.createElementVNode("div",oo,[e.createElementVNode("aside",{class:"layout__aside",style:e.normalizeStyle({width:n.value})},[e.createVNode(ee,{mode:"vertical","show-logo":!1})],4),e.createElementVNode("main",no,[e.createVNode(g)])])],64)):d.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createElementVNode("aside",{class:"layout__aside",style:e.normalizeStyle({width:n.value})},[e.createVNode(ee)],4),e.createElementVNode("div",lo,[e.createElementVNode("header",ao,[e.createVNode(ae)]),e.createElementVNode("main",ro,[e.createVNode(g)])])],64)):e.createCommentVNode("",!0)],2)}}}),[["__scopeId","data-v-129cb9dc"]]),so=Object.freeze(Object.defineProperty({__proto__:null,default:he},Symbol.toStringTag,{value:"Module"})),io={class:"tabs-wrapper"},co={class:"tab-label"},mo=["onClick"],po=O(e.defineComponent({__name:"Tabs",setup(t){const l=R.useRoute(),n=R.useRouter(),s=e.computed(()=>{const o=[];return l.matched.forEach(m=>{var g;(g=m.meta)!=null&&g.affix&&o.push({name:m.name,title:m.meta.title,path:m.path,affix:!0})}),o}),d=e.computed(()=>l.path),i=o=>{n.push(o)},a=o=>{const m=s.value.find(g=>g.path===o);if(!(m!=null&&m.affix)&&o===d.value){const g=s.value.findIndex(b=>b.path===o),V=s.value[g-1]||s.value[g+1];V&&n.push(V.path)}};return(o,m)=>(e.openBlock(),e.createElementBlock("div",io,[e.createVNode(e.unref(Y.Tabs),{modelValue:d.value,"onUpdate:modelValue":m[0]||(m[0]=g=>d.value=g),type:"card",onTabClick:i},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,g=>(e.openBlock(),e.createBlock(e.unref(Y.TabPane),{key:g.path,name:g.path,label:g.title,closable:!g.affix},{label:e.withCtx(()=>[e.createElementVNode("span",co,[e.createTextVNode(e.toDisplayString(g.title)+" ",1),g.affix?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",{key:0,class:"tab-close",onClick:e.withModifiers(V=>a(g.path),["stop"])}," ✕ ",8,mo))])]),_:2},1032,["name","label","closable"]))),128))]),_:1},8,["modelValue"])]))}}),[["__scopeId","data-v-9156d8cd"]]),uo={},fo={class:"footer"};function ho(t,l){return e.openBlock(),e.createElementBlock("div",fo,[...l[0]||(l[0]=[e.createElementVNode("span",null,"Copyright © 2024 Xto Demo. All Rights Reserved.",-1)])])}const _o=O(uo,[["render",ho],["__scopeId","data-v-4852826a"]]),Vo={class:"login"},go={class:"login__container"},Se=O(e.defineComponent({__name:"index",setup(t){const l=R.useRouter(),n=v(),s=j(),d=Z(),i=e.ref(!1),a=e.ref(!1),o=e.reactive({username:"admin",password:"123456"}),m={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"},{min:6,message:"密码长度至少6位",trigger:"blur"}]},g=e.ref(),V=async()=>{var b;try{await((b=g.value)==null?void 0:b.validate()),i.value=!0,setTimeout(()=>{n.login({token:"mock_token_"+Date.now(),refreshToken:"mock_refresh_token",expireTime:Date.now()+7*24*60*60*1e3}),s.setUserInfo({id:1,username:o.username,nickname:"管理员",avatar:"",email:"admin@example.com",phone:"13800138000",status:1,roles:["admin"],permissions:["*"],createTime:new Date().toISOString()}),d.setMenuList([{id:1,name:"Dashboard",path:"/dashboard",component:"dashboard/index",icon:"dashboard",title:"仪表盘",keepAlive:!0,affix:!0},{id:2,name:"System",path:"/system",redirect:"/system/user",icon:"setting",title:"系统管理",children:[{id:21,name:"SystemUser",path:"/system/user",component:"system/user/index",icon:"user",title:"用户管理",keepAlive:!0},{id:22,name:"SystemRole",path:"/system/role",component:"system/role/index",icon:"role",title:"角色管理",keepAlive:!0},{id:23,name:"SystemMenu",path:"/system/menu",component:"system/menu/index",icon:"menu",title:"菜单管理",keepAlive:!0}]}]),z.Message.success("登录成功"),l.push("/"),i.value=!1},1e3)}catch{i.value=!1}};return(b,p)=>(e.openBlock(),e.createElementBlock("div",Vo,[e.createElementVNode("div",go,[p[5]||(p[5]=e.createElementVNode("div",{class:"login__header"},[e.createElementVNode("img",{src:re,alt:"Logo",class:"login__logo"}),e.createElementVNode("h1",{class:"login__title"},"Xto Demo"),e.createElementVNode("p",{class:"login__subtitle"},"后台管理系统")],-1)),e.createVNode(e.unref(h.Form),{ref_key:"formRef",ref:g,model:o,rules:m,class:"login__form","label-width":"0"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.FormItem),{prop:"username"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:o.username,"onUpdate:modelValue":p[0]||(p[0]=k=>o.username=k),placeholder:"用户名","prefix-icon":"👤",size:"large"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{prop:"password"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:o.password,"onUpdate:modelValue":p[1]||(p[1]=k=>o.password=k),type:"password",placeholder:"密码","prefix-icon":"🔒",size:"large","show-password":"",onKeyup:e.withKeys(V,["enter"])},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(h.Checkbox),{modelValue:a.value,"onUpdate:modelValue":p[2]||(p[2]=k=>a.value=k)},{default:e.withCtx(()=>[...p[3]||(p[3]=[e.createTextVNode("记住我",-1)])]),_:1},8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(w.Button),{type:"primary",size:"large",loading:i.value,class:"login__submit",onClick:V},{default:e.withCtx(()=>[...p[4]||(p[4]=[e.createTextVNode(" 登录 ",-1)])]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"]),p[6]||(p[6]=e.createElementVNode("div",{class:"login__footer"},[e.createElementVNode("p",null,"提示: 任意用户名密码即可登录 (Mock 模式)")],-1))])]))}}),[["__scopeId","data-v-40e9f7eb"]]),No=Object.freeze(Object.defineProperty({__proto__:null,default:Se},Symbol.toStringTag,{value:"Module"})),yo={class:"error-page"},Eo={class:"error-page__content"},xe=O(e.defineComponent({__name:"404",setup(t){const l=R.useRouter(),n=()=>{l.push("/")};return(s,d)=>(e.openBlock(),e.createElementBlock("div",yo,[e.createElementVNode("div",Eo,[d[1]||(d[1]=e.createElementVNode("div",{class:"error-page__code"},"404",-1)),d[2]||(d[2]=e.createElementVNode("div",{class:"error-page__title"},"页面不存在",-1)),d[3]||(d[3]=e.createElementVNode("div",{class:"error-page__desc"},"抱歉,您访问的页面不存在或已被删除",-1)),e.createVNode(e.unref(w.Button),{type:"primary",onClick:n},{default:e.withCtx(()=>[...d[0]||(d[0]=[e.createTextVNode("返回首页",-1)])]),_:1})])]))}}),[["__scopeId","data-v-c3c12c24"]]),ko=Object.freeze(Object.defineProperty({__proto__:null,default:xe},Symbol.toStringTag,{value:"Module"})),Co={class:"error-page"},wo={class:"error-page__content"},be=O(e.defineComponent({__name:"403",setup(t){const l=R.useRouter(),n=()=>{l.push("/")};return(s,d)=>(e.openBlock(),e.createElementBlock("div",Co,[e.createElementVNode("div",wo,[d[1]||(d[1]=e.createElementVNode("div",{class:"error-page__code"},"403",-1)),d[2]||(d[2]=e.createElementVNode("div",{class:"error-page__title"},"无访问权限",-1)),d[3]||(d[3]=e.createElementVNode("div",{class:"error-page__desc"},"抱歉,您没有权限访问此页面",-1)),e.createVNode(e.unref(w.Button),{type:"primary",onClick:n},{default:e.withCtx(()=>[...d[0]||(d[0]=[e.createTextVNode("返回首页",-1)])]),_:1})])]))}}),[["__scopeId","data-v-dd5f2795"]]),Bo=Object.freeze(Object.defineProperty({__proto__:null,default:be},Symbol.toStringTag,{value:"Module"}));function So(){const t=W(),l=j(),n=v(),s=e.computed(()=>l.nickname||l.username||""),d=e.computed(()=>l.userInfo),i=e.computed(()=>t.appName),a=e.computed(()=>n.isLoggedIn),o=e.computed(()=>t.isDark),m=e.computed(()=>t.theme),g=e.computed(()=>t.isCollapsed),V=e.computed(()=>t.layout);return{userName:s,userInfo:d,appName:i,isLoggedIn:a,isDark:o,theme:m,isCollapsed:g,layout:V,toggleTheme:()=>{t.toggleTheme()},toggleCollapse:()=>{t.toggleCollapse()}}}function xo(){const t=j(),l=i=>{const a=t.permissions;return a.includes("*")?!0:Array.isArray(i)?i.some(o=>a.includes(o)):a.includes(i)},n=i=>{const a=t.roles;return a.includes("admin")?!0:Array.isArray(i)?i.some(o=>a.includes(o)):a.includes(i)},s=e.computed(()=>t.roles.includes("admin")),d=e.computed(()=>t.isLoggedIn);return{hasPermission:l,hasRole:n,isAdmin:s,isLoggedIn:d}}function bo(t,l={}){const{rules:n,onSubmit:s}=l,d=e.ref(),i=e.reactive({...t}),a=e.ref(!1),o=e.ref(!1),m=e.ref(!1),g=()=>{p(),m.value=!1,o.value=!0},V=S=>{Object.assign(i,S),m.value=!0,o.value=!0},b=()=>{o.value=!1,p()},p=()=>{var S;Object.keys(t).forEach(_=>{i[_]=t[_]}),(S=d.value)==null||S.resetFields()};return{formRef:d,formData:i,rules:n,loading:a,visible:o,isEdit:m,openAdd:g,openEdit:V,close:b,resetForm:p,handleSubmit:async()=>{var S;try{await((S=d.value)==null?void 0:S.validate()),a.value=!0,await(s==null?void 0:s(i)),b()}catch(_){console.error(_)}finally{a.value=!1}}}}function Do(t){const{fetchData:l,defaultPageSize:n=10}=t,s=e.ref(!1),d=e.ref([]),i=e.ref(0),a=e.ref(1),o=e.ref(n),m=e.reactive({}),g=async()=>{s.value=!0;try{const f={...m,page:a.value,pageSize:o.value},D=await l(f);d.value=D.list,i.value=D.total}catch(f){console.error(f)}finally{s.value=!1}},V=()=>{a.value=1,g()},b=()=>{Object.keys(m).forEach(f=>{m[f]=void 0}),a.value=1,g()},p=f=>{a.value=f,g()},k=f=>{o.value=f,a.value=1,g()},S=()=>{g()},_=e.computed(()=>({current:a.value,pageSize:o.value,total:i.value}));return{loading:s,data:d,total:i,currentPage:a,pageSize:o,searchParams:m,pagination:_,getData:g,handleSearch:V,handleReset:b,handlePageChange:p,handleSizeChange:k,refresh:S}}function To(t){const n=j().permissions;return Array.isArray(t)?t.some(s=>n.includes(s)):n.includes(t)}function De(t){const n=j().roles;return Array.isArray(t)?t.some(s=>n.includes(s)):n.includes(t)}function $o(){return De("admin")}const te=(()=>{const t=Pe.create({baseURL:void 0,timeout:3e4,headers:{"Content-Type":"application/json"}});return t.interceptors.request.use(l=>{const n=ne();return n&&(l.headers.Authorization=`Bearer ${n}`),l},l=>Promise.reject(l)),t.interceptors.response.use(l=>{const{data:n}=l;return n.code===200||n.code===0?n.data:(z.Message.error(n.message||"请求失败"),Promise.reject(new Error(n.message||"请求失败")))},l=>{var s;const{response:n}=l;if(n)switch(n.status){case 401:z.Message.error("登录已过期,请重新登录"),ue(),window.location.href="/login";break;case 403:z.Message.error("没有权限访问");break;case 404:z.Message.error("请求资源不存在");break;case 500:z.Message.error("服务器错误");break;default:z.Message.error(((s=n.data)==null?void 0:s.message)||"请求失败")}else z.Message.error("网络连接失败");return Promise.reject(l)}),t})(),L={get(t,l){return te.get(t,l)},post(t,l,n){return te.post(t,l,n)},put(t,l,n){return te.put(t,l,n)},patch(t,l,n){return te.patch(t,l,n)},delete(t,l){return te.delete(t,l)}};function Lo(t,l={}){const n=l.indexPath||"/dashboard";return{path:"/",name:"Layout",component:he,redirect:n,children:t}}function Io(t){return R.createRouter({history:R.createWebHistory(),routes:t,scrollBehavior:()=>({left:0,top:0})})}function Mo(t){return L.post("/auth/login",t)}function Ao(){return L.post("/auth/logout")}function zo(){return L.get("/user/info")}function Uo(t){return L.post("/auth/refresh",{refreshToken:t})}function Ro(t){return L.get("/role/list",{params:t})}function Fo(t){return L.get(`/role/${t}`)}function Po(t){return L.post("/role",t)}function Oo(t,l){return L.put(`/role/${t}`,l)}function jo(t){return L.delete(`/role/${t}`)}function qo(t,l){return L.patch(`/role/${t}/status`,{status:l})}function Ho(){return L.get("/menu/list")}function Ko(){return L.get("/menu/tree")}function Yo(t){return L.post("/menu",t)}function Wo(t,l){return L.put(`/menu/${t}`,l)}function Xo(t){return L.delete(`/menu/${t}`)}function Jo(t){return L.get("/user/list",{params:t})}function Go(t){return L.get(`/user/${t}`)}function Qo(t){return L.post("/user",t)}function Zo(t,l){return L.put(`/user/${t}`,l)}function vo(t){return L.delete(`/user/${t}`)}function en(t){return L.post("/user/batch-delete",{ids:t})}function tn(t,l){return L.patch(`/user/${t}/status`,{status:l})}function on(t){return L.post(`/user/${t}/reset-password`)}var C=(t=>(t[t.ENABLED=1]="ENABLED",t[t.DISABLED=0]="DISABLED",t))(C||{}),Te=(t=>(t[t.UNKNOWN=0]="UNKNOWN",t[t.MALE=1]="MALE",t[t.FEMALE=2]="FEMALE",t))(Te||{}),U=(t=>(t[t.DIRECTORY=0]="DIRECTORY",t[t.MENU=1]="MENU",t[t.BUTTON=2]="BUTTON",t))(U||{});const nn={1:"启用",0:"禁用"},ln={0:"未知",1:"男",2:"女"},an={0:"目录",1:"菜单",2:"按钮"},_e=[{label:"启用",value:1},{label:"禁用",value:0}],rn=[{label:"未知",value:0},{label:"男",value:1},{label:"女",value:2}],$e=[{label:"目录",value:0},{label:"菜单",value:1},{label:"按钮",value:2}],sn={mounted(t,l){var a;const n=j(),{value:s}=l;if(!s)return;const d=n.permissions;let i=!1;Array.isArray(s)?i=s.some(o=>d.includes(o)||d.includes("*")):i=d.includes(s)||d.includes("*"),i||(a=t.parentNode)==null||a.removeChild(t)}},dn={class:"dashboard"},cn={class:"dashboard__stats"},mn={class:"stat-card__content"},pn={class:"stat-card__info"},un={class:"stat-card__title"},fn={class:"dashboard__main"},hn={class:"quick-links"},_n={class:"quick-link__icon"},Vn={class:"quick-link__title"},gn={class:"activity-list"},Nn={class:"activity-item__action"},yn={class:"activity-item__time"},En={class:"system-info"},kn={class:"system-info__item"},Cn={class:"system-info__item"},Le=Object.freeze(Object.defineProperty({__proto__:null,default:O(e.defineComponent({__name:"index",setup(t){const l=e.ref([{title:"用户总数",value:1234,icon:"👥",color:"#409eff"},{title:"今日访问",value:567,icon:"👀",color:"#67c23a"},{title:"订单数量",value:890,icon:"📦",color:"#e6a23c"},{title:"销售金额",value:123456,icon:"💰",color:"#f56c6c"}]),n=e.ref([{user:"张三",action:"登录系统",time:"2分钟前",type:"success"},{user:"李四",action:"修改了用户信息",time:"5分钟前",type:"warning"},{user:"王五",action:"创建了新订单",time:"10分钟前",type:"info"},{user:"赵六",action:"删除了测试数据",time:"30分钟前",type:"danger"},{user:"钱七",action:"更新了系统配置",time:"1小时前",type:"primary"}]),s=e.ref([{title:"用户管理",path:"/system/user",icon:"👤"},{title:"角色管理",path:"/system/role",icon:"👥"},{title:"菜单管理",path:"/system/menu",icon:"📋"},{title:"系统设置",path:"/system",icon:"⚙️"}]);return(d,i)=>{const a=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock("div",dn,[e.createElementVNode("div",cn,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,o=>(e.openBlock(),e.createBlock(e.unref(A.Card),{key:o.title,class:"stat-card"},{default:e.withCtx(()=>[e.createElementVNode("div",mn,[e.createElementVNode("div",{class:"stat-card__icon",style:e.normalizeStyle({backgroundColor:o.color+"20"})},e.toDisplayString(o.icon),5),e.createElementVNode("div",pn,[e.createElementVNode("div",un,e.toDisplayString(o.title),1),e.createElementVNode("div",{class:"stat-card__value",style:e.normalizeStyle({color:o.color})},e.toDisplayString(o.value.toLocaleString()),5)])])]),_:2},1024))),128))]),e.createElementVNode("div",fn,[e.createVNode(e.unref(A.Card),{class:"dashboard__quick"},{header:e.withCtx(()=>[...i[0]||(i[0]=[e.createElementVNode("span",{class:"card-title"},"快捷入口",-1)])]),default:e.withCtx(()=>[e.createElementVNode("div",hn,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,o=>(e.openBlock(),e.createBlock(a,{key:o.path,to:o.path,class:"quick-link"},{default:e.withCtx(()=>[e.createElementVNode("span",_n,e.toDisplayString(o.icon),1),e.createElementVNode("span",Vn,e.toDisplayString(o.title),1)]),_:2},1032,["to"]))),128))])]),_:1}),e.createVNode(e.unref(A.Card),{class:"dashboard__activity"},{header:e.withCtx(()=>[...i[1]||(i[1]=[e.createElementVNode("span",{class:"card-title"},"最近活动",-1)])]),default:e.withCtx(()=>[e.createElementVNode("div",gn,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.value,(o,m)=>(e.openBlock(),e.createElementBlock("div",{key:m,class:"activity-item"},[e.createVNode(e.unref(A.Tag),{type:o.type,size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o.user),1)]),_:2},1032,["type"]),e.createElementVNode("span",Nn,e.toDisplayString(o.action),1),e.createElementVNode("span",yn,e.toDisplayString(o.time),1)]))),128))])]),_:1})]),e.createVNode(e.unref(A.Card),{class:"dashboard__system"},{header:e.withCtx(()=>[...i[2]||(i[2]=[e.createElementVNode("span",{class:"card-title"},"系统信息",-1)])]),default:e.withCtx(()=>[e.createElementVNode("div",En,[i[5]||(i[5]=e.createElementVNode("div",{class:"system-info__item"},[e.createElementVNode("span",{class:"system-info__label"},"系统版本"),e.createElementVNode("span",{class:"system-info__value"},"v1.0.0")],-1)),i[6]||(i[6]=e.createElementVNode("div",{class:"system-info__item"},[e.createElementVNode("span",{class:"system-info__label"},"Vue 版本"),e.createElementVNode("span",{class:"system-info__value"},"3.4.21")],-1)),i[7]||(i[7]=e.createElementVNode("div",{class:"system-info__item"},[e.createElementVNode("span",{class:"system-info__label"},"构建工具"),e.createElementVNode("span",{class:"system-info__value"},"Vite 5")],-1)),i[8]||(i[8]=e.createElementVNode("div",{class:"system-info__item"},[e.createElementVNode("span",{class:"system-info__label"},"UI 组件库"),e.createElementVNode("span",{class:"system-info__value"},"xto")],-1)),e.createElementVNode("div",kn,[i[3]||(i[3]=e.createElementVNode("span",{class:"system-info__label"},"服务器状态",-1)),e.createVNode(e.unref(A.Progress),{percentage:75,status:"success"})]),e.createElementVNode("div",Cn,[i[4]||(i[4]=e.createElementVNode("span",{class:"system-info__label"},"内存使用",-1)),e.createVNode(e.unref(A.Progress),{percentage:45})])])]),_:1})])}}}),[["__scopeId","data-v-44648cb1"]])},Symbol.toStringTag,{value:"Module"})),wn={class:"user-page"},Bn={class:"toolbar"},Sn={class:"data-table"},xn={key:0},bn={key:1},Dn={class:"pagination-wrapper"},Ie=Object.freeze(Object.defineProperty({__proto__:null,default:O(e.defineComponent({__name:"index",setup(t){const l=[{id:1,username:"admin",nickname:"管理员",email:"admin@example.com",phone:"13800138001",status:C.ENABLED,roles:["admin"],createTime:"2024-01-01 10:00:00"},{id:2,username:"zhangsan",nickname:"张三",email:"zhangsan@example.com",phone:"13800138002",status:C.ENABLED,roles:["editor"],createTime:"2024-01-02 10:00:00"},{id:3,username:"lisi",nickname:"李四",email:"lisi@example.com",phone:"13800138003",status:C.DISABLED,roles:["viewer"],createTime:"2024-01-03 10:00:00"},{id:4,username:"wangwu",nickname:"王五",email:"wangwu@example.com",phone:"13800138004",status:C.ENABLED,roles:["editor"],createTime:"2024-01-04 10:00:00"},{id:5,username:"zhaoliu",nickname:"赵六",email:"zhaoliu@example.com",phone:"13800138005",status:C.ENABLED,roles:["viewer"],createTime:"2024-01-05 10:00:00"}],n=e.ref(!1),s=e.ref([]),d=e.ref(0),i=e.ref(1),a=e.ref(10),o=e.reactive({keyword:"",status:void 0}),m=e.ref(!1),g=e.computed(()=>V.id?"编辑用户":"新增用户"),V=e.reactive({id:0,username:"",nickname:"",email:"",phone:"",status:C.ENABLED,roles:[]}),b={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],nickname:[{required:!0,message:"请输入昵称",trigger:"blur"}],email:[{required:!0,message:"请输入邮箱",trigger:"blur"},{type:"email",message:"请输入正确的邮箱格式",trigger:"blur"}]},p=e.ref(),k=()=>{n.value=!0,setTimeout(()=>{let u=[...l];o.keyword&&(u=u.filter(c=>c.username.includes(o.keyword)||c.nickname.includes(o.keyword))),o.status!==void 0&&(u=u.filter(c=>c.status===o.status)),d.value=u.length,s.value=u.slice((i.value-1)*a.value,i.value*a.value),n.value=!1},300)},S=()=>{i.value=1,k()},_=()=>{o.keyword="",o.status=void 0,i.value=1,k()},f=()=>{Object.assign(V,{id:0,username:"",nickname:"",email:"",phone:"",status:C.ENABLED,roles:[]}),m.value=!0},D=u=>{Object.assign(V,u),m.value=!0},F=u=>{z.Message.success("删除成功"),k()},q=async()=>{var u;try{await((u=p.value)==null?void 0:u.validate()),z.Message.success(V.id?"编辑成功":"新增成功"),m.value=!1,k()}catch(c){console.error(c)}},I=u=>{z.Message.success(`已${u.status===C.ENABLED?"启用":"禁用"}用户 ${u.username}`)};return e.onMounted(()=>{k()}),(u,c)=>(e.openBlock(),e.createElementBlock("div",wn,[e.createVNode(e.unref(A.Card),{class:"search-card"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Form),{model:o,inline:""},{default:e.withCtx(()=>[e.createVNode(e.unref(h.FormItem),{label:"关键词"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:o.keyword,"onUpdate:modelValue":c[0]||(c[0]=N=>o.keyword=N),placeholder:"用户名/昵称",clearable:"",onKeyup:e.withKeys(S,["enter"])},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"状态"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Select),{modelValue:o.status,"onUpdate:modelValue":c[1]||(c[1]=N=>o.status=N),options:e.unref(_e),placeholder:"请选择",clearable:""},null,8,["modelValue","options"])]),_:1}),e.createVNode(e.unref(h.FormItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(w.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(w.Button),{type:"primary",onClick:S},{default:e.withCtx(()=>[...c[11]||(c[11]=[e.createTextVNode("搜索",-1)])]),_:1}),e.createVNode(e.unref(w.Button),{onClick:_},{default:e.withCtx(()=>[...c[12]||(c[12]=[e.createTextVNode("重置",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["model"])]),_:1}),e.createVNode(e.unref(A.Card),{class:"table-card"},{default:e.withCtx(()=>[e.createElementVNode("div",Bn,[e.createVNode(e.unref(w.Button),{type:"primary",onClick:f},{default:e.withCtx(()=>[...c[13]||(c[13]=[e.createTextVNode("新增用户",-1)])]),_:1})]),e.createElementVNode("table",Sn,[c[18]||(c[18]=e.createElementVNode("thead",null,[e.createElementVNode("tr",null,[e.createElementVNode("th",null,"ID"),e.createElementVNode("th",null,"用户名"),e.createElementVNode("th",null,"昵称"),e.createElementVNode("th",null,"邮箱"),e.createElementVNode("th",null,"手机号"),e.createElementVNode("th",null,"角色"),e.createElementVNode("th",null,"状态"),e.createElementVNode("th",null,"创建时间"),e.createElementVNode("th",null,"操作")])],-1)),e.createElementVNode("tbody",null,[n.value?(e.openBlock(),e.createElementBlock("tr",xn,[...c[14]||(c[14]=[e.createElementVNode("td",{colspan:"9",class:"loading-cell"},"加载中...",-1)])])):s.value.length===0?(e.openBlock(),e.createElementBlock("tr",bn,[...c[15]||(c[15]=[e.createElementVNode("td",{colspan:"9",class:"empty-cell"},"暂无数据",-1)])])):(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:2},e.renderList(s.value,N=>(e.openBlock(),e.createElementBlock("tr",{key:N.id},[e.createElementVNode("td",null,e.toDisplayString(N.id),1),e.createElementVNode("td",null,e.toDisplayString(N.username),1),e.createElementVNode("td",null,e.toDisplayString(N.nickname),1),e.createElementVNode("td",null,e.toDisplayString(N.email),1),e.createElementVNode("td",null,e.toDisplayString(N.phone),1),e.createElementVNode("td",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(N.roles,$=>(e.openBlock(),e.createBlock(e.unref(A.Tag),{key:$,size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString($),1)]),_:2},1024))),128))]),e.createElementVNode("td",null,[e.createVNode(e.unref(h.Switch),{"model-value":N.status===e.unref(C).ENABLED,"onUpdate:modelValue":$=>{N.status=$?e.unref(C).ENABLED:e.unref(C).DISABLED,I(N)}},null,8,["model-value","onUpdate:modelValue"])]),e.createElementVNode("td",null,e.toDisplayString(N.createTime),1),e.createElementVNode("td",null,[e.createVNode(e.unref(w.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(w.Button),{type:"primary",link:"",size:"small",onClick:$=>D(N)},{default:e.withCtx(()=>[...c[16]||(c[16]=[e.createTextVNode("编辑",-1)])]),_:1},8,["onClick"]),e.createVNode(e.unref(z.Popconfirm),{title:"确定删除该用户吗?",onConfirm:$=>F(N.id)},{default:e.withCtx(()=>[e.createVNode(e.unref(w.Button),{type:"danger",link:"",size:"small"},{default:e.withCtx(()=>[...c[17]||(c[17]=[e.createTextVNode("删除",-1)])]),_:1})]),_:1},8,["onConfirm"])]),_:2},1024)])]))),128))])]),e.createElementVNode("div",Dn,[e.createVNode(e.unref(A.Pagination),{"current-page":i.value,"onUpdate:currentPage":c[2]||(c[2]=N=>i.value=N),"page-size":a.value,"onUpdate:pageSize":c[3]||(c[3]=N=>a.value=N),total:d.value,"page-sizes":[10,20,50,100],layout:"total, sizes, prev, pager, next",onCurrentChange:k,onSizeChange:k},null,8,["current-page","page-size","total"])])]),_:1}),e.createVNode(e.unref(z.Modal),{modelValue:m.value,"onUpdate:modelValue":c[10]||(c[10]=N=>m.value=N),title:g.value,width:"500px"},{footer:e.withCtx(()=>[e.createVNode(e.unref(w.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(w.Button),{onClick:c[9]||(c[9]=N=>m.value=!1)},{default:e.withCtx(()=>[...c[19]||(c[19]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(e.unref(w.Button),{type:"primary",onClick:q},{default:e.withCtx(()=>[...c[20]||(c[20]=[e.createTextVNode("确定",-1)])]),_:1})]),_:1})]),default:e.withCtx(()=>[e.createVNode(e.unref(h.Form),{ref_key:"formRef",ref:p,model:V,rules:b,"label-width":"80px"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.FormItem),{label:"用户名",prop:"username"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:V.username,"onUpdate:modelValue":c[4]||(c[4]=N=>V.username=N),placeholder:"请输入用户名"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"昵称",prop:"nickname"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:V.nickname,"onUpdate:modelValue":c[5]||(c[5]=N=>V.nickname=N),placeholder:"请输入昵称"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"邮箱",prop:"email"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:V.email,"onUpdate:modelValue":c[6]||(c[6]=N=>V.email=N),placeholder:"请输入邮箱"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"手机号",prop:"phone"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:V.phone,"onUpdate:modelValue":c[7]||(c[7]=N=>V.phone=N),placeholder:"请输入手机号"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"状态"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Switch),{modelValue:V.status,"onUpdate:modelValue":c[8]||(c[8]=N=>V.status=N),"active-value":e.unref(C).ENABLED,"inactive-value":e.unref(C).DISABLED},null,8,["modelValue","active-value","inactive-value"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])]))}}),[["__scopeId","data-v-d2491ae0"]])},Symbol.toStringTag,{value:"Module"})),Tn={class:"role-page"},$n={class:"toolbar"},Ln={class:"data-table"},In={key:0},Mn={key:1},An={class:"pagination-wrapper"},Me=Object.freeze(Object.defineProperty({__proto__:null,default:O(e.defineComponent({__name:"index",setup(t){const l=[{id:1,name:"超级管理员",code:"admin",description:"拥有所有权限",status:C.ENABLED,permissions:["*"],createTime:"2024-01-01 10:00:00"},{id:2,name:"编辑",code:"editor",description:"内容编辑权限",status:C.ENABLED,permissions:["user:read","user:write"],createTime:"2024-01-02 10:00:00"},{id:3,name:"访客",code:"viewer",description:"只读权限",status:C.ENABLED,permissions:["user:read"],createTime:"2024-01-03 10:00:00"}],n=e.ref(!1),s=e.ref([]),d=e.ref(0),i=e.ref(1),a=e.ref(10),o=e.reactive({keyword:"",status:void 0}),m=e.ref(!1),g=e.computed(()=>V.id?"编辑角色":"新增角色"),V=e.reactive({id:0,name:"",code:"",description:"",status:C.ENABLED,permissions:[]}),b={name:[{required:!0,message:"请输入角色名称",trigger:"blur"}],code:[{required:!0,message:"请输入角色编码",trigger:"blur"}]},p=e.ref(),k=()=>{n.value=!0,setTimeout(()=>{let I=[...l];o.keyword&&(I=I.filter(u=>u.name.includes(o.keyword)||u.code.includes(o.keyword))),o.status!==void 0&&(I=I.filter(u=>u.status===o.status)),d.value=I.length,s.value=I.slice((i.value-1)*a.value,i.value*a.value),n.value=!1},300)},S=()=>{i.value=1,k()},_=()=>{o.keyword="",o.status=void 0,i.value=1,k()},f=()=>{Object.assign(V,{id:0,name:"",code:"",description:"",status:C.ENABLED,permissions:[]}),m.value=!0},D=I=>{Object.assign(V,I),m.value=!0},F=I=>{z.Message.success("删除成功"),k()},q=async()=>{var I;try{await((I=p.value)==null?void 0:I.validate()),z.Message.success(V.id?"编辑成功":"新增成功"),m.value=!1,k()}catch(u){console.error(u)}};return e.onMounted(()=>{k()}),(I,u)=>(e.openBlock(),e.createElementBlock("div",Tn,[e.createVNode(e.unref(A.Card),{class:"search-card"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Form),{model:o,inline:""},{default:e.withCtx(()=>[e.createVNode(e.unref(h.FormItem),{label:"关键词"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:o.keyword,"onUpdate:modelValue":u[0]||(u[0]=c=>o.keyword=c),placeholder:"角色名称/编码",clearable:"",onKeyup:e.withKeys(S,["enter"])},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"状态"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Select),{modelValue:o.status,"onUpdate:modelValue":u[1]||(u[1]=c=>o.status=c),options:e.unref(_e),placeholder:"请选择",clearable:""},null,8,["modelValue","options"])]),_:1}),e.createVNode(e.unref(h.FormItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(w.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(w.Button),{type:"primary",onClick:S},{default:e.withCtx(()=>[...u[10]||(u[10]=[e.createTextVNode("搜索",-1)])]),_:1}),e.createVNode(e.unref(w.Button),{onClick:_},{default:e.withCtx(()=>[...u[11]||(u[11]=[e.createTextVNode("重置",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["model"])]),_:1}),e.createVNode(e.unref(A.Card),{class:"table-card"},{default:e.withCtx(()=>[e.createElementVNode("div",$n,[e.createVNode(e.unref(w.Button),{type:"primary",onClick:f},{default:e.withCtx(()=>[...u[12]||(u[12]=[e.createTextVNode("新增角色",-1)])]),_:1})]),e.createElementVNode("table",Ln,[u[17]||(u[17]=e.createElementVNode("thead",null,[e.createElementVNode("tr",null,[e.createElementVNode("th",null,"ID"),e.createElementVNode("th",null,"角色名称"),e.createElementVNode("th",null,"角色编码"),e.createElementVNode("th",null,"描述"),e.createElementVNode("th",null,"状态"),e.createElementVNode("th",null,"创建时间"),e.createElementVNode("th",null,"操作")])],-1)),e.createElementVNode("tbody",null,[n.value?(e.openBlock(),e.createElementBlock("tr",In,[...u[13]||(u[13]=[e.createElementVNode("td",{colspan:"7",class:"loading-cell"},"加载中...",-1)])])):s.value.length===0?(e.openBlock(),e.createElementBlock("tr",Mn,[...u[14]||(u[14]=[e.createElementVNode("td",{colspan:"7",class:"empty-cell"},"暂无数据",-1)])])):(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:2},e.renderList(s.value,c=>(e.openBlock(),e.createElementBlock("tr",{key:c.id},[e.createElementVNode("td",null,e.toDisplayString(c.id),1),e.createElementVNode("td",null,e.toDisplayString(c.name),1),e.createElementVNode("td",null,[e.createVNode(e.unref(A.Tag),{type:"primary",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(c.code),1)]),_:2},1024)]),e.createElementVNode("td",null,e.toDisplayString(c.description),1),e.createElementVNode("td",null,[e.createVNode(e.unref(A.Tag),{type:c.status===e.unref(C).ENABLED?"success":"danger",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(c.status===e.unref(C).ENABLED?"启用":"禁用"),1)]),_:2},1032,["type"])]),e.createElementVNode("td",null,e.toDisplayString(c.createTime),1),e.createElementVNode("td",null,[e.createVNode(e.unref(w.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(w.Button),{type:"primary",link:"",size:"small",onClick:N=>D(c)},{default:e.withCtx(()=>[...u[15]||(u[15]=[e.createTextVNode("编辑",-1)])]),_:1},8,["onClick"]),e.createVNode(e.unref(z.Popconfirm),{title:"确定删除该角色吗?",onConfirm:N=>F(c.id)},{default:e.withCtx(()=>[e.createVNode(e.unref(w.Button),{type:"danger",link:"",size:"small"},{default:e.withCtx(()=>[...u[16]||(u[16]=[e.createTextVNode("删除",-1)])]),_:1})]),_:1},8,["onConfirm"])]),_:2},1024)])]))),128))])]),e.createElementVNode("div",An,[e.createVNode(e.unref(A.Pagination),{"current-page":i.value,"onUpdate:currentPage":u[2]||(u[2]=c=>i.value=c),"page-size":a.value,"onUpdate:pageSize":u[3]||(u[3]=c=>a.value=c),total:d.value,"page-sizes":[10,20,50,100],layout:"total, sizes, prev, pager, next",onCurrentChange:k,onSizeChange:k},null,8,["current-page","page-size","total"])])]),_:1}),e.createVNode(e.unref(z.Modal),{modelValue:m.value,"onUpdate:modelValue":u[9]||(u[9]=c=>m.value=c),title:g.value,width:"500px"},{footer:e.withCtx(()=>[e.createVNode(e.unref(w.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(w.Button),{onClick:u[8]||(u[8]=c=>m.value=!1)},{default:e.withCtx(()=>[...u[18]||(u[18]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(e.unref(w.Button),{type:"primary",onClick:q},{default:e.withCtx(()=>[...u[19]||(u[19]=[e.createTextVNode("确定",-1)])]),_:1})]),_:1})]),default:e.withCtx(()=>[e.createVNode(e.unref(h.Form),{ref_key:"formRef",ref:p,model:V,rules:b,"label-width":"80px"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.FormItem),{label:"角色名称",prop:"name"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:V.name,"onUpdate:modelValue":u[4]||(u[4]=c=>V.name=c),placeholder:"请输入角色名称"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"角色编码",prop:"code"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:V.code,"onUpdate:modelValue":u[5]||(u[5]=c=>V.code=c),placeholder:"请输入角色编码"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"描述"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:V.description,"onUpdate:modelValue":u[6]||(u[6]=c=>V.description=c),placeholder:"请输入描述"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"状态"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Switch),{modelValue:V.status,"onUpdate:modelValue":u[7]||(u[7]=c=>V.status=c),"active-value":e.unref(C).ENABLED,"inactive-value":e.unref(C).DISABLED},null,8,["modelValue","active-value","inactive-value"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])]))}}),[["__scopeId","data-v-8ad30bc6"]])},Symbol.toStringTag,{value:"Module"})),zn={class:"menu-page"},Un={class:"toolbar"},Rn={class:"menu-tree"},Fn={class:"tree-table"},Pn={class:"tree-row tree-row--level-0"},On=["onClick"],jn=["onClick"],Ae=Object.freeze(Object.defineProperty({__proto__:null,default:O(e.defineComponent({__name:"index",setup(t){const l=[{id:1,parentId:null,name:"Dashboard",path:"/dashboard",component:"dashboard/index",redirect:"",icon:"dashboard",title:"仪表盘",type:U.MENU,sort:1,status:C.ENABLED,hidden:!1,keepAlive:!0},{id:2,parentId:null,name:"System",path:"/system",component:"",redirect:"/system/user",icon:"setting",title:"系统管理",type:U.DIRECTORY,sort:2,status:C.ENABLED,hidden:!1,keepAlive:!1,children:[{id:21,parentId:2,name:"SystemUser",path:"/system/user",component:"system/user/index",redirect:"",icon:"user",title:"用户管理",type:U.MENU,sort:1,status:C.ENABLED,hidden:!1,keepAlive:!0},{id:22,parentId:2,name:"SystemRole",path:"/system/role",component:"system/role/index",redirect:"",icon:"role",title:"角色管理",type:U.MENU,sort:2,status:C.ENABLED,hidden:!1,keepAlive:!0},{id:23,parentId:2,name:"SystemMenu",path:"/system/menu",component:"system/menu/index",redirect:"",icon:"menu",title:"菜单管理",type:U.MENU,sort:3,status:C.ENABLED,hidden:!1,keepAlive:!0}]}],n=e.ref(!1),s=e.ref([]),d=e.ref(!1),i=e.computed(()=>a.id?"编辑菜单":"新增菜单"),a=e.reactive({id:0,parentId:null,name:"",path:"",component:"",redirect:"",icon:"",title:"",type:U.MENU,sort:0,status:C.ENABLED,hidden:!1,keepAlive:!0}),o={name:[{required:!0,message:"请输入菜单名称",trigger:"blur"}],path:[{required:!0,message:"请输入路由路径",trigger:"blur"}],title:[{required:!0,message:"请输入菜单标题",trigger:"blur"}]},m=e.ref(),g=()=>{n.value=!0,setTimeout(()=>{s.value=l,n.value=!1},300)},V=(S=null)=>{Object.assign(a,{id:0,parentId:S,name:"",path:"",component:"",redirect:"",icon:"",title:"",type:U.MENU,sort:0,status:C.ENABLED,hidden:!1,keepAlive:!0}),d.value=!0},b=S=>{Object.assign(a,S),d.value=!0},p=async()=>{var S;try{await((S=m.value)==null?void 0:S.validate()),z.Message.success(a.id?"编辑成功":"新增成功"),d.value=!1,g()}catch(_){console.error(_)}},k=S=>({dashboard:"📊",system:"⚙️",user:"👤",role:"👥",menu:"📋",setting:"🔧"})[S||""]||"📄";return e.onMounted(()=>{g()}),(S,_)=>(e.openBlock(),e.createElementBlock("div",zn,[e.createVNode(e.unref(A.Card),{class:"menu-card"},{default:e.withCtx(()=>[e.createElementVNode("div",Un,[e.createVNode(e.unref(w.Button),{type:"primary",onClick:_[0]||(_[0]=f=>V())},{default:e.withCtx(()=>[..._[14]||(_[14]=[e.createTextVNode("新增菜单",-1)])]),_:1})]),e.createElementVNode("div",Rn,[e.createElementVNode("table",Fn,[_[19]||(_[19]=e.createElementVNode("thead",null,[e.createElementVNode("tr",null,[e.createElementVNode("th",null,"菜单名称"),e.createElementVNode("th",null,"图标"),e.createElementVNode("th",null,"路由路径"),e.createElementVNode("th",null,"类型"),e.createElementVNode("th",null,"排序"),e.createElementVNode("th",null,"状态"),e.createElementVNode("th",null,"操作")])],-1)),e.createElementVNode("tbody",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,f=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:f.id},[e.createElementVNode("tr",Pn,[e.createElementVNode("td",null,[e.createElementVNode("span",{class:"menu-name",onClick:D=>b(f)},e.toDisplayString(f.title),9,On)]),e.createElementVNode("td",null,e.toDisplayString(k(f.icon)),1),e.createElementVNode("td",null,e.toDisplayString(f.path),1),e.createElementVNode("td",null,[e.createVNode(e.unref(A.Tag),{type:f.type===e.unref(U).DIRECTORY?"primary":f.type===e.unref(U).MENU?"success":"warning",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(f.type===e.unref(U).DIRECTORY?"目录":f.type===e.unref(U).MENU?"菜单":"按钮"),1)]),_:2},1032,["type"])]),e.createElementVNode("td",null,e.toDisplayString(f.sort),1),e.createElementVNode("td",null,[e.createVNode(e.unref(A.Tag),{type:f.status===e.unref(C).ENABLED?"success":"danger",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(f.status===e.unref(C).ENABLED?"启用":"禁用"),1)]),_:2},1032,["type"])]),e.createElementVNode("td",null,[e.createVNode(e.unref(w.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(w.Button),{type:"primary",link:"",size:"small",onClick:D=>V(f.id)},{default:e.withCtx(()=>[..._[15]||(_[15]=[e.createTextVNode("新增",-1)])]),_:1},8,["onClick"]),e.createVNode(e.unref(w.Button),{type:"primary",link:"",size:"small",onClick:D=>b(f)},{default:e.withCtx(()=>[..._[16]||(_[16]=[e.createTextVNode("编辑",-1)])]),_:1},8,["onClick"])]),_:2},1024)])]),f.children?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(f.children,D=>(e.openBlock(),e.createElementBlock("tr",{key:D.id,class:"tree-row tree-row--level-1"},[e.createElementVNode("td",null,[_[17]||(_[17]=e.createElementVNode("span",{class:"tree-indent"},null,-1)),e.createElementVNode("span",{class:"menu-name",onClick:F=>b(D)},e.toDisplayString(D.title),9,jn)]),e.createElementVNode("td",null,e.toDisplayString(k(D.icon)),1),e.createElementVNode("td",null,e.toDisplayString(D.path),1),e.createElementVNode("td",null,[e.createVNode(e.unref(A.Tag),{type:D.type===e.unref(U).DIRECTORY?"primary":D.type===e.unref(U).MENU?"success":"warning",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(D.type===e.unref(U).DIRECTORY?"目录":D.type===e.unref(U).MENU?"菜单":"按钮"),1)]),_:2},1032,["type"])]),e.createElementVNode("td",null,e.toDisplayString(D.sort),1),e.createElementVNode("td",null,[e.createVNode(e.unref(A.Tag),{type:D.status===e.unref(C).ENABLED?"success":"danger",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(D.status===e.unref(C).ENABLED?"启用":"禁用"),1)]),_:2},1032,["type"])]),e.createElementVNode("td",null,[e.createVNode(e.unref(w.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(w.Button),{type:"primary",link:"",size:"small",onClick:F=>b(D)},{default:e.withCtx(()=>[..._[18]||(_[18]=[e.createTextVNode("编辑",-1)])]),_:1},8,["onClick"])]),_:2},1024)])]))),128)):e.createCommentVNode("",!0)],64))),128))])])])]),_:1}),e.createVNode(e.unref(z.Modal),{modelValue:d.value,"onUpdate:modelValue":_[13]||(_[13]=f=>d.value=f),title:i.value,width:"600px"},{footer:e.withCtx(()=>[e.createVNode(e.unref(w.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(w.Button),{onClick:_[12]||(_[12]=f=>d.value=!1)},{default:e.withCtx(()=>[..._[20]||(_[20]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(e.unref(w.Button),{type:"primary",onClick:p},{default:e.withCtx(()=>[..._[21]||(_[21]=[e.createTextVNode("确定",-1)])]),_:1})]),_:1})]),default:e.withCtx(()=>[e.createVNode(e.unref(h.Form),{ref_key:"formRef",ref:m,model:a,rules:o,"label-width":"80px"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.FormItem),{label:"上级菜单"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:a.parentId,"onUpdate:modelValue":_[1]||(_[1]=f=>a.parentId=f),placeholder:"上级菜单ID",disabled:""},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"菜单类型"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Select),{modelValue:a.type,"onUpdate:modelValue":_[2]||(_[2]=f=>a.type=f),options:e.unref($e)},null,8,["modelValue","options"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"菜单名称",prop:"name"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:a.name,"onUpdate:modelValue":_[3]||(_[3]=f=>a.name=f),placeholder:"请输入菜单名称(路由name)"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"菜单标题",prop:"title"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:a.title,"onUpdate:modelValue":_[4]||(_[4]=f=>a.title=f),placeholder:"请输入菜单标题"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"路由路径",prop:"path"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:a.path,"onUpdate:modelValue":_[5]||(_[5]=f=>a.path=f),placeholder:"请输入路由路径"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"组件路径"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:a.component,"onUpdate:modelValue":_[6]||(_[6]=f=>a.component=f),placeholder:"请输入组件路径"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"图标"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:a.icon,"onUpdate:modelValue":_[7]||(_[7]=f=>a.icon=f),placeholder:"请输入图标名称"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"排序"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.InputNumber),{modelValue:a.sort,"onUpdate:modelValue":_[8]||(_[8]=f=>a.sort=f),min:0},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"状态"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Switch),{modelValue:a.status,"onUpdate:modelValue":_[9]||(_[9]=f=>a.status=f),"active-value":e.unref(C).ENABLED,"inactive-value":e.unref(C).DISABLED},null,8,["modelValue","active-value","inactive-value"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"隐藏"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Switch),{modelValue:a.hidden,"onUpdate:modelValue":_[10]||(_[10]=f=>a.hidden=f)},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"缓存"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Switch),{modelValue:a.keepAlive,"onUpdate:modelValue":_[11]||(_[11]=f=>a.keepAlive=f)},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])]))}}),[["__scopeId","data-v-2a272a68"]])},Symbol.toStringTag,{value:"Module"}));r.Footer=_o,r.Forbidden=be,r.Gender=Te,r.GenderOptions=rn,r.GenderText=ln,r.Header=ae,r.Layout=he,r.Login=Se,r.MenuType=U,r.MenuTypeOptions=$e,r.MenuTypeText=an,r.NotFound=xe,r.Sidebar=ee,r.Status=C,r.StatusOptions=_e,r.StatusText=nn,r.Tabs=po,r.batchDeleteUsers=en,r.clearToken=ue,r.createLayoutRoute=Lo,r.createMenu=Yo,r.createRole=Po,r.createRouter=Io,r.createUser=Qo,r.defaultDynamicRoutes=qe,r.deleteMenu=Xo,r.deleteRole=jo,r.deleteUser=vo,r.errorRoute=ie,r.getMenuList=Ho,r.getMenuTree=Ko,r.getRefreshToken=He,r.getRoleDetail=Fo,r.getRoleList=Ro,r.getToken=ne,r.getTokenExpire=ke,r.getUserDetail=Go,r.getUserInfo=zo,r.getUserList=Jo,r.hasPermission=To,r.hasRole=De,r.hasToken=fe,r.http=L,r.isAdmin=$o,r.isTokenExpired=Be,r.layoutRoute=de,r.local=E,r.localStorageUtil=G,r.login=Mo,r.logout=Ao,r.mockMenuData=Ne,r.permissionDirective=sn,r.refreshToken=Uo,r.resetPassword=on,r.resetRouter=Ye,r.router=le,r.session=Oe,r.sessionStorageUtil=Q,r.setRefreshToken=Ee,r.setToken=ye,r.setTokenExpire=Ce,r.setTokenInfo=we,r.staticRoutes=se,r.updateMenu=Wo,r.updateRole=Oo,r.updateRoleStatus=qo,r.updateUser=Zo,r.updateUserStatus=tn,r.useApp=So,r.useAppStore=W,r.useAuth=xo,r.useAuthStore=v,r.useForm=bo,r.useMenuStore=Z,r.useTable=Do,r.useUserStore=j,Object.defineProperty(r,Symbol.toStringTag,{value:"Module"})});
1
+ (function(s,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("pinia"),require("vue-router"),require("@xto/navigation"),require("@xto/base"),require("@xto/form"),require("@xto/feedback"),require("axios"),require("@xto/data")):typeof define=="function"&&define.amd?define(["exports","vue","pinia","vue-router","@xto/navigation","@xto/base","@xto/form","@xto/feedback","axios","@xto/data"],e):(s=typeof globalThis<"u"?globalThis:s||self,e(s.XtoFronted={},s.Vue,s.Pinia,s.VueRouter,s.navigation,s.base,s.form,s.feedback,s.axios,s.data))})(this,function(s,e,v,R,q,E,h,A,Oe,$){"use strict";const H="xto_",Ve=t=>({get(l){const o=t.getItem(H+l);if(!o)return null;try{return JSON.parse(o)}catch{return o}},set(l,o){if(o==null){t.removeItem(H+l);return}const i=typeof o=="string"?o:JSON.stringify(o);t.setItem(H+l,i)},remove(l){t.removeItem(H+l)},clear(){Object.keys(t).forEach(o=>{o.startsWith(H)&&t.removeItem(o)})}}),W=Ve(window.localStorage),X=Ve(window.sessionStorage),k={get:W.get,set:W.set,remove:W.remove,clear:W.clear},je={get:X.get,set:X.set,remove:X.remove,clear:X.clear},K=v.defineStore("app",()=>{const t=e.ref(k.get("appName")||"XTO App"),l=e.ref(k.get("indexPath")||"/dashboard"),o=e.ref(k.get("isDark")||!1),i=e.ref(k.get("theme")||"light"),c=e.ref(k.get("layout")||"sidebar"),d=e.ref(k.get("isCollapsed")||!1),r=e.ref(k.get("showTabs")??!0),n=e.ref(k.get("showFooter")??!0),u=e.ref(k.get("showBreadcrumb")??!0),y=e.ref(k.get("primaryColor")||"#409eff"),_=e.ref([]),b=e.computed(()=>o.value?"dark":"light"),p=D=>{t.value=D,k.set("appName",D)},C=D=>{l.value=D,k.set("indexPath",D)},S=()=>{o.value=!o.value,i.value=o.value?"dark":"light",V()},N=D=>{i.value=D,o.value=D==="dark",V()},V=()=>{const D=document.documentElement;o.value?D.classList.add("dark"):D.classList.remove("dark"),k.set("isDark",o.value),k.set("theme",i.value)},T=()=>{d.value=!d.value,k.set("isCollapsed",d.value)},P=D=>{c.value=D,k.set("layout",D)},z=()=>{r.value=!r.value,k.set("showTabs",r.value)},w=()=>{n.value=!n.value,k.set("showFooter",n.value)},m=()=>{u.value=!u.value,k.set("showBreadcrumb",u.value)},a=D=>{y.value=D,document.documentElement.style.setProperty("--color-primary",D),k.set("primaryColor",D)},f=D=>{_.value.includes(D)||_.value.push(D)},U=D=>{const ne=_.value.indexOf(D);ne>-1&&_.value.splice(ne,1)},ue=()=>{_.value=[]},fe=()=>{V(),y.value!=="#409eff"&&document.documentElement.style.setProperty("--color-primary",y.value)};return e.watch(o,V),{appName:t,indexPath:l,isDark:o,theme:i,layout:c,isCollapsed:d,showTabs:r,showFooter:n,showBreadcrumb:u,primaryColor:y,cachedViews:_,themeClass:b,setAppName:p,setIndexPath:C,toggleTheme:S,toggleCollapse:T,setTheme:N,setLayout:P,toggleTabs:z,toggleFooter:w,toggleBreadcrumb:m,setPrimaryColor:a,addCachedView:f,removeCachedView:U,clearCachedViews:ue,initTheme:fe}}),Ne="/vite.svg",qe=(t,l,o)=>{const i=t[l];return i?typeof i=="function"?i():Promise.resolve(i):new Promise((c,d)=>{(typeof queueMicrotask=="function"?queueMicrotask:setTimeout)(d.bind(null,new Error("Unknown variable dynamic import: "+l+(l.split("/").length!==o?". Note that variables only represent file names one level deep.":""))))})},oe=[{path:"/login",name:"Login",component:()=>Promise.resolve().then(()=>rn),meta:{title:"登录",hidden:!0}},{path:"/404",name:"NotFound",component:()=>Promise.resolve().then(()=>cn),meta:{title:"404",hidden:!0}},{path:"/403",name:"Forbidden",component:()=>Promise.resolve().then(()=>un),meta:{title:"403",hidden:!0}}],le={path:"/:pathMatch(.*)*",redirect:"/404",meta:{hidden:!0}},ae={path:"/",name:"Layout",component:()=>Promise.resolve().then(()=>Jt),redirect:"/dashboard",children:[{path:"/dashboard",name:"Dashboard",component:()=>Promise.resolve().then(()=>$e),meta:{title:"仪表盘",icon:"dashboard",keepAlive:!0,affix:!0}},{path:"/system/user",name:"SystemUser",component:()=>Promise.resolve().then(()=>Ae),meta:{title:"用户管理",icon:"user",keepAlive:!0}},{path:"/system/role",name:"SystemRole",component:()=>Promise.resolve().then(()=>Me),meta:{title:"角色管理",icon:"role",keepAlive:!0}},{path:"/system/menu",name:"SystemMenu",component:()=>Promise.resolve().then(()=>Ue),meta:{title:"菜单管理",icon:"menu",keepAlive:!0}}]},Ke=[{path:"/dashboard",name:"Dashboard",component:()=>Promise.resolve().then(()=>$e),meta:{title:"仪表盘",icon:"dashboard",keepAlive:!0,affix:!0}},{path:"/system",name:"System",redirect:"/system/user",meta:{title:"系统管理",icon:"setting"},children:[{path:"user",name:"SystemUser",component:()=>Promise.resolve().then(()=>Ae),meta:{title:"用户管理",icon:"user",keepAlive:!0}},{path:"role",name:"SystemRole",component:()=>Promise.resolve().then(()=>Me),meta:{title:"角色管理",icon:"role",keepAlive:!0}},{path:"menu",name:"SystemMenu",component:()=>Promise.resolve().then(()=>Ue),meta:{title:"菜单管理",icon:"menu",keepAlive:!0}}]}],_e=[{id:1,name:"Dashboard",path:"/dashboard",component:"dashboard/index",icon:"dashboard",title:"仪表盘",keepAlive:!0,affix:!0},{id:2,name:"System",path:"/system",redirect:"/system/user",icon:"setting",title:"系统管理",children:[{id:21,name:"SystemUser",path:"/system/user",component:"system/user/index",icon:"user",title:"用户管理",keepAlive:!0},{id:22,name:"SystemRole",path:"/system/role",component:"system/role/index",icon:"role",title:"角色管理",keepAlive:!0},{id:23,name:"SystemMenu",path:"/system/menu",component:"system/menu/index",icon:"menu",title:"菜单管理",keepAlive:!0}]}],re="token",se="refresh_token",ie="token_expire",ee=()=>k.get(re),ge=t=>{k.set(re,t)},Ye=()=>k.get(se),ye=t=>{k.set(se,t)},Ee=()=>k.get(ie),ke=t=>{k.set(ie,t)},Ce=t=>{ge(t.token),ye(t.refreshToken),ke(t.expireTime)},de=()=>{k.remove(re),k.remove(se),k.remove(ie)},we=()=>{const t=Ee();return t?Date.now()>t:!0},ce=()=>!!ee()&&!we(),O=v.defineStore("user",()=>{const t=e.ref(k.get("userInfo")),l=e.ref(k.get("roles")||[]),o=e.ref(k.get("permissions")||[]),i=e.computed(()=>!!t.value),c=e.computed(()=>{var p;return((p=t.value)==null?void 0:p.username)||""}),d=e.computed(()=>{var p;return((p=t.value)==null?void 0:p.nickname)||""}),r=e.computed(()=>{var p;return((p=t.value)==null?void 0:p.avatar)||""}),n=e.computed(()=>{var p;return(p=t.value)==null?void 0:p.id});return{userInfo:t,roles:l,permissions:o,isLoggedIn:i,username:c,nickname:d,avatar:r,userId:n,setUserInfo:p=>{t.value=p,l.value=p.roles||[],o.value=p.permissions||[],k.set("userInfo",p),k.set("roles",p.roles||[]),k.set("permissions",p.permissions||[])},clearUserInfo:()=>{t.value=null,l.value=[],o.value=[],k.remove("userInfo"),k.remove("roles"),k.remove("permissions")},hasPermission:p=>Array.isArray(p)?p.some(C=>o.value.includes(C)):o.value.includes(p),hasRole:p=>Array.isArray(p)?p.some(C=>l.value.includes(C)):l.value.includes(p)}}),te=R.createRouter({history:R.createWebHistory(),routes:[...oe,ae,le],scrollBehavior:()=>({left:0,top:0})}),He=["/login","/404","/403"];te.beforeEach(async(t,l,o)=>{const i=K();if(i.initTheme(),ce())if(t.path==="/login")o({path:"/"});else{const c=O();c.isLoggedIn||(c.setUserInfo({id:1,username:"admin",nickname:"管理员",avatar:"",email:"admin@example.com",phone:"13800138000",status:1,roles:["admin"],permissions:["*"],createTime:new Date().toISOString()}),J().setMenuList(_e)),t.name&&t.meta.keepAlive&&i.addCachedView(t.name),o()}else He.includes(t.path)?o():o("/login")});function We(){const t=R.createRouter({history:R.createWebHistory(),routes:[...oe,ae,le]});te.matcher=t.matcher}const J=v.defineStore("menu",()=>{const t=e.ref(k.get("menuList")||[]),l=e.computed(()=>t.value.length>0),o=r=>{t.value=r,k.set("menuList",r)},i=()=>{t.value=[],k.remove("menuList")},c=r=>r.filter(n=>!n.hidden).map(n=>{const u={path:n.path,name:n.name,meta:{title:n.title,icon:n.icon,keepAlive:n.keepAlive,hidden:n.hidden}};return n.redirect&&(u.redirect=n.redirect),n.component&&(u.component=()=>qe(Object.assign({}),`../views/${n.component}.vue`,3)),n.children&&n.children.length>0&&(u.children=c(n.children)),u});return{menuList:t,hasMenu:l,setMenuList:o,clearMenu:i,generateRoutes:c,addRoutes:r=>{c(r).forEach(u=>{te.addRoute("Layout",u)})}}}),G=v.defineStore("auth",()=>{const t=e.ref(ee()),l=e.computed(()=>ce()),o=e.ref(""),i=e.ref(""),c=e.ref(""),d=e.ref("/login");return{token:t,isLoggedIn:l,baseUrl:o,appId:i,clientId:c,loginPath:d,login:p=>{t.value=p.token,Ce(p)},logout:()=>{t.value=null,de()},setBaseUrl:p=>{o.value=p},setAppId:p=>{i.value=p},setClientId:p=>{c.value=p},setLoginPath:p=>{d.value=p}}}),Xe={class:"sidebar__logo"},Je={key:0,class:"sidebar__search"},Ge={key:0,class:"sidebar__search-results"},Qe=["onClick"],Ze={class:"sidebar__search-item-info"},ve={class:"sidebar__search-item-title"},et={key:0,class:"sidebar__search-item-parent"},tt={key:1,class:"sidebar__user"},nt={class:"sidebar__user-info"},ot={class:"sidebar__user-name"},lt={class:"sidebar__user-role"},at=e.defineComponent({__name:"Sidebar",setup(t){const l=R.useRoute(),o=R.useRouter(),i=J(),c=O(),d=G(),r=K(),n=e.ref(""),u=e.computed(()=>r.isCollapsed),y=e.computed(()=>l.path),_=e.computed(()=>r.isDark?"#1d1e1f":"#fff"),b=e.computed(()=>r.isDark?"#cfd3dc":"#303133"),p=e.computed(()=>"#409eff"),C=(w,m="")=>{const a=[];return w.forEach(f=>{f.children&&f.children.length>0?a.push(...C(f.children,f.title)):a.push({...f,parentTitle:m})}),a},S=e.computed(()=>n.value.trim()?C(i.menuList).filter(m=>m.title.toLowerCase().includes(n.value.toLowerCase())):[]),N=e.computed(()=>n.value.trim()?i.menuList.map(w=>{if(w.children&&w.children.length>0){const m=w.children.filter(a=>a.title.toLowerCase().includes(n.value.toLowerCase()));return m.length>0?{...w,children:m}:null}return w.title.toLowerCase().includes(n.value.toLowerCase())?w:null}).filter(Boolean):i.menuList),V=w=>{w&&w!==l.path&&(o.push(w),n.value="")},T=w=>{o.push(w),n.value=""},P=()=>{d.logout(),c.clearUserInfo(),i.clearMenu(),o.push("/login")},z=w=>({dashboard:"dashboard",system:"system",user:"user",role:"role",menu:"list",setting:"setting"})[w||""]||"file";return(w,m)=>{var a;return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["sidebar",{"sidebar--collapsed":u.value}])},[e.createElementVNode("div",Xe,[m[1]||(m[1]=e.createElementVNode("img",{src:Ne,alt:"Logo",class:"sidebar__logo-img"},null,-1)),e.withDirectives(e.createElementVNode("span",{class:"sidebar__logo-text"},e.toDisplayString(e.unref(r).appName),513),[[e.vShow,!u.value]])]),u.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Je,[e.createVNode(e.unref(h.Input),{modelValue:n.value,"onUpdate:modelValue":m[0]||(m[0]=f=>n.value=f),placeholder:"搜索菜单...",size:"small",clearable:""},null,8,["modelValue"]),S.value.length>0?(e.openBlock(),e.createElementBlock("div",Ge,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(S.value,f=>(e.openBlock(),e.createElementBlock("div",{key:f.path,class:"sidebar__search-item",onClick:U=>T(f.path)},[e.createVNode(e.unref(E.Icon),{name:z(f.icon),size:16},null,8,["name"]),e.createElementVNode("div",Ze,[e.createElementVNode("span",ve,e.toDisplayString(f.title),1),f.parentTitle?(e.openBlock(),e.createElementBlock("span",et,e.toDisplayString(f.parentTitle),1)):e.createCommentVNode("",!0)])],8,Qe))),128))])):e.createCommentVNode("",!0)])),e.createVNode(e.unref(q.Menu),{"default-active":y.value,mode:"vertical",collapse:u.value,"collapse-transition":!1,"background-color":_.value,"text-color":b.value,"active-text-color":p.value,class:"sidebar__menu",onSelect:V},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(N.value,f=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:f.path},[f.children&&f.children.length>0?(e.openBlock(),e.createBlock(e.unref(q.SubMenu),{key:0,index:f.path},{title:e.withCtx(()=>[e.createVNode(e.unref(E.Icon),{name:z(f.icon),size:16},null,8,["name"]),e.createElementVNode("span",null,e.toDisplayString(f.title),1)]),default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.children,U=>(e.openBlock(),e.createBlock(e.unref(q.MenuItem),{key:U.path,index:U.path},{default:e.withCtx(()=>[e.createVNode(e.unref(E.Icon),{name:z(U.icon),size:16},null,8,["name"]),e.createElementVNode("span",null,e.toDisplayString(U.title),1)]),_:2},1032,["index"]))),128))]),_:2},1032,["index"])):(e.openBlock(),e.createBlock(e.unref(q.MenuItem),{key:1,index:f.path},{default:e.withCtx(()=>[e.createVNode(e.unref(E.Icon),{name:z(f.icon),size:16},null,8,["name"]),e.createElementVNode("span",null,e.toDisplayString(f.title),1)]),_:2},1032,["index"]))],64))),128))]),_:1},8,["default-active","collapse","background-color","text-color","active-text-color"]),u.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",tt,[e.createElementVNode("div",nt,[e.createElementVNode("span",ot,e.toDisplayString(e.unref(c).nickname),1),e.createElementVNode("span",lt,e.toDisplayString((a=e.unref(c).roles)==null?void 0:a.join(", ")),1)]),e.createVNode(e.unref(E.Button),{type:"text",size:"small",onClick:P},{default:e.withCtx(()=>[...m[2]||(m[2]=[e.createTextVNode("退出",-1)])]),_:1})]))],2)}}}),F=(t,l)=>{const o=t.__vccOpts||t;for(const[i,c]of l)o[i]=c;return o},xe=F(at,[["__scopeId","data-v-df836fc7"]]),rt={class:"header"},st={class:"header__left"},it={key:0,class:"header__breadcrumb"},dt={key:0,class:"breadcrumb-separator"},ct={class:"header__right"},mt=["title"],pt={class:"header__avatar"},ut={class:"header__user-name"},ft={key:0,class:"header__dropdown"},ht={class:"header__dropdown-header"},Vt={class:"header__dropdown-avatar"},Nt={class:"header__dropdown-info"},_t={class:"header__dropdown-name"},gt={class:"header__dropdown-role"},yt={class:"header__dropdown-menu"},Et={class:"search-container"},kt={class:"search-input-wrapper"},Ct={key:0,class:"search-results"},wt=["onClick"],xt={class:"search-result-info"},Bt={class:"search-result-title"},St={key:0,class:"search-result-parent"},bt={key:1,class:"search-empty"},Tt={class:"settings-drawer"},Dt={class:"settings-section"},It={class:"settings-layout-options"},Lt=["onClick"],$t={class:"layout-option__preview"},At={key:0,class:"layout-preview-sidebar"},Mt={key:1,class:"layout-preview-top"},Ut={key:2,class:"layout-preview-mix"},Rt={class:"layout-option__label"},zt={class:"settings-section"},Ft={class:"settings-color-options"},Pt=["title","onClick"],Ot={class:"settings-section"},jt={class:"settings-switch-list"},qt={class:"settings-switch-item"},Kt={class:"settings-switch-item"},Be=F(e.defineComponent({__name:"Header",setup(t){const l=R.useRoute(),o=R.useRouter(),i=K(),c=O(),d=G(),r=J(),n=e.ref(!1),u=e.ref(!1),y=e.ref(null),_=e.ref(!1),b=e.ref(!1),p=e.ref(""),C=e.ref(null),S=e.ref(!1),N=[{value:"sidebar",label:"左侧菜单",icon:"sidebar-left"},{value:"top",label:"顶部菜单",icon:"menu"},{value:"mix",label:"混合菜单",icon:"grid"}],V=[{value:"#409eff",label:"默认蓝"},{value:"#1890ff",label:"科技蓝"},{value:"#52c41a",label:"极光绿"},{value:"#faad14",label:"日落橙"},{value:"#f5222d",label:"薄暮红"},{value:"#722ed1",label:"酱紫"}],T=e.computed(()=>l.matched.filter(g=>g.meta&&g.meta.title).map(g=>({title:g.meta.title,path:g.path}))),P=(L,g="")=>{const Y=[];return L.forEach(x=>{x.children&&x.children.length>0?Y.push(...P(x.children,x.title)):Y.push({...x,parentTitle:g})}),Y},z=e.computed(()=>p.value.trim()?P(r.menuList).filter(g=>g.title.toLowerCase().includes(p.value.toLowerCase())):[]),w=e.computed(()=>i.layout),m=()=>{i.toggleCollapse()},a=()=>{i.toggleTheme()},f=()=>{u.value=!0},U=L=>{i.setLayout(L)},ue=L=>{S.value=L;const g=document.documentElement;L?g.classList.add("grey-mode"):g.classList.remove("grey-mode")},fe=()=>{document.fullscreenElement?document.exitFullscreen():document.documentElement.requestFullscreen()},D=()=>{_.value=!!document.fullscreenElement},ne=()=>{n.value=!n.value},Z=()=>{n.value=!1},Re=()=>{b.value=!0},he=()=>{b.value=!1,p.value=""},ze=L=>{o.push(L),he()},Io=L=>{i.setPrimaryColor(L)},Lo=()=>{Z(),o.push("/profile")},$o=()=>{Z(),o.push("/change-password")},Ao=()=>{Z(),d.logout(),c.clearUserInfo(),r.clearMenu(),o.push("/login")},Fe=L=>{y.value&&!y.value.contains(L.target)&&Z(),C.value&&!C.value.contains(L.target)&&he()},Pe=L=>{L.key==="Escape"&&(he(),Z()),(L.ctrlKey||L.metaKey)&&L.key==="k"&&(L.preventDefault(),Re())};return e.onMounted(()=>{document.addEventListener("click",Fe),document.addEventListener("fullscreenchange",D),document.addEventListener("keydown",Pe),i.initTheme(),S.value=document.documentElement.classList.contains("grey-mode")}),e.onUnmounted(()=>{document.removeEventListener("click",Fe),document.removeEventListener("fullscreenchange",D),document.removeEventListener("keydown",Pe)}),(L,g)=>{var Y;return e.openBlock(),e.createElementBlock("div",rt,[e.createElementVNode("div",st,[e.createElementVNode("div",{class:"header__collapse",onClick:m},[e.createVNode(e.unref(E.Icon),{name:e.unref(i).isCollapsed?"menu-unfold":"menu-fold",size:18},null,8,["name"])]),e.unref(i).showBreadcrumb?(e.openBlock(),e.createElementBlock("div",it,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(T.value,(x,j)=>(e.openBlock(),e.createElementBlock("span",{key:x.path},[j>0?(e.openBlock(),e.createElementBlock("span",dt,"/")):e.createCommentVNode("",!0),e.createElementVNode("span",{class:e.normalizeClass({"is-current":j===T.value.length-1})},e.toDisplayString(x.title),3)]))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",ct,[e.createElementVNode("div",{class:"header__action",onClick:Re,title:"搜索 (Ctrl+K)"},[e.createVNode(e.unref(E.Icon),{name:"search",size:16})]),e.createElementVNode("div",{class:"header__action",onClick:fe,title:_.value?"退出全屏":"全屏"},[e.createVNode(e.unref(E.Icon),{name:_.value?"fullscreen-exit":"fullscreen",size:16},null,8,["name"])],8,mt),e.createElementVNode("div",{class:"header__action",onClick:f,title:"换肤设置"},[e.createVNode(e.unref(E.Icon),{name:"setting",size:16})]),e.createElementVNode("div",{class:"header__action",onClick:a,title:"切换主题"},[e.createVNode(e.unref(E.Icon),{name:e.unref(i).isDark?"sun":"moon",size:16},null,8,["name"])]),e.createElementVNode("div",{class:"header__user",ref_key:"dropdownRef",ref:y},[e.createElementVNode("div",{class:"header__user-trigger",onClick:e.withModifiers(ne,["stop"])},[e.createElementVNode("div",pt,[e.createElementVNode("span",null,e.toDisplayString(((Y=e.unref(c).nickname)==null?void 0:Y.charAt(0))||"U"),1)]),e.createElementVNode("span",ut,e.toDisplayString(e.unref(c).nickname),1),e.createElementVNode("span",{class:e.normalizeClass(["header__user-arrow",{"is-active":n.value}])},"▼",2)]),e.createVNode(e.Transition,{name:"dropdown"},{default:e.withCtx(()=>{var x,j;return[n.value?(e.openBlock(),e.createElementBlock("div",ft,[e.createElementVNode("div",ht,[e.createElementVNode("div",Vt,[e.createElementVNode("span",null,e.toDisplayString(((x=e.unref(c).nickname)==null?void 0:x.charAt(0))||"U"),1)]),e.createElementVNode("div",Nt,[e.createElementVNode("div",_t,e.toDisplayString(e.unref(c).nickname),1),e.createElementVNode("div",gt,e.toDisplayString((j=e.unref(c).roles)==null?void 0:j.join(", ")),1)])]),g[8]||(g[8]=e.createElementVNode("div",{class:"header__dropdown-divider"},null,-1)),e.createElementVNode("div",yt,[e.createElementVNode("div",{class:"header__dropdown-item",onClick:Lo},[e.createVNode(e.unref(E.Icon),{name:"user",size:16}),g[4]||(g[4]=e.createElementVNode("span",null,"个人信息",-1))]),e.createElementVNode("div",{class:"header__dropdown-item",onClick:$o},[e.createVNode(e.unref(E.Icon),{name:"lock",size:16}),g[5]||(g[5]=e.createElementVNode("span",null,"修改密码",-1))]),g[7]||(g[7]=e.createElementVNode("div",{class:"header__dropdown-divider"},null,-1)),e.createElementVNode("div",{class:"header__dropdown-item header__dropdown-item--danger",onClick:Ao},[e.createVNode(e.unref(E.Icon),{name:"logout",size:16}),g[6]||(g[6]=e.createElementVNode("span",null,"退出登录",-1))])])])):e.createCommentVNode("",!0)]}),_:1})],512)]),e.createVNode(e.Transition,{name:"search"},{default:e.withCtx(()=>[b.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"header__search-modal",ref_key:"searchRef",ref:C},[e.createElementVNode("div",Et,[e.createElementVNode("div",kt,[e.createVNode(e.unref(E.Icon),{class:"search-icon",name:"search",size:20}),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":g[0]||(g[0]=x=>p.value=x),type:"text",class:"search-input",placeholder:"搜索菜单...",autofocus:"",onKeyup:g[1]||(g[1]=e.withKeys(x=>z.value[0]&&ze(z.value[0].path),["enter"]))},null,544),[[e.vModelText,p.value]]),g[9]||(g[9]=e.createElementVNode("span",{class:"search-shortcut"},"ESC 关闭",-1))]),z.value.length>0?(e.openBlock(),e.createElementBlock("div",Ct,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(z.value,(x,j)=>(e.openBlock(),e.createElementBlock("div",{key:x.path,class:e.normalizeClass(["search-result-item",{"is-first":j===0}]),onClick:Go=>ze(x.path)},[e.createVNode(e.unref(E.Icon),{class:"search-result-icon",name:x.icon||"file",size:20},null,8,["name"]),e.createElementVNode("div",xt,[e.createElementVNode("span",Bt,e.toDisplayString(x.title),1),x.parentTitle?(e.openBlock(),e.createElementBlock("span",St,e.toDisplayString(x.parentTitle),1)):e.createCommentVNode("",!0)])],10,wt))),128))])):p.value?(e.openBlock(),e.createElementBlock("div",bt," 未找到匹配的菜单 ")):e.createCommentVNode("",!0)])],512)):e.createCommentVNode("",!0)]),_:1}),e.createVNode(e.unref(A.Drawer),{modelValue:u.value,"onUpdate:modelValue":g[3]||(g[3]=x=>u.value=x),title:"换肤设置",direction:"rtl",size:"320px"},{default:e.withCtx(()=>[e.createElementVNode("div",Tt,[e.createElementVNode("div",Dt,[g[13]||(g[13]=e.createElementVNode("div",{class:"settings-title"},"布局模式",-1)),e.createElementVNode("div",It,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(N,x=>e.createElementVNode("div",{key:x.value,class:e.normalizeClass(["layout-option",{"is-active":w.value===x.value}]),onClick:j=>U(x.value)},[e.createElementVNode("div",$t,[x.value==="sidebar"?(e.openBlock(),e.createElementBlock("div",At,[...g[10]||(g[10]=[e.createElementVNode("div",{class:"preview-aside"},null,-1),e.createElementVNode("div",{class:"preview-main"},[e.createElementVNode("div",{class:"preview-header"}),e.createElementVNode("div",{class:"preview-content"})],-1)])])):x.value==="top"?(e.openBlock(),e.createElementBlock("div",Mt,[...g[11]||(g[11]=[e.createElementVNode("div",{class:"preview-header-full"},null,-1),e.createElementVNode("div",{class:"preview-content-full"},null,-1)])])):(e.openBlock(),e.createElementBlock("div",Ut,[...g[12]||(g[12]=[e.createElementVNode("div",{class:"preview-header-mix"},[e.createElementVNode("div",{class:"preview-mix-left"})],-1),e.createElementVNode("div",{class:"preview-mix-body"},[e.createElementVNode("div",{class:"preview-mix-aside"}),e.createElementVNode("div",{class:"preview-mix-content"})],-1)])]))]),e.createElementVNode("span",Rt,e.toDisplayString(x.label),1)],10,Lt)),64))])]),e.createElementVNode("div",zt,[g[14]||(g[14]=e.createElementVNode("div",{class:"settings-title"},"主题色",-1)),e.createElementVNode("div",Ft,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(V,x=>e.createElementVNode("div",{key:x.value,class:e.normalizeClass(["color-option",{"is-active":e.unref(i).primaryColor===x.value}]),style:e.normalizeStyle({backgroundColor:x.value}),title:x.label,onClick:j=>Io(x.value)},[e.unref(i).primaryColor===x.value?(e.openBlock(),e.createBlock(e.unref(E.Icon),{key:0,name:"check",size:12,color:"#fff"})):e.createCommentVNode("",!0)],14,Pt)),64))])]),e.createElementVNode("div",Ot,[g[19]||(g[19]=e.createElementVNode("div",{class:"settings-title"},"功能设置",-1)),e.createElementVNode("div",jt,[e.createElementVNode("div",qt,[g[16]||(g[16]=e.createElementVNode("span",null,"灰色模式",-1)),e.createElementVNode("div",{class:e.normalizeClass(["switch-wrapper",{"is-checked":S.value}]),onClick:g[2]||(g[2]=x=>ue(!S.value))},[...g[15]||(g[15]=[e.createElementVNode("span",{class:"switch-core"},null,-1)])],2)]),e.createElementVNode("div",Kt,[g[18]||(g[18]=e.createElementVNode("span",null,"暗黑模式",-1)),e.createElementVNode("div",{class:e.normalizeClass(["switch-wrapper",{"is-checked":e.unref(i).isDark}]),onClick:a},[...g[17]||(g[17]=[e.createElementVNode("span",{class:"switch-core"},null,-1)])],2)])])])])]),_:1},8,["modelValue"])])}}}),[["__scopeId","data-v-015c45c9"]]),Yt={class:"layout"},Ht={class:"layout__main"},Wt={class:"layout__header"},Xt={class:"layout__content"},me=F(e.defineComponent({__name:"index",setup(t){const l=K(),o=e.computed(()=>l.isCollapsed?"64px":"210px");return(i,c)=>{const d=e.resolveComponent("router-view");return e.openBlock(),e.createElementBlock("div",Yt,[e.createElementVNode("aside",{class:"layout__aside",style:e.normalizeStyle({width:o.value})},[e.createVNode(xe)],4),e.createElementVNode("div",Ht,[e.createElementVNode("header",Wt,[e.createVNode(Be)]),e.createElementVNode("main",Xt,[e.createVNode(d)])])])}}}),[["__scopeId","data-v-a3110011"]]),Jt=Object.freeze(Object.defineProperty({__proto__:null,default:me},Symbol.toStringTag,{value:"Module"})),Gt={class:"tabs-wrapper"},Qt={class:"tab-label"},Zt=["onClick"],vt=F(e.defineComponent({__name:"Tabs",setup(t){const l=R.useRoute(),o=R.useRouter(),i=e.computed(()=>{const n=[];return l.matched.forEach(u=>{var y;(y=u.meta)!=null&&y.affix&&n.push({name:u.name,title:u.meta.title,path:u.path,affix:!0})}),n}),c=e.computed(()=>l.path),d=n=>{o.push(n)},r=n=>{const u=i.value.find(y=>y.path===n);if(!(u!=null&&u.affix)&&n===c.value){const y=i.value.findIndex(b=>b.path===n),_=i.value[y-1]||i.value[y+1];_&&o.push(_.path)}};return(n,u)=>(e.openBlock(),e.createElementBlock("div",Gt,[e.createVNode(e.unref(q.Tabs),{modelValue:c.value,"onUpdate:modelValue":u[0]||(u[0]=y=>c.value=y),type:"card",onTabClick:d},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,y=>(e.openBlock(),e.createBlock(e.unref(q.TabPane),{key:y.path,name:y.path,label:y.title,closable:!y.affix},{label:e.withCtx(()=>[e.createElementVNode("span",Qt,[e.createTextVNode(e.toDisplayString(y.title)+" ",1),y.affix?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",{key:0,class:"tab-close",onClick:e.withModifiers(_=>r(y.path),["stop"])}," ✕ ",8,Zt))])]),_:2},1032,["name","label","closable"]))),128))]),_:1},8,["modelValue"])]))}}),[["__scopeId","data-v-9156d8cd"]]),en={},tn={class:"footer"};function nn(t,l){return e.openBlock(),e.createElementBlock("div",tn,[...l[0]||(l[0]=[e.createElementVNode("span",null,"Copyright © 2024 Xto Demo. All Rights Reserved.",-1)])])}const on=F(en,[["render",nn],["__scopeId","data-v-4852826a"]]),ln={class:"login"},an={class:"login__container"},Se=F(e.defineComponent({__name:"index",setup(t){const l=R.useRouter(),o=G(),i=O(),c=J(),d=e.ref(!1),r=e.ref(!1),n=e.reactive({username:"admin",password:"123456"}),u={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"},{min:6,message:"密码长度至少6位",trigger:"blur"}]},y=e.ref(),_=async()=>{var b;try{await((b=y.value)==null?void 0:b.validate()),d.value=!0,setTimeout(()=>{o.login({token:"mock_token_"+Date.now(),refreshToken:"mock_refresh_token",expireTime:Date.now()+7*24*60*60*1e3}),i.setUserInfo({id:1,username:n.username,nickname:"管理员",avatar:"",email:"admin@example.com",phone:"13800138000",status:1,roles:["admin"],permissions:["*"],createTime:new Date().toISOString()}),c.setMenuList([{id:1,name:"Dashboard",path:"/dashboard",component:"dashboard/index",icon:"dashboard",title:"仪表盘",keepAlive:!0,affix:!0},{id:2,name:"System",path:"/system",redirect:"/system/user",icon:"setting",title:"系统管理",children:[{id:21,name:"SystemUser",path:"/system/user",component:"system/user/index",icon:"user",title:"用户管理",keepAlive:!0},{id:22,name:"SystemRole",path:"/system/role",component:"system/role/index",icon:"role",title:"角色管理",keepAlive:!0},{id:23,name:"SystemMenu",path:"/system/menu",component:"system/menu/index",icon:"menu",title:"菜单管理",keepAlive:!0}]}]),A.Message.success("登录成功"),l.push("/"),d.value=!1},1e3)}catch{d.value=!1}};return(b,p)=>(e.openBlock(),e.createElementBlock("div",ln,[e.createElementVNode("div",an,[p[5]||(p[5]=e.createElementVNode("div",{class:"login__header"},[e.createElementVNode("img",{src:Ne,alt:"Logo",class:"login__logo"}),e.createElementVNode("h1",{class:"login__title"},"Xto Demo"),e.createElementVNode("p",{class:"login__subtitle"},"后台管理系统")],-1)),e.createVNode(e.unref(h.Form),{ref_key:"formRef",ref:y,model:n,rules:u,class:"login__form","label-width":"0"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.FormItem),{prop:"username"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:n.username,"onUpdate:modelValue":p[0]||(p[0]=C=>n.username=C),placeholder:"用户名","prefix-icon":"👤",size:"large"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{prop:"password"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:n.password,"onUpdate:modelValue":p[1]||(p[1]=C=>n.password=C),type:"password",placeholder:"密码","prefix-icon":"🔒",size:"large","show-password":"",onKeyup:e.withKeys(_,["enter"])},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(h.Checkbox),{modelValue:r.value,"onUpdate:modelValue":p[2]||(p[2]=C=>r.value=C)},{default:e.withCtx(()=>[...p[3]||(p[3]=[e.createTextVNode("记住我",-1)])]),_:1},8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(E.Button),{type:"primary",size:"large",loading:d.value,class:"login__submit",onClick:_},{default:e.withCtx(()=>[...p[4]||(p[4]=[e.createTextVNode(" 登录 ",-1)])]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"]),p[6]||(p[6]=e.createElementVNode("div",{class:"login__footer"},[e.createElementVNode("p",null,"提示: 任意用户名密码即可登录 (Mock 模式)")],-1))])]))}}),[["__scopeId","data-v-40e9f7eb"]]),rn=Object.freeze(Object.defineProperty({__proto__:null,default:Se},Symbol.toStringTag,{value:"Module"})),sn={class:"error-page"},dn={class:"error-page__content"},be=F(e.defineComponent({__name:"404",setup(t){const l=R.useRouter(),o=()=>{l.push("/")};return(i,c)=>(e.openBlock(),e.createElementBlock("div",sn,[e.createElementVNode("div",dn,[c[1]||(c[1]=e.createElementVNode("div",{class:"error-page__code"},"404",-1)),c[2]||(c[2]=e.createElementVNode("div",{class:"error-page__title"},"页面不存在",-1)),c[3]||(c[3]=e.createElementVNode("div",{class:"error-page__desc"},"抱歉,您访问的页面不存在或已被删除",-1)),e.createVNode(e.unref(E.Button),{type:"primary",onClick:o},{default:e.withCtx(()=>[...c[0]||(c[0]=[e.createTextVNode("返回首页",-1)])]),_:1})])]))}}),[["__scopeId","data-v-c3c12c24"]]),cn=Object.freeze(Object.defineProperty({__proto__:null,default:be},Symbol.toStringTag,{value:"Module"})),mn={class:"error-page"},pn={class:"error-page__content"},Te=F(e.defineComponent({__name:"403",setup(t){const l=R.useRouter(),o=()=>{l.push("/")};return(i,c)=>(e.openBlock(),e.createElementBlock("div",mn,[e.createElementVNode("div",pn,[c[1]||(c[1]=e.createElementVNode("div",{class:"error-page__code"},"403",-1)),c[2]||(c[2]=e.createElementVNode("div",{class:"error-page__title"},"无访问权限",-1)),c[3]||(c[3]=e.createElementVNode("div",{class:"error-page__desc"},"抱歉,您没有权限访问此页面",-1)),e.createVNode(e.unref(E.Button),{type:"primary",onClick:o},{default:e.withCtx(()=>[...c[0]||(c[0]=[e.createTextVNode("返回首页",-1)])]),_:1})])]))}}),[["__scopeId","data-v-dd5f2795"]]),un=Object.freeze(Object.defineProperty({__proto__:null,default:Te},Symbol.toStringTag,{value:"Module"}));function fn(){const t=K(),l=O(),o=G(),i=e.computed(()=>l.nickname||l.username||""),c=e.computed(()=>l.userInfo),d=e.computed(()=>t.appName),r=e.computed(()=>o.isLoggedIn),n=e.computed(()=>t.isDark),u=e.computed(()=>t.theme),y=e.computed(()=>t.isCollapsed),_=e.computed(()=>t.layout);return{userName:i,userInfo:c,appName:d,isLoggedIn:r,isDark:n,theme:u,isCollapsed:y,layout:_,toggleTheme:()=>{t.toggleTheme()},toggleCollapse:()=>{t.toggleCollapse()}}}function hn(){const t=O(),l=d=>{const r=t.permissions;return r.includes("*")?!0:Array.isArray(d)?d.some(n=>r.includes(n)):r.includes(d)},o=d=>{const r=t.roles;return r.includes("admin")?!0:Array.isArray(d)?d.some(n=>r.includes(n)):r.includes(d)},i=e.computed(()=>t.roles.includes("admin")),c=e.computed(()=>t.isLoggedIn);return{hasPermission:l,hasRole:o,isAdmin:i,isLoggedIn:c}}function Vn(t,l={}){const{rules:o,onSubmit:i}=l,c=e.ref(),d=e.reactive({...t}),r=e.ref(!1),n=e.ref(!1),u=e.ref(!1),y=()=>{p(),u.value=!1,n.value=!0},_=S=>{Object.assign(d,S),u.value=!0,n.value=!0},b=()=>{n.value=!1,p()},p=()=>{var S;Object.keys(t).forEach(N=>{d[N]=t[N]}),(S=c.value)==null||S.resetFields()};return{formRef:c,formData:d,rules:o,loading:r,visible:n,isEdit:u,openAdd:y,openEdit:_,close:b,resetForm:p,handleSubmit:async()=>{var S;try{await((S=c.value)==null?void 0:S.validate()),r.value=!0,await(i==null?void 0:i(d)),b()}catch(N){console.error(N)}finally{r.value=!1}}}}function Nn(t){const{fetchData:l,defaultPageSize:o=10}=t,i=e.ref(!1),c=e.ref([]),d=e.ref(0),r=e.ref(1),n=e.ref(o),u=e.reactive({}),y=async()=>{i.value=!0;try{const V={...u,page:r.value,pageSize:n.value},T=await l(V);c.value=T.list,d.value=T.total}catch(V){console.error(V)}finally{i.value=!1}},_=()=>{r.value=1,y()},b=()=>{Object.keys(u).forEach(V=>{u[V]=void 0}),r.value=1,y()},p=V=>{r.value=V,y()},C=V=>{n.value=V,r.value=1,y()},S=()=>{y()},N=e.computed(()=>({current:r.value,pageSize:n.value,total:d.value}));return{loading:i,data:c,total:d,currentPage:r,pageSize:n,searchParams:u,pagination:N,getData:y,handleSearch:_,handleReset:b,handlePageChange:p,handleSizeChange:C,refresh:S}}function _n(t){const o=O().permissions;return Array.isArray(t)?t.some(i=>o.includes(i)):o.includes(t)}function De(t){const o=O().roles;return Array.isArray(t)?t.some(i=>o.includes(i)):o.includes(t)}function gn(){return De("admin")}const Q=(()=>{const t=Oe.create({baseURL:void 0,timeout:3e4,headers:{"Content-Type":"application/json"}});return t.interceptors.request.use(l=>{const o=ee();return o&&(l.headers.Authorization=`Bearer ${o}`),l},l=>Promise.reject(l)),t.interceptors.response.use(l=>{const{data:o}=l;return o.code===200||o.code===0?o.data:(A.Message.error(o.message||"请求失败"),Promise.reject(new Error(o.message||"请求失败")))},l=>{var i;const{response:o}=l;if(o)switch(o.status){case 401:A.Message.error("登录已过期,请重新登录"),de(),window.location.href="/login";break;case 403:A.Message.error("没有权限访问");break;case 404:A.Message.error("请求资源不存在");break;case 500:A.Message.error("服务器错误");break;default:A.Message.error(((i=o.data)==null?void 0:i.message)||"请求失败")}else A.Message.error("网络连接失败");return Promise.reject(l)}),t})(),I={get(t,l){return Q.get(t,l)},post(t,l,o){return Q.post(t,l,o)},put(t,l,o){return Q.put(t,l,o)},patch(t,l,o){return Q.patch(t,l,o)},delete(t,l){return Q.delete(t,l)}};function yn(t,l={}){const o=l.indexPath||"/dashboard";return{path:"/",name:"Layout",component:me,redirect:o,children:t}}function En(t){return R.createRouter({history:R.createWebHistory(),routes:t,scrollBehavior:()=>({left:0,top:0})})}function kn(t){return I.post("/auth/login",t)}function Cn(){return I.post("/auth/logout")}function wn(){return I.get("/user/info")}function xn(t){return I.post("/auth/refresh",{refreshToken:t})}function Bn(t){return I.get("/role/list",{params:t})}function Sn(t){return I.get(`/role/${t}`)}function bn(t){return I.post("/role",t)}function Tn(t,l){return I.put(`/role/${t}`,l)}function Dn(t){return I.delete(`/role/${t}`)}function In(t,l){return I.patch(`/role/${t}/status`,{status:l})}function Ln(){return I.get("/menu/list")}function $n(){return I.get("/menu/tree")}function An(t){return I.post("/menu",t)}function Mn(t,l){return I.put(`/menu/${t}`,l)}function Un(t){return I.delete(`/menu/${t}`)}function Rn(t){return I.get("/user/list",{params:t})}function zn(t){return I.get(`/user/${t}`)}function Fn(t){return I.post("/user",t)}function Pn(t,l){return I.put(`/user/${t}`,l)}function On(t){return I.delete(`/user/${t}`)}function jn(t){return I.post("/user/batch-delete",{ids:t})}function qn(t,l){return I.patch(`/user/${t}/status`,{status:l})}function Kn(t){return I.post(`/user/${t}/reset-password`)}var B=(t=>(t[t.ENABLED=1]="ENABLED",t[t.DISABLED=0]="DISABLED",t))(B||{}),Ie=(t=>(t[t.UNKNOWN=0]="UNKNOWN",t[t.MALE=1]="MALE",t[t.FEMALE=2]="FEMALE",t))(Ie||{}),M=(t=>(t[t.DIRECTORY=0]="DIRECTORY",t[t.MENU=1]="MENU",t[t.BUTTON=2]="BUTTON",t))(M||{});const Yn={1:"启用",0:"禁用"},Hn={0:"未知",1:"男",2:"女"},Wn={0:"目录",1:"菜单",2:"按钮"},pe=[{label:"启用",value:1},{label:"禁用",value:0}],Xn=[{label:"未知",value:0},{label:"男",value:1},{label:"女",value:2}],Le=[{label:"目录",value:0},{label:"菜单",value:1},{label:"按钮",value:2}],Jn={mounted(t,l){var r;const o=O(),{value:i}=l;if(!i)return;const c=o.permissions;let d=!1;Array.isArray(i)?d=i.some(n=>c.includes(n)||c.includes("*")):d=c.includes(i)||c.includes("*"),d||(r=t.parentNode)==null||r.removeChild(t)}},Gn={class:"dashboard"},Qn={class:"dashboard__stats"},Zn={class:"stat-card__content"},vn={class:"stat-card__info"},eo={class:"stat-card__title"},to={class:"dashboard__main"},no={class:"quick-links"},oo={class:"quick-link__icon"},lo={class:"quick-link__title"},ao={class:"activity-list"},ro={class:"activity-item__action"},so={class:"activity-item__time"},io={class:"system-info"},co={class:"system-info__item"},mo={class:"system-info__item"},$e=Object.freeze(Object.defineProperty({__proto__:null,default:F(e.defineComponent({__name:"index",setup(t){const l=e.ref([{title:"用户总数",value:1234,icon:"👥",color:"#409eff"},{title:"今日访问",value:567,icon:"👀",color:"#67c23a"},{title:"订单数量",value:890,icon:"📦",color:"#e6a23c"},{title:"销售金额",value:123456,icon:"💰",color:"#f56c6c"}]),o=e.ref([{user:"张三",action:"登录系统",time:"2分钟前",type:"success"},{user:"李四",action:"修改了用户信息",time:"5分钟前",type:"warning"},{user:"王五",action:"创建了新订单",time:"10分钟前",type:"info"},{user:"赵六",action:"删除了测试数据",time:"30分钟前",type:"danger"},{user:"钱七",action:"更新了系统配置",time:"1小时前",type:"primary"}]),i=e.ref([{title:"用户管理",path:"/system/user",icon:"👤"},{title:"角色管理",path:"/system/role",icon:"👥"},{title:"菜单管理",path:"/system/menu",icon:"📋"},{title:"系统设置",path:"/system",icon:"⚙️"}]);return(c,d)=>{const r=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock("div",Gn,[e.createElementVNode("div",Qn,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,n=>(e.openBlock(),e.createBlock(e.unref($.Card),{key:n.title,class:"stat-card"},{default:e.withCtx(()=>[e.createElementVNode("div",Zn,[e.createElementVNode("div",{class:"stat-card__icon",style:e.normalizeStyle({backgroundColor:n.color+"20"})},e.toDisplayString(n.icon),5),e.createElementVNode("div",vn,[e.createElementVNode("div",eo,e.toDisplayString(n.title),1),e.createElementVNode("div",{class:"stat-card__value",style:e.normalizeStyle({color:n.color})},e.toDisplayString(n.value.toLocaleString()),5)])])]),_:2},1024))),128))]),e.createElementVNode("div",to,[e.createVNode(e.unref($.Card),{class:"dashboard__quick"},{header:e.withCtx(()=>[...d[0]||(d[0]=[e.createElementVNode("span",{class:"card-title"},"快捷入口",-1)])]),default:e.withCtx(()=>[e.createElementVNode("div",no,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,n=>(e.openBlock(),e.createBlock(r,{key:n.path,to:n.path,class:"quick-link"},{default:e.withCtx(()=>[e.createElementVNode("span",oo,e.toDisplayString(n.icon),1),e.createElementVNode("span",lo,e.toDisplayString(n.title),1)]),_:2},1032,["to"]))),128))])]),_:1}),e.createVNode(e.unref($.Card),{class:"dashboard__activity"},{header:e.withCtx(()=>[...d[1]||(d[1]=[e.createElementVNode("span",{class:"card-title"},"最近活动",-1)])]),default:e.withCtx(()=>[e.createElementVNode("div",ao,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,(n,u)=>(e.openBlock(),e.createElementBlock("div",{key:u,class:"activity-item"},[e.createVNode(e.unref($.Tag),{type:n.type,size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(n.user),1)]),_:2},1032,["type"]),e.createElementVNode("span",ro,e.toDisplayString(n.action),1),e.createElementVNode("span",so,e.toDisplayString(n.time),1)]))),128))])]),_:1})]),e.createVNode(e.unref($.Card),{class:"dashboard__system"},{header:e.withCtx(()=>[...d[2]||(d[2]=[e.createElementVNode("span",{class:"card-title"},"系统信息",-1)])]),default:e.withCtx(()=>[e.createElementVNode("div",io,[d[5]||(d[5]=e.createElementVNode("div",{class:"system-info__item"},[e.createElementVNode("span",{class:"system-info__label"},"系统版本"),e.createElementVNode("span",{class:"system-info__value"},"v1.0.0")],-1)),d[6]||(d[6]=e.createElementVNode("div",{class:"system-info__item"},[e.createElementVNode("span",{class:"system-info__label"},"Vue 版本"),e.createElementVNode("span",{class:"system-info__value"},"3.4.21")],-1)),d[7]||(d[7]=e.createElementVNode("div",{class:"system-info__item"},[e.createElementVNode("span",{class:"system-info__label"},"构建工具"),e.createElementVNode("span",{class:"system-info__value"},"Vite 5")],-1)),d[8]||(d[8]=e.createElementVNode("div",{class:"system-info__item"},[e.createElementVNode("span",{class:"system-info__label"},"UI 组件库"),e.createElementVNode("span",{class:"system-info__value"},"xto")],-1)),e.createElementVNode("div",co,[d[3]||(d[3]=e.createElementVNode("span",{class:"system-info__label"},"服务器状态",-1)),e.createVNode(e.unref($.Progress),{percentage:75,status:"success"})]),e.createElementVNode("div",mo,[d[4]||(d[4]=e.createElementVNode("span",{class:"system-info__label"},"内存使用",-1)),e.createVNode(e.unref($.Progress),{percentage:45})])])]),_:1})])}}}),[["__scopeId","data-v-44648cb1"]])},Symbol.toStringTag,{value:"Module"})),po={class:"user-page"},uo={class:"toolbar"},fo={class:"data-table"},ho={key:0},Vo={key:1},No={class:"pagination-wrapper"},Ae=Object.freeze(Object.defineProperty({__proto__:null,default:F(e.defineComponent({__name:"index",setup(t){const l=[{id:1,username:"admin",nickname:"管理员",email:"admin@example.com",phone:"13800138001",status:B.ENABLED,roles:["admin"],createTime:"2024-01-01 10:00:00"},{id:2,username:"zhangsan",nickname:"张三",email:"zhangsan@example.com",phone:"13800138002",status:B.ENABLED,roles:["editor"],createTime:"2024-01-02 10:00:00"},{id:3,username:"lisi",nickname:"李四",email:"lisi@example.com",phone:"13800138003",status:B.DISABLED,roles:["viewer"],createTime:"2024-01-03 10:00:00"},{id:4,username:"wangwu",nickname:"王五",email:"wangwu@example.com",phone:"13800138004",status:B.ENABLED,roles:["editor"],createTime:"2024-01-04 10:00:00"},{id:5,username:"zhaoliu",nickname:"赵六",email:"zhaoliu@example.com",phone:"13800138005",status:B.ENABLED,roles:["viewer"],createTime:"2024-01-05 10:00:00"}],o=e.ref(!1),i=e.ref([]),c=e.ref(0),d=e.ref(1),r=e.ref(10),n=e.reactive({keyword:"",status:void 0}),u=e.ref(!1),y=e.computed(()=>_.id?"编辑用户":"新增用户"),_=e.reactive({id:0,username:"",nickname:"",email:"",phone:"",status:B.ENABLED,roles:[]}),b={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],nickname:[{required:!0,message:"请输入昵称",trigger:"blur"}],email:[{required:!0,message:"请输入邮箱",trigger:"blur"},{type:"email",message:"请输入正确的邮箱格式",trigger:"blur"}]},p=e.ref(),C=()=>{o.value=!0,setTimeout(()=>{let m=[...l];n.keyword&&(m=m.filter(a=>a.username.includes(n.keyword)||a.nickname.includes(n.keyword))),n.status!==void 0&&(m=m.filter(a=>a.status===n.status)),c.value=m.length,i.value=m.slice((d.value-1)*r.value,d.value*r.value),o.value=!1},300)},S=()=>{d.value=1,C()},N=()=>{n.keyword="",n.status=void 0,d.value=1,C()},V=()=>{Object.assign(_,{id:0,username:"",nickname:"",email:"",phone:"",status:B.ENABLED,roles:[]}),u.value=!0},T=m=>{Object.assign(_,m),u.value=!0},P=m=>{A.Message.success("删除成功"),C()},z=async()=>{var m;try{await((m=p.value)==null?void 0:m.validate()),A.Message.success(_.id?"编辑成功":"新增成功"),u.value=!1,C()}catch(a){console.error(a)}},w=m=>{A.Message.success(`已${m.status===B.ENABLED?"启用":"禁用"}用户 ${m.username}`)};return e.onMounted(()=>{C()}),(m,a)=>(e.openBlock(),e.createElementBlock("div",po,[e.createVNode(e.unref($.Card),{class:"search-card"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Form),{model:n,inline:""},{default:e.withCtx(()=>[e.createVNode(e.unref(h.FormItem),{label:"关键词"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:n.keyword,"onUpdate:modelValue":a[0]||(a[0]=f=>n.keyword=f),placeholder:"用户名/昵称",clearable:"",onKeyup:e.withKeys(S,["enter"])},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"状态"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Select),{modelValue:n.status,"onUpdate:modelValue":a[1]||(a[1]=f=>n.status=f),options:e.unref(pe),placeholder:"请选择",clearable:""},null,8,["modelValue","options"])]),_:1}),e.createVNode(e.unref(h.FormItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(E.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(E.Button),{type:"primary",onClick:S},{default:e.withCtx(()=>[...a[11]||(a[11]=[e.createTextVNode("搜索",-1)])]),_:1}),e.createVNode(e.unref(E.Button),{onClick:N},{default:e.withCtx(()=>[...a[12]||(a[12]=[e.createTextVNode("重置",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["model"])]),_:1}),e.createVNode(e.unref($.Card),{class:"table-card"},{default:e.withCtx(()=>[e.createElementVNode("div",uo,[e.createVNode(e.unref(E.Button),{type:"primary",onClick:V},{default:e.withCtx(()=>[...a[13]||(a[13]=[e.createTextVNode("新增用户",-1)])]),_:1})]),e.createElementVNode("table",fo,[a[18]||(a[18]=e.createElementVNode("thead",null,[e.createElementVNode("tr",null,[e.createElementVNode("th",null,"ID"),e.createElementVNode("th",null,"用户名"),e.createElementVNode("th",null,"昵称"),e.createElementVNode("th",null,"邮箱"),e.createElementVNode("th",null,"手机号"),e.createElementVNode("th",null,"角色"),e.createElementVNode("th",null,"状态"),e.createElementVNode("th",null,"创建时间"),e.createElementVNode("th",null,"操作")])],-1)),e.createElementVNode("tbody",null,[o.value?(e.openBlock(),e.createElementBlock("tr",ho,[...a[14]||(a[14]=[e.createElementVNode("td",{colspan:"9",class:"loading-cell"},"加载中...",-1)])])):i.value.length===0?(e.openBlock(),e.createElementBlock("tr",Vo,[...a[15]||(a[15]=[e.createElementVNode("td",{colspan:"9",class:"empty-cell"},"暂无数据",-1)])])):(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:2},e.renderList(i.value,f=>(e.openBlock(),e.createElementBlock("tr",{key:f.id},[e.createElementVNode("td",null,e.toDisplayString(f.id),1),e.createElementVNode("td",null,e.toDisplayString(f.username),1),e.createElementVNode("td",null,e.toDisplayString(f.nickname),1),e.createElementVNode("td",null,e.toDisplayString(f.email),1),e.createElementVNode("td",null,e.toDisplayString(f.phone),1),e.createElementVNode("td",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.roles,U=>(e.openBlock(),e.createBlock(e.unref($.Tag),{key:U,size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(U),1)]),_:2},1024))),128))]),e.createElementVNode("td",null,[e.createVNode(e.unref(h.Switch),{"model-value":f.status===e.unref(B).ENABLED,"onUpdate:modelValue":U=>{f.status=U?e.unref(B).ENABLED:e.unref(B).DISABLED,w(f)}},null,8,["model-value","onUpdate:modelValue"])]),e.createElementVNode("td",null,e.toDisplayString(f.createTime),1),e.createElementVNode("td",null,[e.createVNode(e.unref(E.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(E.Button),{type:"primary",link:"",size:"small",onClick:U=>T(f)},{default:e.withCtx(()=>[...a[16]||(a[16]=[e.createTextVNode("编辑",-1)])]),_:1},8,["onClick"]),e.createVNode(e.unref(A.Popconfirm),{title:"确定删除该用户吗?",onConfirm:U=>P(f.id)},{default:e.withCtx(()=>[e.createVNode(e.unref(E.Button),{type:"danger",link:"",size:"small"},{default:e.withCtx(()=>[...a[17]||(a[17]=[e.createTextVNode("删除",-1)])]),_:1})]),_:1},8,["onConfirm"])]),_:2},1024)])]))),128))])]),e.createElementVNode("div",No,[e.createVNode(e.unref($.Pagination),{"current-page":d.value,"onUpdate:currentPage":a[2]||(a[2]=f=>d.value=f),"page-size":r.value,"onUpdate:pageSize":a[3]||(a[3]=f=>r.value=f),total:c.value,"page-sizes":[10,20,50,100],layout:"total, sizes, prev, pager, next",onCurrentChange:C,onSizeChange:C},null,8,["current-page","page-size","total"])])]),_:1}),e.createVNode(e.unref(A.Modal),{modelValue:u.value,"onUpdate:modelValue":a[10]||(a[10]=f=>u.value=f),title:y.value,width:"500px"},{footer:e.withCtx(()=>[e.createVNode(e.unref(E.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(E.Button),{onClick:a[9]||(a[9]=f=>u.value=!1)},{default:e.withCtx(()=>[...a[19]||(a[19]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(e.unref(E.Button),{type:"primary",onClick:z},{default:e.withCtx(()=>[...a[20]||(a[20]=[e.createTextVNode("确定",-1)])]),_:1})]),_:1})]),default:e.withCtx(()=>[e.createVNode(e.unref(h.Form),{ref_key:"formRef",ref:p,model:_,rules:b,"label-width":"80px"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.FormItem),{label:"用户名",prop:"username"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:_.username,"onUpdate:modelValue":a[4]||(a[4]=f=>_.username=f),placeholder:"请输入用户名"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"昵称",prop:"nickname"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:_.nickname,"onUpdate:modelValue":a[5]||(a[5]=f=>_.nickname=f),placeholder:"请输入昵称"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"邮箱",prop:"email"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:_.email,"onUpdate:modelValue":a[6]||(a[6]=f=>_.email=f),placeholder:"请输入邮箱"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"手机号",prop:"phone"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:_.phone,"onUpdate:modelValue":a[7]||(a[7]=f=>_.phone=f),placeholder:"请输入手机号"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"状态"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Switch),{modelValue:_.status,"onUpdate:modelValue":a[8]||(a[8]=f=>_.status=f),"active-value":e.unref(B).ENABLED,"inactive-value":e.unref(B).DISABLED},null,8,["modelValue","active-value","inactive-value"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])]))}}),[["__scopeId","data-v-d2491ae0"]])},Symbol.toStringTag,{value:"Module"})),_o={class:"role-page"},go={class:"toolbar"},yo={class:"data-table"},Eo={key:0},ko={key:1},Co={class:"pagination-wrapper"},Me=Object.freeze(Object.defineProperty({__proto__:null,default:F(e.defineComponent({__name:"index",setup(t){const l=[{id:1,name:"超级管理员",code:"admin",description:"拥有所有权限",status:B.ENABLED,permissions:["*"],createTime:"2024-01-01 10:00:00"},{id:2,name:"编辑",code:"editor",description:"内容编辑权限",status:B.ENABLED,permissions:["user:read","user:write"],createTime:"2024-01-02 10:00:00"},{id:3,name:"访客",code:"viewer",description:"只读权限",status:B.ENABLED,permissions:["user:read"],createTime:"2024-01-03 10:00:00"}],o=e.ref(!1),i=e.ref([]),c=e.ref(0),d=e.ref(1),r=e.ref(10),n=e.reactive({keyword:"",status:void 0}),u=e.ref(!1),y=e.computed(()=>_.id?"编辑角色":"新增角色"),_=e.reactive({id:0,name:"",code:"",description:"",status:B.ENABLED,permissions:[]}),b={name:[{required:!0,message:"请输入角色名称",trigger:"blur"}],code:[{required:!0,message:"请输入角色编码",trigger:"blur"}]},p=e.ref(),C=()=>{o.value=!0,setTimeout(()=>{let w=[...l];n.keyword&&(w=w.filter(m=>m.name.includes(n.keyword)||m.code.includes(n.keyword))),n.status!==void 0&&(w=w.filter(m=>m.status===n.status)),c.value=w.length,i.value=w.slice((d.value-1)*r.value,d.value*r.value),o.value=!1},300)},S=()=>{d.value=1,C()},N=()=>{n.keyword="",n.status=void 0,d.value=1,C()},V=()=>{Object.assign(_,{id:0,name:"",code:"",description:"",status:B.ENABLED,permissions:[]}),u.value=!0},T=w=>{Object.assign(_,w),u.value=!0},P=w=>{A.Message.success("删除成功"),C()},z=async()=>{var w;try{await((w=p.value)==null?void 0:w.validate()),A.Message.success(_.id?"编辑成功":"新增成功"),u.value=!1,C()}catch(m){console.error(m)}};return e.onMounted(()=>{C()}),(w,m)=>(e.openBlock(),e.createElementBlock("div",_o,[e.createVNode(e.unref($.Card),{class:"search-card"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Form),{model:n,inline:""},{default:e.withCtx(()=>[e.createVNode(e.unref(h.FormItem),{label:"关键词"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:n.keyword,"onUpdate:modelValue":m[0]||(m[0]=a=>n.keyword=a),placeholder:"角色名称/编码",clearable:"",onKeyup:e.withKeys(S,["enter"])},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"状态"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Select),{modelValue:n.status,"onUpdate:modelValue":m[1]||(m[1]=a=>n.status=a),options:e.unref(pe),placeholder:"请选择",clearable:""},null,8,["modelValue","options"])]),_:1}),e.createVNode(e.unref(h.FormItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(E.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(E.Button),{type:"primary",onClick:S},{default:e.withCtx(()=>[...m[10]||(m[10]=[e.createTextVNode("搜索",-1)])]),_:1}),e.createVNode(e.unref(E.Button),{onClick:N},{default:e.withCtx(()=>[...m[11]||(m[11]=[e.createTextVNode("重置",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["model"])]),_:1}),e.createVNode(e.unref($.Card),{class:"table-card"},{default:e.withCtx(()=>[e.createElementVNode("div",go,[e.createVNode(e.unref(E.Button),{type:"primary",onClick:V},{default:e.withCtx(()=>[...m[12]||(m[12]=[e.createTextVNode("新增角色",-1)])]),_:1})]),e.createElementVNode("table",yo,[m[17]||(m[17]=e.createElementVNode("thead",null,[e.createElementVNode("tr",null,[e.createElementVNode("th",null,"ID"),e.createElementVNode("th",null,"角色名称"),e.createElementVNode("th",null,"角色编码"),e.createElementVNode("th",null,"描述"),e.createElementVNode("th",null,"状态"),e.createElementVNode("th",null,"创建时间"),e.createElementVNode("th",null,"操作")])],-1)),e.createElementVNode("tbody",null,[o.value?(e.openBlock(),e.createElementBlock("tr",Eo,[...m[13]||(m[13]=[e.createElementVNode("td",{colspan:"7",class:"loading-cell"},"加载中...",-1)])])):i.value.length===0?(e.openBlock(),e.createElementBlock("tr",ko,[...m[14]||(m[14]=[e.createElementVNode("td",{colspan:"7",class:"empty-cell"},"暂无数据",-1)])])):(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:2},e.renderList(i.value,a=>(e.openBlock(),e.createElementBlock("tr",{key:a.id},[e.createElementVNode("td",null,e.toDisplayString(a.id),1),e.createElementVNode("td",null,e.toDisplayString(a.name),1),e.createElementVNode("td",null,[e.createVNode(e.unref($.Tag),{type:"primary",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(a.code),1)]),_:2},1024)]),e.createElementVNode("td",null,e.toDisplayString(a.description),1),e.createElementVNode("td",null,[e.createVNode(e.unref($.Tag),{type:a.status===e.unref(B).ENABLED?"success":"danger",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(a.status===e.unref(B).ENABLED?"启用":"禁用"),1)]),_:2},1032,["type"])]),e.createElementVNode("td",null,e.toDisplayString(a.createTime),1),e.createElementVNode("td",null,[e.createVNode(e.unref(E.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(E.Button),{type:"primary",link:"",size:"small",onClick:f=>T(a)},{default:e.withCtx(()=>[...m[15]||(m[15]=[e.createTextVNode("编辑",-1)])]),_:1},8,["onClick"]),e.createVNode(e.unref(A.Popconfirm),{title:"确定删除该角色吗?",onConfirm:f=>P(a.id)},{default:e.withCtx(()=>[e.createVNode(e.unref(E.Button),{type:"danger",link:"",size:"small"},{default:e.withCtx(()=>[...m[16]||(m[16]=[e.createTextVNode("删除",-1)])]),_:1})]),_:1},8,["onConfirm"])]),_:2},1024)])]))),128))])]),e.createElementVNode("div",Co,[e.createVNode(e.unref($.Pagination),{"current-page":d.value,"onUpdate:currentPage":m[2]||(m[2]=a=>d.value=a),"page-size":r.value,"onUpdate:pageSize":m[3]||(m[3]=a=>r.value=a),total:c.value,"page-sizes":[10,20,50,100],layout:"total, sizes, prev, pager, next",onCurrentChange:C,onSizeChange:C},null,8,["current-page","page-size","total"])])]),_:1}),e.createVNode(e.unref(A.Modal),{modelValue:u.value,"onUpdate:modelValue":m[9]||(m[9]=a=>u.value=a),title:y.value,width:"500px"},{footer:e.withCtx(()=>[e.createVNode(e.unref(E.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(E.Button),{onClick:m[8]||(m[8]=a=>u.value=!1)},{default:e.withCtx(()=>[...m[18]||(m[18]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(e.unref(E.Button),{type:"primary",onClick:z},{default:e.withCtx(()=>[...m[19]||(m[19]=[e.createTextVNode("确定",-1)])]),_:1})]),_:1})]),default:e.withCtx(()=>[e.createVNode(e.unref(h.Form),{ref_key:"formRef",ref:p,model:_,rules:b,"label-width":"80px"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.FormItem),{label:"角色名称",prop:"name"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:_.name,"onUpdate:modelValue":m[4]||(m[4]=a=>_.name=a),placeholder:"请输入角色名称"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"角色编码",prop:"code"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:_.code,"onUpdate:modelValue":m[5]||(m[5]=a=>_.code=a),placeholder:"请输入角色编码"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"描述"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:_.description,"onUpdate:modelValue":m[6]||(m[6]=a=>_.description=a),placeholder:"请输入描述"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"状态"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Switch),{modelValue:_.status,"onUpdate:modelValue":m[7]||(m[7]=a=>_.status=a),"active-value":e.unref(B).ENABLED,"inactive-value":e.unref(B).DISABLED},null,8,["modelValue","active-value","inactive-value"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])]))}}),[["__scopeId","data-v-8ad30bc6"]])},Symbol.toStringTag,{value:"Module"})),wo={class:"menu-page"},xo={class:"toolbar"},Bo={class:"menu-tree"},So={class:"tree-table"},bo={class:"tree-row tree-row--level-0"},To=["onClick"],Do=["onClick"],Ue=Object.freeze(Object.defineProperty({__proto__:null,default:F(e.defineComponent({__name:"index",setup(t){const l=[{id:1,parentId:null,name:"Dashboard",path:"/dashboard",component:"dashboard/index",redirect:"",icon:"dashboard",title:"仪表盘",type:M.MENU,sort:1,status:B.ENABLED,hidden:!1,keepAlive:!0},{id:2,parentId:null,name:"System",path:"/system",component:"",redirect:"/system/user",icon:"setting",title:"系统管理",type:M.DIRECTORY,sort:2,status:B.ENABLED,hidden:!1,keepAlive:!1,children:[{id:21,parentId:2,name:"SystemUser",path:"/system/user",component:"system/user/index",redirect:"",icon:"user",title:"用户管理",type:M.MENU,sort:1,status:B.ENABLED,hidden:!1,keepAlive:!0},{id:22,parentId:2,name:"SystemRole",path:"/system/role",component:"system/role/index",redirect:"",icon:"role",title:"角色管理",type:M.MENU,sort:2,status:B.ENABLED,hidden:!1,keepAlive:!0},{id:23,parentId:2,name:"SystemMenu",path:"/system/menu",component:"system/menu/index",redirect:"",icon:"menu",title:"菜单管理",type:M.MENU,sort:3,status:B.ENABLED,hidden:!1,keepAlive:!0}]}],o=e.ref(!1),i=e.ref([]),c=e.ref(!1),d=e.computed(()=>r.id?"编辑菜单":"新增菜单"),r=e.reactive({id:0,parentId:null,name:"",path:"",component:"",redirect:"",icon:"",title:"",type:M.MENU,sort:0,status:B.ENABLED,hidden:!1,keepAlive:!0}),n={name:[{required:!0,message:"请输入菜单名称",trigger:"blur"}],path:[{required:!0,message:"请输入路由路径",trigger:"blur"}],title:[{required:!0,message:"请输入菜单标题",trigger:"blur"}]},u=e.ref(),y=()=>{o.value=!0,setTimeout(()=>{i.value=l,o.value=!1},300)},_=(S=null)=>{Object.assign(r,{id:0,parentId:S,name:"",path:"",component:"",redirect:"",icon:"",title:"",type:M.MENU,sort:0,status:B.ENABLED,hidden:!1,keepAlive:!0}),c.value=!0},b=S=>{Object.assign(r,S),c.value=!0},p=async()=>{var S;try{await((S=u.value)==null?void 0:S.validate()),A.Message.success(r.id?"编辑成功":"新增成功"),c.value=!1,y()}catch(N){console.error(N)}},C=S=>({dashboard:"📊",system:"⚙️",user:"👤",role:"👥",menu:"📋",setting:"🔧"})[S||""]||"📄";return e.onMounted(()=>{y()}),(S,N)=>(e.openBlock(),e.createElementBlock("div",wo,[e.createVNode(e.unref($.Card),{class:"menu-card"},{default:e.withCtx(()=>[e.createElementVNode("div",xo,[e.createVNode(e.unref(E.Button),{type:"primary",onClick:N[0]||(N[0]=V=>_())},{default:e.withCtx(()=>[...N[14]||(N[14]=[e.createTextVNode("新增菜单",-1)])]),_:1})]),e.createElementVNode("div",Bo,[e.createElementVNode("table",So,[N[19]||(N[19]=e.createElementVNode("thead",null,[e.createElementVNode("tr",null,[e.createElementVNode("th",null,"菜单名称"),e.createElementVNode("th",null,"图标"),e.createElementVNode("th",null,"路由路径"),e.createElementVNode("th",null,"类型"),e.createElementVNode("th",null,"排序"),e.createElementVNode("th",null,"状态"),e.createElementVNode("th",null,"操作")])],-1)),e.createElementVNode("tbody",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,V=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:V.id},[e.createElementVNode("tr",bo,[e.createElementVNode("td",null,[e.createElementVNode("span",{class:"menu-name",onClick:T=>b(V)},e.toDisplayString(V.title),9,To)]),e.createElementVNode("td",null,e.toDisplayString(C(V.icon)),1),e.createElementVNode("td",null,e.toDisplayString(V.path),1),e.createElementVNode("td",null,[e.createVNode(e.unref($.Tag),{type:V.type===e.unref(M).DIRECTORY?"primary":V.type===e.unref(M).MENU?"success":"warning",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(V.type===e.unref(M).DIRECTORY?"目录":V.type===e.unref(M).MENU?"菜单":"按钮"),1)]),_:2},1032,["type"])]),e.createElementVNode("td",null,e.toDisplayString(V.sort),1),e.createElementVNode("td",null,[e.createVNode(e.unref($.Tag),{type:V.status===e.unref(B).ENABLED?"success":"danger",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(V.status===e.unref(B).ENABLED?"启用":"禁用"),1)]),_:2},1032,["type"])]),e.createElementVNode("td",null,[e.createVNode(e.unref(E.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(E.Button),{type:"primary",link:"",size:"small",onClick:T=>_(V.id)},{default:e.withCtx(()=>[...N[15]||(N[15]=[e.createTextVNode("新增",-1)])]),_:1},8,["onClick"]),e.createVNode(e.unref(E.Button),{type:"primary",link:"",size:"small",onClick:T=>b(V)},{default:e.withCtx(()=>[...N[16]||(N[16]=[e.createTextVNode("编辑",-1)])]),_:1},8,["onClick"])]),_:2},1024)])]),V.children?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(V.children,T=>(e.openBlock(),e.createElementBlock("tr",{key:T.id,class:"tree-row tree-row--level-1"},[e.createElementVNode("td",null,[N[17]||(N[17]=e.createElementVNode("span",{class:"tree-indent"},null,-1)),e.createElementVNode("span",{class:"menu-name",onClick:P=>b(T)},e.toDisplayString(T.title),9,Do)]),e.createElementVNode("td",null,e.toDisplayString(C(T.icon)),1),e.createElementVNode("td",null,e.toDisplayString(T.path),1),e.createElementVNode("td",null,[e.createVNode(e.unref($.Tag),{type:T.type===e.unref(M).DIRECTORY?"primary":T.type===e.unref(M).MENU?"success":"warning",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(T.type===e.unref(M).DIRECTORY?"目录":T.type===e.unref(M).MENU?"菜单":"按钮"),1)]),_:2},1032,["type"])]),e.createElementVNode("td",null,e.toDisplayString(T.sort),1),e.createElementVNode("td",null,[e.createVNode(e.unref($.Tag),{type:T.status===e.unref(B).ENABLED?"success":"danger",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(T.status===e.unref(B).ENABLED?"启用":"禁用"),1)]),_:2},1032,["type"])]),e.createElementVNode("td",null,[e.createVNode(e.unref(E.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(E.Button),{type:"primary",link:"",size:"small",onClick:P=>b(T)},{default:e.withCtx(()=>[...N[18]||(N[18]=[e.createTextVNode("编辑",-1)])]),_:1},8,["onClick"])]),_:2},1024)])]))),128)):e.createCommentVNode("",!0)],64))),128))])])])]),_:1}),e.createVNode(e.unref(A.Modal),{modelValue:c.value,"onUpdate:modelValue":N[13]||(N[13]=V=>c.value=V),title:d.value,width:"600px"},{footer:e.withCtx(()=>[e.createVNode(e.unref(E.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(E.Button),{onClick:N[12]||(N[12]=V=>c.value=!1)},{default:e.withCtx(()=>[...N[20]||(N[20]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(e.unref(E.Button),{type:"primary",onClick:p},{default:e.withCtx(()=>[...N[21]||(N[21]=[e.createTextVNode("确定",-1)])]),_:1})]),_:1})]),default:e.withCtx(()=>[e.createVNode(e.unref(h.Form),{ref_key:"formRef",ref:u,model:r,rules:n,"label-width":"80px"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.FormItem),{label:"上级菜单"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:r.parentId,"onUpdate:modelValue":N[1]||(N[1]=V=>r.parentId=V),placeholder:"上级菜单ID",disabled:""},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"菜单类型"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Select),{modelValue:r.type,"onUpdate:modelValue":N[2]||(N[2]=V=>r.type=V),options:e.unref(Le)},null,8,["modelValue","options"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"菜单名称",prop:"name"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:r.name,"onUpdate:modelValue":N[3]||(N[3]=V=>r.name=V),placeholder:"请输入菜单名称(路由name)"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"菜单标题",prop:"title"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:r.title,"onUpdate:modelValue":N[4]||(N[4]=V=>r.title=V),placeholder:"请输入菜单标题"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"路由路径",prop:"path"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:r.path,"onUpdate:modelValue":N[5]||(N[5]=V=>r.path=V),placeholder:"请输入路由路径"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"组件路径"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:r.component,"onUpdate:modelValue":N[6]||(N[6]=V=>r.component=V),placeholder:"请输入组件路径"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"图标"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:r.icon,"onUpdate:modelValue":N[7]||(N[7]=V=>r.icon=V),placeholder:"请输入图标名称"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"排序"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.InputNumber),{modelValue:r.sort,"onUpdate:modelValue":N[8]||(N[8]=V=>r.sort=V),min:0},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"状态"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Switch),{modelValue:r.status,"onUpdate:modelValue":N[9]||(N[9]=V=>r.status=V),"active-value":e.unref(B).ENABLED,"inactive-value":e.unref(B).DISABLED},null,8,["modelValue","active-value","inactive-value"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"隐藏"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Switch),{modelValue:r.hidden,"onUpdate:modelValue":N[10]||(N[10]=V=>r.hidden=V)},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"缓存"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Switch),{modelValue:r.keepAlive,"onUpdate:modelValue":N[11]||(N[11]=V=>r.keepAlive=V)},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])]))}}),[["__scopeId","data-v-2a272a68"]])},Symbol.toStringTag,{value:"Module"}));s.Footer=on,s.Forbidden=Te,s.Gender=Ie,s.GenderOptions=Xn,s.GenderText=Hn,s.Header=Be,s.Layout=me,s.Login=Se,s.MenuType=M,s.MenuTypeOptions=Le,s.MenuTypeText=Wn,s.NotFound=be,s.Sidebar=xe,s.Status=B,s.StatusOptions=pe,s.StatusText=Yn,s.Tabs=vt,s.batchDeleteUsers=jn,s.clearToken=de,s.createLayoutRoute=yn,s.createMenu=An,s.createRole=bn,s.createRouter=En,s.createUser=Fn,s.defaultDynamicRoutes=Ke,s.deleteMenu=Un,s.deleteRole=Dn,s.deleteUser=On,s.errorRoute=le,s.getMenuList=Ln,s.getMenuTree=$n,s.getRefreshToken=Ye,s.getRoleDetail=Sn,s.getRoleList=Bn,s.getToken=ee,s.getTokenExpire=Ee,s.getUserDetail=zn,s.getUserInfo=wn,s.getUserList=Rn,s.hasPermission=_n,s.hasRole=De,s.hasToken=ce,s.http=I,s.isAdmin=gn,s.isTokenExpired=we,s.layoutRoute=ae,s.local=k,s.localStorageUtil=W,s.login=kn,s.logout=Cn,s.mockMenuData=_e,s.permissionDirective=Jn,s.refreshToken=xn,s.resetPassword=Kn,s.resetRouter=We,s.router=te,s.session=je,s.sessionStorageUtil=X,s.setRefreshToken=ye,s.setToken=ge,s.setTokenExpire=ke,s.setTokenInfo=Ce,s.staticRoutes=oe,s.updateMenu=Mn,s.updateRole=Tn,s.updateRoleStatus=In,s.updateUser=Pn,s.updateUserStatus=qn,s.useApp=fn,s.useAppStore=K,s.useAuth=hn,s.useAuthStore=G,s.useForm=Vn,s.useMenuStore=J,s.useTable=Nn,s.useUserStore=O,Object.defineProperty(s,Symbol.toStringTag,{value:"Module"})});
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- .sidebar[data-v-c12b0ee4]{height:100%;display:flex;flex-direction:column;background-color:var(--bg-color)}.sidebar--vertical[data-v-c12b0ee4]{border-right:1px solid var(--color-border-lighter)}.sidebar--horizontal[data-v-c12b0ee4]{flex-direction:row;border:none;background-color:transparent}.sidebar--horizontal .sidebar__menu[data-v-c12b0ee4]{border:none;background-color:transparent}.sidebar--collapsed.sidebar--vertical .sidebar__logo[data-v-c12b0ee4]{justify-content:center;padding:0}.sidebar__logo[data-v-c12b0ee4]{height:50px;display:flex;align-items:center;padding:0 20px;gap:10px;border-bottom:1px solid var(--color-border-lighter)}.sidebar__logo-img[data-v-c12b0ee4]{width:32px;height:32px}.sidebar__logo-text[data-v-c12b0ee4]{font-size:16px;font-weight:600;color:var(--color-primary)}.sidebar__search[data-v-c12b0ee4]{padding:10px;border-bottom:1px solid var(--color-border-lighter);position:relative}.sidebar__search-results[data-v-c12b0ee4]{position:absolute;top:100%;left:0;right:0;background-color:var(--bg-color);border:1px solid var(--color-border-lighter);border-radius:var(--border-radius-base);box-shadow:var(--box-shadow);max-height:300px;overflow-y:auto;z-index:100}.sidebar__search-item[data-v-c12b0ee4]{display:flex;align-items:center;gap:10px;padding:10px 12px;cursor:pointer;transition:background-color .2s}.sidebar__search-item[data-v-c12b0ee4]:hover{background-color:var(--color-fill)}.sidebar__search-item-info[data-v-c12b0ee4]{display:flex;flex-direction:column;gap:2px}.sidebar__search-item-title[data-v-c12b0ee4]{font-size:14px;color:var(--color-text-primary)}.sidebar__search-item-parent[data-v-c12b0ee4]{font-size:12px;color:var(--color-text-secondary)}.sidebar__menu[data-v-c12b0ee4]{flex:1;border-right:none;overflow-y:auto}.sidebar__user[data-v-c12b0ee4]{padding:10px;border-top:1px solid var(--color-border-lighter);display:flex;align-items:center;justify-content:space-between}.sidebar__user-info[data-v-c12b0ee4]{display:flex;flex-direction:column;gap:2px}.sidebar__user-name[data-v-c12b0ee4]{font-size:14px;font-weight:500}.sidebar__user-role[data-v-c12b0ee4]{font-size:12px;color:var(--color-text-secondary)}.menu-icon[data-v-c12b0ee4]{margin-right:8px}.header[data-v-7095203b]{display:flex;align-items:center;justify-content:space-between;padding:0 20px;height:100%;background-color:var(--bg-color);border-bottom:1px solid var(--color-border-lighter)}.header__left[data-v-7095203b]{display:flex;align-items:center;gap:15px}.header__collapse[data-v-7095203b]{width:24px;height:24px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--color-text-regular);transition:color .2s}.header__collapse[data-v-7095203b]:hover{color:var(--color-primary)}.header__breadcrumb[data-v-7095203b]{font-size:14px;color:var(--color-text-secondary)}.header__breadcrumb .breadcrumb-separator[data-v-7095203b]{margin:0 8px;color:var(--color-text-placeholder)}.header__breadcrumb .is-current[data-v-7095203b]{color:var(--color-text-primary);font-weight:500}.header__right[data-v-7095203b]{display:flex;align-items:center;gap:8px}.header__action[data-v-7095203b]{width:32px;height:32px;display:flex;align-items:center;justify-content:center;cursor:pointer;border-radius:var(--border-radius-base);color:var(--color-text-regular);transition:all .2s}.header__action[data-v-7095203b]:hover{background-color:var(--color-fill);color:var(--color-primary)}.header__layout[data-v-7095203b]{position:relative}.header__layout-dropdown[data-v-7095203b]{position:absolute;top:calc(100% + 8px);right:0;min-width:200px;background-color:var(--bg-color);border-radius:var(--border-radius-base);box-shadow:var(--box-shadow);padding:12px;z-index:100}.header__layout-title[data-v-7095203b]{font-size:12px;color:var(--color-text-secondary);margin-bottom:8px;padding-left:4px}.header__layout-options[data-v-7095203b]{display:flex;flex-direction:column;gap:4px}.header__layout-option[data-v-7095203b]{display:flex;align-items:center;gap:8px;padding:8px 12px;cursor:pointer;border-radius:var(--border-radius-base);font-size:14px;color:var(--color-text-regular);transition:all .2s}.header__layout-option[data-v-7095203b]:hover{background-color:var(--color-fill)}.header__layout-option.is-active[data-v-7095203b]{color:var(--color-primary);background-color:var(--color-primary-light-9)}.header__layout-option .layout-icon[data-v-7095203b]{font-size:16px}.header__color-options[data-v-7095203b]{display:flex;gap:8px;padding:8px 0}.header__color-option[data-v-7095203b]{width:20px;height:20px;border-radius:50%;cursor:pointer;transition:transform .2s}.header__color-option[data-v-7095203b]:hover{transform:scale(1.2)}.header__color-option.is-active[data-v-7095203b]{box-shadow:0 0 0 2px var(--bg-color),0 0 0 4px currentColor}.header__layout-divider[data-v-7095203b]{height:1px;background-color:var(--color-border-lighter);margin:8px 0}.header__layout-item[data-v-7095203b]{display:flex;align-items:center;gap:8px;padding:8px 12px;cursor:pointer;border-radius:var(--border-radius-base);font-size:14px;color:var(--color-text-regular);transition:all .2s}.header__layout-item[data-v-7095203b]:hover{background-color:var(--color-fill)}.header__user[data-v-7095203b]{position:relative;margin-left:8px}.header__user-trigger[data-v-7095203b]{display:flex;align-items:center;gap:8px;cursor:pointer;padding:4px 8px;border-radius:var(--border-radius-base);transition:background-color .2s}.header__user-trigger[data-v-7095203b]:hover{background-color:var(--color-fill)}.header__user-name[data-v-7095203b]{font-size:14px;color:var(--color-text-primary);max-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.header__user-arrow[data-v-7095203b]{font-size:10px;color:var(--color-text-secondary);transition:transform .2s}.header__user-arrow.is-active[data-v-7095203b]{transform:rotate(180deg)}.header__avatar[data-v-7095203b]{width:32px;height:32px;border-radius:50%;background:linear-gradient(135deg,var(--color-primary),var(--color-primary-light-3));display:flex;align-items:center;justify-content:center;color:#fff;font-size:14px;font-weight:500}.header__dropdown[data-v-7095203b]{position:absolute;top:calc(100% + 8px);right:0;min-width:200px;background-color:var(--bg-color);border-radius:var(--border-radius-base);box-shadow:var(--box-shadow);overflow:hidden;z-index:100}.header__dropdown-header[data-v-7095203b]{display:flex;align-items:center;gap:12px;padding:16px}.header__dropdown-avatar[data-v-7095203b]{width:40px;height:40px;border-radius:50%;background:linear-gradient(135deg,var(--color-primary),var(--color-primary-light-3));display:flex;align-items:center;justify-content:center;color:#fff;font-size:16px;font-weight:500}.header__dropdown-info[data-v-7095203b]{flex:1}.header__dropdown-name[data-v-7095203b]{font-size:14px;font-weight:500;color:var(--color-text-primary)}.header__dropdown-role[data-v-7095203b]{font-size:12px;color:var(--color-text-secondary);margin-top:2px}.header__dropdown-divider[data-v-7095203b]{height:1px;background-color:var(--color-border-lighter)}.header__dropdown-menu[data-v-7095203b]{padding:8px 0}.header__dropdown-item[data-v-7095203b]{display:flex;align-items:center;gap:10px;padding:10px 16px;cursor:pointer;font-size:14px;color:var(--color-text-regular);transition:all .2s}.header__dropdown-item[data-v-7095203b]:hover{background-color:var(--color-fill);color:var(--color-text-primary)}.header__dropdown-item--danger[data-v-7095203b]{color:var(--color-danger)}.header__dropdown-item--danger[data-v-7095203b]:hover{background-color:var(--color-danger-light);color:var(--color-danger)}.header__dropdown-icon[data-v-7095203b]{font-size:16px}.header__search-modal[data-v-7095203b]{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#00000080;display:flex;align-items:flex-start;justify-content:center;padding-top:100px;z-index:200}.search-container[data-v-7095203b]{width:600px;max-width:90vw;background-color:var(--bg-color);border-radius:var(--border-radius-large);box-shadow:var(--box-shadow-dark);overflow:hidden}.search-input-wrapper[data-v-7095203b]{display:flex;align-items:center;padding:16px 20px;border-bottom:1px solid var(--color-border-lighter)}.search-input-wrapper .search-icon[data-v-7095203b]{color:var(--color-text-secondary);margin-right:12px}.search-input-wrapper .search-input[data-v-7095203b]{flex:1;font-size:16px;color:var(--color-text-primary);background:transparent;border:none;outline:none}.search-input-wrapper .search-input[data-v-7095203b]::placeholder{color:var(--color-text-placeholder)}.search-input-wrapper .search-shortcut[data-v-7095203b]{font-size:12px;color:var(--color-text-secondary);padding:4px 8px;background-color:var(--color-fill);border-radius:var(--border-radius-base)}.search-results[data-v-7095203b]{max-height:400px;overflow-y:auto;padding:8px 0}.search-result-item[data-v-7095203b]{display:flex;align-items:center;gap:12px;padding:12px 20px;cursor:pointer;transition:background-color .2s}.search-result-item[data-v-7095203b]:hover{background-color:var(--color-fill)}.search-result-item.is-first[data-v-7095203b]{background-color:var(--color-primary-light-9)}.search-result-item .search-result-icon[data-v-7095203b]{font-size:20px}.search-result-item .search-result-info[data-v-7095203b]{flex:1;display:flex;flex-direction:column;gap:2px}.search-result-item .search-result-title[data-v-7095203b]{font-size:14px;color:var(--color-text-primary)}.search-result-item .search-result-parent[data-v-7095203b]{font-size:12px;color:var(--color-text-secondary)}.search-empty[data-v-7095203b]{padding:40px 20px;text-align:center;color:var(--color-text-secondary);font-size:14px}.dropdown-enter-active[data-v-7095203b],.dropdown-leave-active[data-v-7095203b]{transition:all .2s ease}.dropdown-enter-from[data-v-7095203b],.dropdown-leave-to[data-v-7095203b]{opacity:0;transform:translateY(-10px)}.search-enter-active[data-v-7095203b],.search-leave-active[data-v-7095203b]{transition:all .2s ease}.search-enter-from[data-v-7095203b],.search-leave-to[data-v-7095203b]{opacity:0}:root.grey-mode[data-v-7095203b]{filter:grayscale(100%)}.layout[data-v-129cb9dc]{display:flex;width:100%;height:100%}.layout--sidebar[data-v-129cb9dc]{flex-direction:row}.layout--top[data-v-129cb9dc]{flex-direction:column}.layout--top .layout__header-top[data-v-129cb9dc]{height:50px;background-color:var(--bg-color);border-bottom:1px solid var(--color-border-lighter);display:flex;align-items:center;padding:0 20px;gap:20px}.layout--top .layout__header-logo[data-v-129cb9dc]{display:flex;align-items:center;gap:10px}.layout--top .layout__logo-img[data-v-129cb9dc]{width:32px;height:32px}.layout--top .layout__logo-text[data-v-129cb9dc]{font-size:16px;font-weight:600;color:var(--color-primary)}.layout--top .layout__top-menu[data-v-129cb9dc]{flex:1;border:none}.layout--top .layout__header-right[data-v-129cb9dc]{display:flex;align-items:center}.layout--top .layout__content[data-v-129cb9dc]{flex:1;overflow:auto;background-color:var(--bg-color-page)}.layout--mix[data-v-129cb9dc]{flex-direction:column}.layout--mix .layout__header-mix[data-v-129cb9dc]{height:50px;background-color:var(--bg-color);border-bottom:1px solid var(--color-border-lighter);display:flex;align-items:center;justify-content:space-between;padding:0 20px}.layout--mix .layout__header-left[data-v-129cb9dc]{display:flex;align-items:center;gap:15px}.layout--mix .layout__collapse[data-v-129cb9dc]{width:24px;height:24px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--color-text-regular);transition:color .2s}.layout--mix .layout__collapse[data-v-129cb9dc]:hover{color:var(--color-primary)}.layout--mix .layout__top-menu[data-v-129cb9dc]{border:none}.layout--mix .layout__header-right[data-v-129cb9dc]{display:flex;align-items:center}.layout--mix .layout__body[data-v-129cb9dc]{flex:1;display:flex;overflow:hidden}.layout--mix .layout__aside[data-v-129cb9dc]{transition:width .3s;overflow:hidden;flex-shrink:0;height:100%;background-color:var(--bg-color);border-right:1px solid var(--color-border-lighter)}.layout--mix .layout__content[data-v-129cb9dc]{flex:1;overflow:auto;background-color:var(--bg-color-page)}.layout__aside[data-v-129cb9dc]{transition:width .3s;overflow:hidden;flex-shrink:0;height:100%}.layout__main[data-v-129cb9dc]{flex:1;display:flex;flex-direction:column;overflow:hidden;height:100%}.layout__header[data-v-129cb9dc]{height:50px;background-color:var(--bg-color);border-bottom:1px solid var(--color-border-lighter);flex-shrink:0}.layout__content[data-v-129cb9dc]{flex:1;overflow:auto;background-color:var(--bg-color-page)}.tabs-wrapper[data-v-9156d8cd]{width:100%;height:100%;padding:0 10px}.tabs-wrapper[data-v-9156d8cd] .t-tabs{height:100%}.tabs-wrapper[data-v-9156d8cd] .t-tabs__header{margin:0;border-bottom:none}.tabs-wrapper[data-v-9156d8cd] .t-tabs__nav{border:none}.tabs-wrapper[data-v-9156d8cd] .t-tabs__item{height:32px;line-height:32px;border:1px solid var(--color-border-lighter);margin-right:5px;border-radius:var(--border-radius-base);padding:0 15px}.tabs-wrapper[data-v-9156d8cd] .t-tabs__item.is-active{background-color:var(--color-primary-light-9);border-color:var(--color-primary)}.tab-label[data-v-9156d8cd]{display:flex;align-items:center;gap:5px}.tab-close[data-v-9156d8cd]{width:14px;height:14px;display:flex;align-items:center;justify-content:center;font-size:10px;border-radius:50%}.tab-close[data-v-9156d8cd]:hover{background-color:var(--color-danger-light);color:var(--color-danger)}.footer[data-v-4852826a]{width:100%;text-align:center;font-size:12px;color:var(--color-text-secondary)}.login[data-v-40e9f7eb]{width:100%;min-height:100vh;display:flex;align-items:center;justify-content:flex-end;padding-right:15%;background:linear-gradient(135deg,var(--color-primary-light-9) 0%,var(--color-primary-light-7) 100%)}.login__container[data-v-40e9f7eb]{width:400px;padding:40px;background-color:var(--bg-color);border-radius:var(--border-radius-large);box-shadow:var(--box-shadow-dark)}.login__header[data-v-40e9f7eb]{text-align:center;margin-bottom:30px}.login__logo[data-v-40e9f7eb]{width:60px;height:60px}.login__title[data-v-40e9f7eb]{font-size:28px;font-weight:600;color:var(--color-primary);margin:15px 0 5px}.login__subtitle[data-v-40e9f7eb]{font-size:14px;color:var(--color-text-secondary)}.login__form[data-v-40e9f7eb] .x-form-item{margin-bottom:20px}.login__form[data-v-40e9f7eb] .x-input__prefix{margin-right:8px}.login__submit[data-v-40e9f7eb]{width:100%}.login__footer[data-v-40e9f7eb]{text-align:center;margin-top:20px;font-size:12px;color:var(--color-text-placeholder)}.error-page[data-v-c3c12c24]{width:100%;height:100vh;display:flex;align-items:center;justify-content:center;background-color:var(--bg-color-page)}.error-page__content[data-v-c3c12c24]{text-align:center}.error-page__code[data-v-c3c12c24]{font-size:120px;font-weight:600;color:var(--color-primary);line-height:1;margin-bottom:20px}.error-page__title[data-v-c3c12c24]{font-size:24px;font-weight:500;color:var(--color-text-primary);margin-bottom:10px}.error-page__desc[data-v-c3c12c24]{font-size:14px;color:var(--color-text-secondary);margin-bottom:30px}.error-page[data-v-dd5f2795]{width:100%;height:100vh;display:flex;align-items:center;justify-content:center;background-color:var(--bg-color-page)}.error-page__content[data-v-dd5f2795]{text-align:center}.error-page__code[data-v-dd5f2795]{font-size:120px;font-weight:600;color:var(--color-warning);line-height:1;margin-bottom:20px}.error-page__title[data-v-dd5f2795]{font-size:24px;font-weight:500;color:var(--color-text-primary);margin-bottom:10px}.error-page__desc[data-v-dd5f2795]{font-size:14px;color:var(--color-text-secondary);margin-bottom:30px}.dashboard[data-v-44648cb1]{padding:20px}.dashboard__stats[data-v-44648cb1]{display:grid;grid-template-columns:repeat(4,1fr);gap:20px;margin-bottom:20px}@media (max-width: 1200px){.dashboard__stats[data-v-44648cb1]{grid-template-columns:repeat(2,1fr)}}@media (max-width: 768px){.dashboard__stats[data-v-44648cb1]{grid-template-columns:1fr}}.dashboard__main[data-v-44648cb1]{display:grid;grid-template-columns:repeat(2,1fr);gap:20px;margin-bottom:20px}@media (max-width: 992px){.dashboard__main[data-v-44648cb1]{grid-template-columns:1fr}}.dashboard__quick[data-v-44648cb1],.dashboard__activity[data-v-44648cb1]{min-height:300px}.card-title[data-v-44648cb1]{font-size:16px;font-weight:500}.stat-card__content[data-v-44648cb1]{display:flex;align-items:center;gap:15px}.stat-card__icon[data-v-44648cb1]{width:50px;height:50px;display:flex;align-items:center;justify-content:center;font-size:24px;border-radius:var(--border-radius-base)}.stat-card__info[data-v-44648cb1]{flex:1}.stat-card__title[data-v-44648cb1]{font-size:14px;color:var(--color-text-secondary);margin-bottom:5px}.stat-card__value[data-v-44648cb1]{font-size:24px;font-weight:600}.quick-links[data-v-44648cb1]{display:grid;grid-template-columns:repeat(4,1fr);gap:15px}@media (max-width: 768px){.quick-links[data-v-44648cb1]{grid-template-columns:repeat(2,1fr)}}.quick-link[data-v-44648cb1]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px;border-radius:var(--border-radius-base);background-color:var(--color-fill);text-decoration:none;transition:all var(--transition-duration-fast)}.quick-link[data-v-44648cb1]:hover{background-color:var(--color-primary-light-9);transform:translateY(-2px)}.quick-link__icon[data-v-44648cb1]{font-size:28px;margin-bottom:10px}.quick-link__title[data-v-44648cb1]{font-size:14px;color:var(--color-text-primary)}.activity-list[data-v-44648cb1]{display:flex;flex-direction:column;gap:15px}.activity-item[data-v-44648cb1]{display:flex;align-items:center;gap:10px;padding-bottom:15px;border-bottom:1px solid var(--color-border-lighter)}.activity-item[data-v-44648cb1]:last-child{border-bottom:none;padding-bottom:0}.activity-item__action[data-v-44648cb1]{flex:1;font-size:14px;color:var(--color-text-regular)}.activity-item__time[data-v-44648cb1]{font-size:12px;color:var(--color-text-placeholder)}.system-info[data-v-44648cb1]{display:grid;grid-template-columns:repeat(2,1fr);gap:20px}@media (max-width: 768px){.system-info[data-v-44648cb1]{grid-template-columns:1fr}}.system-info__item[data-v-44648cb1]{display:flex;align-items:center;gap:10px}.system-info__label[data-v-44648cb1]{font-size:14px;color:var(--color-text-secondary);min-width:80px}.system-info__value[data-v-44648cb1]{font-size:14px;color:var(--color-text-primary)}.user-page[data-v-d2491ae0]{padding:20px}.user-page .search-card[data-v-d2491ae0]{margin-bottom:20px}.user-page .toolbar[data-v-d2491ae0]{margin-bottom:15px}.data-table[data-v-d2491ae0]{width:100%;border-collapse:collapse}.data-table th[data-v-d2491ae0],.data-table td[data-v-d2491ae0]{padding:12px;text-align:left;border-bottom:1px solid var(--color-border-lighter)}.data-table th[data-v-d2491ae0]{font-weight:500;color:var(--color-text-regular);background-color:var(--color-fill-light)}.data-table .loading-cell[data-v-d2491ae0],.data-table .empty-cell[data-v-d2491ae0]{text-align:center;color:var(--color-text-secondary);padding:40px}.pagination-wrapper[data-v-d2491ae0]{display:flex;justify-content:flex-end;margin-top:20px}.role-page[data-v-8ad30bc6]{padding:20px}.role-page .search-card[data-v-8ad30bc6]{margin-bottom:20px}.role-page .toolbar[data-v-8ad30bc6]{margin-bottom:15px}.data-table[data-v-8ad30bc6]{width:100%;border-collapse:collapse}.data-table th[data-v-8ad30bc6],.data-table td[data-v-8ad30bc6]{padding:12px;text-align:left;border-bottom:1px solid var(--color-border-lighter)}.data-table th[data-v-8ad30bc6]{font-weight:500;color:var(--color-text-regular);background-color:var(--color-fill-light)}.data-table .loading-cell[data-v-8ad30bc6],.data-table .empty-cell[data-v-8ad30bc6]{text-align:center;color:var(--color-text-secondary);padding:40px}.pagination-wrapper[data-v-8ad30bc6]{display:flex;justify-content:flex-end;margin-top:20px}.menu-page[data-v-2a272a68]{padding:20px}.menu-page .toolbar[data-v-2a272a68]{margin-bottom:15px}.tree-table[data-v-2a272a68]{width:100%;border-collapse:collapse}.tree-table th[data-v-2a272a68],.tree-table td[data-v-2a272a68]{padding:12px;text-align:left;border-bottom:1px solid var(--color-border-lighter)}.tree-table th[data-v-2a272a68]{font-weight:500;color:var(--color-text-regular);background-color:var(--color-fill-light)}.tree-table .tree-row--level-1 td[data-v-2a272a68]:first-child{padding-left:30px}.tree-indent[data-v-2a272a68]{display:inline-block;width:20px}.menu-name[data-v-2a272a68]{cursor:pointer;color:var(--color-primary)}.menu-name[data-v-2a272a68]:hover{text-decoration:underline}
1
+ .sidebar[data-v-df836fc7]{height:100%;display:flex;flex-direction:column;background-color:var(--bg-color);border-right:1px solid var(--color-border-lighter)}.sidebar--collapsed .sidebar__logo[data-v-df836fc7]{justify-content:center;padding:0}.sidebar__logo[data-v-df836fc7]{height:50px;display:flex;align-items:center;padding:0 20px;gap:10px;border-bottom:1px solid var(--color-border-lighter)}.sidebar__logo-img[data-v-df836fc7]{width:32px;height:32px}.sidebar__logo-text[data-v-df836fc7]{font-size:16px;font-weight:600;color:var(--color-primary)}.sidebar__search[data-v-df836fc7]{padding:10px;border-bottom:1px solid var(--color-border-lighter);position:relative}.sidebar__search-results[data-v-df836fc7]{position:absolute;top:100%;left:0;right:0;background-color:var(--bg-color);border:1px solid var(--color-border-lighter);border-radius:var(--border-radius-base);box-shadow:var(--box-shadow);max-height:300px;overflow-y:auto;z-index:100}.sidebar__search-item[data-v-df836fc7]{display:flex;align-items:center;gap:10px;padding:10px 12px;cursor:pointer;transition:background-color .2s}.sidebar__search-item[data-v-df836fc7]:hover{background-color:var(--color-fill)}.sidebar__search-item-info[data-v-df836fc7]{display:flex;flex-direction:column;gap:2px}.sidebar__search-item-title[data-v-df836fc7]{font-size:14px;color:var(--color-text-primary)}.sidebar__search-item-parent[data-v-df836fc7]{font-size:12px;color:var(--color-text-secondary)}.sidebar__menu[data-v-df836fc7]{flex:1;border-right:none;overflow-y:auto}.sidebar__user[data-v-df836fc7]{padding:10px;border-top:1px solid var(--color-border-lighter);display:flex;align-items:center;justify-content:space-between}.sidebar__user-info[data-v-df836fc7]{display:flex;flex-direction:column;gap:2px}.sidebar__user-name[data-v-df836fc7]{font-size:14px;font-weight:500}.sidebar__user-role[data-v-df836fc7]{font-size:12px;color:var(--color-text-secondary)}.header[data-v-015c45c9]{display:flex;align-items:center;justify-content:space-between;padding:0 20px;height:100%;background-color:var(--bg-color);border-bottom:1px solid var(--color-border-lighter)}.header__left[data-v-015c45c9]{display:flex;align-items:center;gap:15px}.header__collapse[data-v-015c45c9]{width:24px;height:24px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--color-text-regular);transition:color .2s}.header__collapse[data-v-015c45c9]:hover{color:var(--color-primary)}.header__breadcrumb[data-v-015c45c9]{font-size:14px;color:var(--color-text-secondary)}.header__breadcrumb .breadcrumb-separator[data-v-015c45c9]{margin:0 8px;color:var(--color-text-placeholder)}.header__breadcrumb .is-current[data-v-015c45c9]{color:var(--color-text-primary);font-weight:500}.header__right[data-v-015c45c9]{display:flex;align-items:center;gap:8px}.header__action[data-v-015c45c9]{width:32px;height:32px;display:flex;align-items:center;justify-content:center;cursor:pointer;border-radius:var(--border-radius-base);color:var(--color-text-regular);transition:all .2s}.header__action[data-v-015c45c9]:hover{background-color:var(--color-fill);color:var(--color-primary)}.header__user[data-v-015c45c9]{position:relative;margin-left:8px}.header__user-trigger[data-v-015c45c9]{display:flex;align-items:center;gap:8px;cursor:pointer;padding:4px 8px;border-radius:var(--border-radius-base);transition:background-color .2s}.header__user-trigger[data-v-015c45c9]:hover{background-color:var(--color-fill)}.header__user-name[data-v-015c45c9]{font-size:14px;color:var(--color-text-primary);max-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.header__user-arrow[data-v-015c45c9]{font-size:10px;color:var(--color-text-secondary);transition:transform .2s}.header__user-arrow.is-active[data-v-015c45c9]{transform:rotate(180deg)}.header__avatar[data-v-015c45c9]{width:32px;height:32px;border-radius:50%;background:linear-gradient(135deg,var(--color-primary),var(--color-primary-light-3));display:flex;align-items:center;justify-content:center;color:#fff;font-size:14px;font-weight:500}.header__dropdown[data-v-015c45c9]{position:absolute;top:calc(100% + 8px);right:0;min-width:200px;background-color:var(--bg-color);border-radius:var(--border-radius-base);box-shadow:var(--box-shadow);overflow:hidden;z-index:100}.header__dropdown-header[data-v-015c45c9]{display:flex;align-items:center;gap:12px;padding:16px}.header__dropdown-avatar[data-v-015c45c9]{width:40px;height:40px;border-radius:50%;background:linear-gradient(135deg,var(--color-primary),var(--color-primary-light-3));display:flex;align-items:center;justify-content:center;color:#fff;font-size:16px;font-weight:500}.header__dropdown-info[data-v-015c45c9]{flex:1}.header__dropdown-name[data-v-015c45c9]{font-size:14px;font-weight:500;color:var(--color-text-primary)}.header__dropdown-role[data-v-015c45c9]{font-size:12px;color:var(--color-text-secondary);margin-top:2px}.header__dropdown-divider[data-v-015c45c9]{height:1px;background-color:var(--color-border-lighter)}.header__dropdown-menu[data-v-015c45c9]{padding:8px 0}.header__dropdown-item[data-v-015c45c9]{display:flex;align-items:center;gap:10px;padding:10px 16px;cursor:pointer;font-size:14px;color:var(--color-text-regular);transition:all .2s}.header__dropdown-item[data-v-015c45c9]:hover{background-color:var(--color-fill);color:var(--color-text-primary)}.header__dropdown-item--danger[data-v-015c45c9]{color:var(--color-danger)}.header__dropdown-item--danger[data-v-015c45c9]:hover{background-color:var(--color-danger-light);color:var(--color-danger)}.header__search-modal[data-v-015c45c9]{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#00000080;display:flex;align-items:flex-start;justify-content:center;padding-top:100px;z-index:200}.search-container[data-v-015c45c9]{width:600px;max-width:90vw;background-color:var(--bg-color);border-radius:var(--border-radius-large);box-shadow:var(--box-shadow-dark);overflow:hidden}.search-input-wrapper[data-v-015c45c9]{display:flex;align-items:center;padding:16px 20px;border-bottom:1px solid var(--color-border-lighter)}.search-input-wrapper .search-icon[data-v-015c45c9]{color:var(--color-text-secondary);margin-right:12px}.search-input-wrapper .search-input[data-v-015c45c9]{flex:1;font-size:16px;color:var(--color-text-primary);background:transparent;border:none;outline:none}.search-input-wrapper .search-input[data-v-015c45c9]::placeholder{color:var(--color-text-placeholder)}.search-input-wrapper .search-shortcut[data-v-015c45c9]{font-size:12px;color:var(--color-text-secondary);padding:4px 8px;background-color:var(--color-fill);border-radius:var(--border-radius-base)}.search-results[data-v-015c45c9]{max-height:400px;overflow-y:auto;padding:8px 0}.search-result-item[data-v-015c45c9]{display:flex;align-items:center;gap:12px;padding:12px 20px;cursor:pointer;transition:background-color .2s}.search-result-item[data-v-015c45c9]:hover{background-color:var(--color-fill)}.search-result-item.is-first[data-v-015c45c9]{background-color:var(--color-primary-light-9)}.search-result-item .search-result-icon[data-v-015c45c9]{color:var(--color-text-secondary)}.search-result-item .search-result-info[data-v-015c45c9]{flex:1;display:flex;flex-direction:column;gap:2px}.search-result-item .search-result-title[data-v-015c45c9]{font-size:14px;color:var(--color-text-primary)}.search-result-item .search-result-parent[data-v-015c45c9]{font-size:12px;color:var(--color-text-secondary)}.search-empty[data-v-015c45c9]{padding:40px 20px;text-align:center;color:var(--color-text-secondary);font-size:14px}.settings-drawer .settings-section[data-v-015c45c9]{margin-bottom:24px}.settings-drawer .settings-title[data-v-015c45c9]{font-size:14px;font-weight:500;color:var(--color-text-primary);margin-bottom:12px}.settings-drawer .settings-layout-options[data-v-015c45c9]{display:flex;gap:12px}.settings-drawer .layout-option[data-v-015c45c9]{flex:1;display:flex;flex-direction:column;align-items:center;gap:8px;padding:12px;border:1px solid var(--color-border);border-radius:var(--border-radius-base);cursor:pointer;transition:all .2s}.settings-drawer .layout-option[data-v-015c45c9]:hover{border-color:var(--color-primary-light-5)}.settings-drawer .layout-option.is-active[data-v-015c45c9]{border-color:var(--color-primary);background-color:var(--color-primary-light-9)}.settings-drawer .layout-option__preview[data-v-015c45c9]{width:48px;height:36px;border:1px solid var(--color-border-light);border-radius:2px;overflow:hidden}.settings-drawer .layout-option__label[data-v-015c45c9]{font-size:12px;color:var(--color-text-regular)}.settings-drawer .layout-preview-sidebar[data-v-015c45c9]{display:flex;height:100%}.settings-drawer .layout-preview-sidebar .preview-aside[data-v-015c45c9]{width:25%;height:100%;background-color:var(--color-primary-light-7)}.settings-drawer .layout-preview-sidebar .preview-main[data-v-015c45c9]{flex:1;display:flex;flex-direction:column}.settings-drawer .layout-preview-sidebar .preview-main .preview-header[data-v-015c45c9]{height:20%;background-color:var(--color-border-light)}.settings-drawer .layout-preview-sidebar .preview-main .preview-content[data-v-015c45c9]{flex:1;background-color:var(--bg-color-page)}.settings-drawer .layout-preview-top[data-v-015c45c9]{display:flex;flex-direction:column;height:100%}.settings-drawer .layout-preview-top .preview-header-full[data-v-015c45c9]{height:25%;background-color:var(--color-primary-light-7)}.settings-drawer .layout-preview-top .preview-content-full[data-v-015c45c9]{flex:1;background-color:var(--bg-color-page)}.settings-drawer .layout-preview-mix[data-v-015c45c9]{display:flex;flex-direction:column;height:100%}.settings-drawer .layout-preview-mix .preview-header-mix[data-v-015c45c9]{height:25%;background-color:var(--color-primary-light-7);display:flex}.settings-drawer .layout-preview-mix .preview-header-mix .preview-mix-left[data-v-015c45c9]{width:30%;background-color:var(--color-primary)}.settings-drawer .layout-preview-mix .preview-mix-body[data-v-015c45c9]{flex:1;display:flex}.settings-drawer .layout-preview-mix .preview-mix-body .preview-mix-aside[data-v-015c45c9]{width:25%;background-color:var(--color-primary-light-8)}.settings-drawer .layout-preview-mix .preview-mix-body .preview-mix-content[data-v-015c45c9]{flex:1;background-color:var(--bg-color-page)}.settings-drawer .settings-color-options[data-v-015c45c9]{display:flex;gap:12px}.settings-drawer .color-option[data-v-015c45c9]{width:24px;height:24px;border-radius:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:transform .2s}.settings-drawer .color-option[data-v-015c45c9]:hover{transform:scale(1.1)}.settings-drawer .color-option.is-active[data-v-015c45c9]{box-shadow:0 0 0 2px var(--bg-color),0 0 0 4px var(--color-primary)}.settings-drawer .settings-switch-list[data-v-015c45c9]{display:flex;flex-direction:column;gap:12px}.settings-drawer .settings-switch-item[data-v-015c45c9]{display:flex;align-items:center;justify-content:space-between}.settings-drawer .settings-switch-item span[data-v-015c45c9]{font-size:14px;color:var(--color-text-regular)}.settings-drawer .switch-wrapper[data-v-015c45c9]{width:44px;height:22px;display:flex;align-items:center;cursor:pointer}.settings-drawer .switch-wrapper .switch-core[data-v-015c45c9]{width:100%;height:100%;border-radius:11px;background-color:var(--color-border);position:relative;transition:background-color .2s}.settings-drawer .switch-wrapper .switch-core[data-v-015c45c9]:after{content:"";position:absolute;top:2px;left:2px;width:18px;height:18px;background-color:#fff;border-radius:50%;transition:left .2s}.settings-drawer .switch-wrapper.is-checked .switch-core[data-v-015c45c9]{background-color:var(--color-primary)}.settings-drawer .switch-wrapper.is-checked .switch-core[data-v-015c45c9]:after{left:24px}.dropdown-enter-active[data-v-015c45c9],.dropdown-leave-active[data-v-015c45c9]{transition:all .2s ease}.dropdown-enter-from[data-v-015c45c9],.dropdown-leave-to[data-v-015c45c9]{opacity:0;transform:translateY(-10px)}.search-enter-active[data-v-015c45c9],.search-leave-active[data-v-015c45c9]{transition:all .2s ease}.search-enter-from[data-v-015c45c9],.search-leave-to[data-v-015c45c9]{opacity:0}:root.grey-mode[data-v-015c45c9]{filter:grayscale(100%)}.layout[data-v-a3110011]{display:flex;width:100%;height:100%}.layout__aside[data-v-a3110011]{transition:width .3s;overflow:hidden;flex-shrink:0;height:100%}.layout__main[data-v-a3110011]{flex:1;display:flex;flex-direction:column;overflow:hidden;height:100%}.layout__header[data-v-a3110011]{height:50px;background-color:var(--bg-color);border-bottom:1px solid var(--color-border-lighter);flex-shrink:0}.layout__content[data-v-a3110011]{flex:1;overflow:auto;background-color:var(--bg-color-page)}.tabs-wrapper[data-v-9156d8cd]{width:100%;height:100%;padding:0 10px}.tabs-wrapper[data-v-9156d8cd] .t-tabs{height:100%}.tabs-wrapper[data-v-9156d8cd] .t-tabs__header{margin:0;border-bottom:none}.tabs-wrapper[data-v-9156d8cd] .t-tabs__nav{border:none}.tabs-wrapper[data-v-9156d8cd] .t-tabs__item{height:32px;line-height:32px;border:1px solid var(--color-border-lighter);margin-right:5px;border-radius:var(--border-radius-base);padding:0 15px}.tabs-wrapper[data-v-9156d8cd] .t-tabs__item.is-active{background-color:var(--color-primary-light-9);border-color:var(--color-primary)}.tab-label[data-v-9156d8cd]{display:flex;align-items:center;gap:5px}.tab-close[data-v-9156d8cd]{width:14px;height:14px;display:flex;align-items:center;justify-content:center;font-size:10px;border-radius:50%}.tab-close[data-v-9156d8cd]:hover{background-color:var(--color-danger-light);color:var(--color-danger)}.footer[data-v-4852826a]{width:100%;text-align:center;font-size:12px;color:var(--color-text-secondary)}.login[data-v-40e9f7eb]{width:100%;min-height:100vh;display:flex;align-items:center;justify-content:flex-end;padding-right:15%;background:linear-gradient(135deg,var(--color-primary-light-9) 0%,var(--color-primary-light-7) 100%)}.login__container[data-v-40e9f7eb]{width:400px;padding:40px;background-color:var(--bg-color);border-radius:var(--border-radius-large);box-shadow:var(--box-shadow-dark)}.login__header[data-v-40e9f7eb]{text-align:center;margin-bottom:30px}.login__logo[data-v-40e9f7eb]{width:60px;height:60px}.login__title[data-v-40e9f7eb]{font-size:28px;font-weight:600;color:var(--color-primary);margin:15px 0 5px}.login__subtitle[data-v-40e9f7eb]{font-size:14px;color:var(--color-text-secondary)}.login__form[data-v-40e9f7eb] .x-form-item{margin-bottom:20px}.login__form[data-v-40e9f7eb] .x-input__prefix{margin-right:8px}.login__submit[data-v-40e9f7eb]{width:100%}.login__footer[data-v-40e9f7eb]{text-align:center;margin-top:20px;font-size:12px;color:var(--color-text-placeholder)}.error-page[data-v-c3c12c24]{width:100%;height:100vh;display:flex;align-items:center;justify-content:center;background-color:var(--bg-color-page)}.error-page__content[data-v-c3c12c24]{text-align:center}.error-page__code[data-v-c3c12c24]{font-size:120px;font-weight:600;color:var(--color-primary);line-height:1;margin-bottom:20px}.error-page__title[data-v-c3c12c24]{font-size:24px;font-weight:500;color:var(--color-text-primary);margin-bottom:10px}.error-page__desc[data-v-c3c12c24]{font-size:14px;color:var(--color-text-secondary);margin-bottom:30px}.error-page[data-v-dd5f2795]{width:100%;height:100vh;display:flex;align-items:center;justify-content:center;background-color:var(--bg-color-page)}.error-page__content[data-v-dd5f2795]{text-align:center}.error-page__code[data-v-dd5f2795]{font-size:120px;font-weight:600;color:var(--color-warning);line-height:1;margin-bottom:20px}.error-page__title[data-v-dd5f2795]{font-size:24px;font-weight:500;color:var(--color-text-primary);margin-bottom:10px}.error-page__desc[data-v-dd5f2795]{font-size:14px;color:var(--color-text-secondary);margin-bottom:30px}.dashboard[data-v-44648cb1]{padding:20px}.dashboard__stats[data-v-44648cb1]{display:grid;grid-template-columns:repeat(4,1fr);gap:20px;margin-bottom:20px}@media (max-width: 1200px){.dashboard__stats[data-v-44648cb1]{grid-template-columns:repeat(2,1fr)}}@media (max-width: 768px){.dashboard__stats[data-v-44648cb1]{grid-template-columns:1fr}}.dashboard__main[data-v-44648cb1]{display:grid;grid-template-columns:repeat(2,1fr);gap:20px;margin-bottom:20px}@media (max-width: 992px){.dashboard__main[data-v-44648cb1]{grid-template-columns:1fr}}.dashboard__quick[data-v-44648cb1],.dashboard__activity[data-v-44648cb1]{min-height:300px}.card-title[data-v-44648cb1]{font-size:16px;font-weight:500}.stat-card__content[data-v-44648cb1]{display:flex;align-items:center;gap:15px}.stat-card__icon[data-v-44648cb1]{width:50px;height:50px;display:flex;align-items:center;justify-content:center;font-size:24px;border-radius:var(--border-radius-base)}.stat-card__info[data-v-44648cb1]{flex:1}.stat-card__title[data-v-44648cb1]{font-size:14px;color:var(--color-text-secondary);margin-bottom:5px}.stat-card__value[data-v-44648cb1]{font-size:24px;font-weight:600}.quick-links[data-v-44648cb1]{display:grid;grid-template-columns:repeat(4,1fr);gap:15px}@media (max-width: 768px){.quick-links[data-v-44648cb1]{grid-template-columns:repeat(2,1fr)}}.quick-link[data-v-44648cb1]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px;border-radius:var(--border-radius-base);background-color:var(--color-fill);text-decoration:none;transition:all var(--transition-duration-fast)}.quick-link[data-v-44648cb1]:hover{background-color:var(--color-primary-light-9);transform:translateY(-2px)}.quick-link__icon[data-v-44648cb1]{font-size:28px;margin-bottom:10px}.quick-link__title[data-v-44648cb1]{font-size:14px;color:var(--color-text-primary)}.activity-list[data-v-44648cb1]{display:flex;flex-direction:column;gap:15px}.activity-item[data-v-44648cb1]{display:flex;align-items:center;gap:10px;padding-bottom:15px;border-bottom:1px solid var(--color-border-lighter)}.activity-item[data-v-44648cb1]:last-child{border-bottom:none;padding-bottom:0}.activity-item__action[data-v-44648cb1]{flex:1;font-size:14px;color:var(--color-text-regular)}.activity-item__time[data-v-44648cb1]{font-size:12px;color:var(--color-text-placeholder)}.system-info[data-v-44648cb1]{display:grid;grid-template-columns:repeat(2,1fr);gap:20px}@media (max-width: 768px){.system-info[data-v-44648cb1]{grid-template-columns:1fr}}.system-info__item[data-v-44648cb1]{display:flex;align-items:center;gap:10px}.system-info__label[data-v-44648cb1]{font-size:14px;color:var(--color-text-secondary);min-width:80px}.system-info__value[data-v-44648cb1]{font-size:14px;color:var(--color-text-primary)}.user-page[data-v-d2491ae0]{padding:20px}.user-page .search-card[data-v-d2491ae0]{margin-bottom:20px}.user-page .toolbar[data-v-d2491ae0]{margin-bottom:15px}.data-table[data-v-d2491ae0]{width:100%;border-collapse:collapse}.data-table th[data-v-d2491ae0],.data-table td[data-v-d2491ae0]{padding:12px;text-align:left;border-bottom:1px solid var(--color-border-lighter)}.data-table th[data-v-d2491ae0]{font-weight:500;color:var(--color-text-regular);background-color:var(--color-fill-light)}.data-table .loading-cell[data-v-d2491ae0],.data-table .empty-cell[data-v-d2491ae0]{text-align:center;color:var(--color-text-secondary);padding:40px}.pagination-wrapper[data-v-d2491ae0]{display:flex;justify-content:flex-end;margin-top:20px}.role-page[data-v-8ad30bc6]{padding:20px}.role-page .search-card[data-v-8ad30bc6]{margin-bottom:20px}.role-page .toolbar[data-v-8ad30bc6]{margin-bottom:15px}.data-table[data-v-8ad30bc6]{width:100%;border-collapse:collapse}.data-table th[data-v-8ad30bc6],.data-table td[data-v-8ad30bc6]{padding:12px;text-align:left;border-bottom:1px solid var(--color-border-lighter)}.data-table th[data-v-8ad30bc6]{font-weight:500;color:var(--color-text-regular);background-color:var(--color-fill-light)}.data-table .loading-cell[data-v-8ad30bc6],.data-table .empty-cell[data-v-8ad30bc6]{text-align:center;color:var(--color-text-secondary);padding:40px}.pagination-wrapper[data-v-8ad30bc6]{display:flex;justify-content:flex-end;margin-top:20px}.menu-page[data-v-2a272a68]{padding:20px}.menu-page .toolbar[data-v-2a272a68]{margin-bottom:15px}.tree-table[data-v-2a272a68]{width:100%;border-collapse:collapse}.tree-table th[data-v-2a272a68],.tree-table td[data-v-2a272a68]{padding:12px;text-align:left;border-bottom:1px solid var(--color-border-lighter)}.tree-table th[data-v-2a272a68]{font-weight:500;color:var(--color-text-regular);background-color:var(--color-fill-light)}.tree-table .tree-row--level-1 td[data-v-2a272a68]:first-child{padding-left:30px}.tree-indent[data-v-2a272a68]{display:inline-block;width:20px}.menu-name[data-v-2a272a68]{cursor:pointer;color:var(--color-primary)}.menu-name[data-v-2a272a68]:hover{text-decoration:underline}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xto-fronted",
3
- "version": "0.3.4",
3
+ "version": "0.3.5",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "XTO 前端应用框架",