xto-fronted 0.3.0 → 0.3.1

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(a,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):(a=typeof globalThis<"u"?globalThis:a||self,e(a.XtoFronted={},a.Vue,a.Pinia,a.VueRouter,a.navigation,a.base,a.form,a.feedback,a.axios,a.data))})(this,function(a,e,X,L,P,w,h,I,De,D){"use strict";const j="xto_",ie=t=>({get(r){const l=t.getItem(j+r);if(!l)return null;try{return JSON.parse(l)}catch{return l}},set(r,l){if(l==null){t.removeItem(j+r);return}const m=typeof l=="string"?l:JSON.stringify(l);t.setItem(j+r,m)},remove(r){t.removeItem(j+r)},clear(){Object.keys(t).forEach(l=>{l.startsWith(j)&&t.removeItem(l)})}}),q=ie(window.localStorage),K=ie(window.sessionStorage),y={get:q.get,set:q.set,remove:q.remove,clear:q.clear},Ie={get:K.get,set:K.set,remove:K.remove,clear:K.clear},O=X.defineStore("app",()=>{const t=e.ref(y.get("appName")||"XTO App"),r=e.ref(y.get("indexPath")||"/dashboard"),l=e.ref(y.get("isDark")||!1),m=e.ref(y.get("theme")||"light"),c=e.ref(y.get("layout")||"sidebar"),i=e.ref(y.get("isCollapsed")||!1),s=e.ref(y.get("showTabs")??!0),n=e.ref(y.get("showFooter")??!0),f=e.ref(y.get("showBreadcrumb")??!0),N=e.ref(y.get("primaryColor")||"#409eff"),g=e.ref([]),B=e.computed(()=>l.value?"dark":"light"),p=T=>{t.value=T,y.set("appName",T)},E=T=>{r.value=T,y.set("indexPath",T)},S=()=>{l.value=!l.value,m.value=l.value?"dark":"light",_()},V=T=>{m.value=T,l.value=T==="dark",_()},_=()=>{const T=document.documentElement;l.value?T.classList.add("dark"):T.classList.remove("dark"),y.set("isDark",l.value),y.set("theme",m.value)},x=()=>{i.value=!i.value,y.set("isCollapsed",i.value)},U=T=>{c.value=T,y.set("layout",T)},M=()=>{s.value=!s.value,y.set("showTabs",s.value)},k=()=>{n.value=!n.value,y.set("showFooter",n.value)},d=()=>{f.value=!f.value,y.set("showBreadcrumb",f.value)},o=T=>{N.value=T,document.documentElement.style.setProperty("--color-primary",T),y.set("primaryColor",T)},u=T=>{g.value.includes(T)||g.value.push(T)},R=T=>{const Te=g.value.indexOf(T);Te>-1&&g.value.splice(Te,1)},z=()=>{g.value=[]},Q=()=>{_(),N.value!=="#409eff"&&document.documentElement.style.setProperty("--color-primary",N.value)};return e.watch(l,_),{appName:t,indexPath:r,isDark:l,theme:m,layout:c,isCollapsed:i,showTabs:s,showFooter:n,showBreadcrumb:f,primaryColor:N,cachedViews:g,themeClass:B,setAppName:p,setIndexPath:E,toggleTheme:S,toggleCollapse:x,setTheme:V,setLayout:U,toggleTabs:M,toggleFooter:k,toggleBreadcrumb:d,setPrimaryColor:o,addCachedView:u,removeCachedView:R,clearCachedViews:z,initTheme:Q}}),de="/vite.svg",$e=(t,r,l)=>{const m=t[r];return m?typeof m=="function"?m():Promise.resolve(m):new Promise((c,i)=>{(typeof queueMicrotask=="function"?queueMicrotask:setTimeout)(i.bind(null,new Error("Unknown variable dynamic import: "+r+(r.split("/").length!==l?". Note that variables only represent file names one level deep.":""))))})},Z=[{path:"/login",name:"Login",component:()=>Promise.resolve().then(()=>Mt),meta:{title:"登录",hidden:!0}},{path:"/404",name:"NotFound",component:()=>Promise.resolve().then(()=>Ft),meta:{title:"404",hidden:!0}},{path:"/403",name:"Forbidden",component:()=>Promise.resolve().then(()=>Ot),meta:{title:"403",hidden:!0}}],v={path:"/:pathMatch(.*)*",redirect:"/404",meta:{hidden:!0}},ee={path:"/",name:"Layout",component:()=>Promise.resolve().then(()=>wt),redirect:"/dashboard",children:[{path:"/dashboard",name:"Dashboard",component:()=>Promise.resolve().then(()=>Se),meta:{title:"仪表盘",icon:"dashboard",keepAlive:!0,affix:!0}},{path:"/system/user",name:"SystemUser",component:()=>Promise.resolve().then(()=>xe),meta:{title:"用户管理",icon:"user",keepAlive:!0}},{path:"/system/role",name:"SystemRole",component:()=>Promise.resolve().then(()=>Be),meta:{title:"角色管理",icon:"role",keepAlive:!0}},{path:"/system/menu",name:"SystemMenu",component:()=>Promise.resolve().then(()=>be),meta:{title:"菜单管理",icon:"menu",keepAlive:!0}}]},Le=[{path:"/dashboard",name:"Dashboard",component:()=>Promise.resolve().then(()=>Se),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(()=>xe),meta:{title:"用户管理",icon:"user",keepAlive:!0}},{path:"role",name:"SystemRole",component:()=>Promise.resolve().then(()=>Be),meta:{title:"角色管理",icon:"role",keepAlive:!0}},{path:"menu",name:"SystemMenu",component:()=>Promise.resolve().then(()=>be),meta:{title:"菜单管理",icon:"menu",keepAlive:!0}}]}],ce=[{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}]}],te="token",ne="refresh_token",oe="token_expire",J=()=>y.get(te),me=t=>{y.set(te,t)},Ae=()=>y.get(ne),pe=t=>{y.set(ne,t)},ue=()=>y.get(oe),fe=t=>{y.set(oe,t)},he=t=>{me(t.token),pe(t.refreshToken),fe(t.expireTime)},le=()=>{y.remove(te),y.remove(ne),y.remove(oe)},Ve=()=>{const t=ue();return t?Date.now()>t:!0},re=()=>!!J()&&!Ve(),F=X.defineStore("user",()=>{const t=e.ref(y.get("userInfo")),r=e.ref(y.get("roles")||[]),l=e.ref(y.get("permissions")||[]),m=e.computed(()=>!!t.value),c=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)||""}),s=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:r,permissions:l,isLoggedIn:m,username:c,nickname:i,avatar:s,userId:n,setUserInfo:p=>{t.value=p,r.value=p.roles||[],l.value=p.permissions||[],y.set("userInfo",p),y.set("roles",p.roles||[]),y.set("permissions",p.permissions||[])},clearUserInfo:()=>{t.value=null,r.value=[],l.value=[],y.remove("userInfo"),y.remove("roles"),y.remove("permissions")},hasPermission:p=>Array.isArray(p)?p.some(E=>l.value.includes(E)):l.value.includes(p),hasRole:p=>Array.isArray(p)?p.some(E=>r.value.includes(E)):r.value.includes(p)}}),G=L.createRouter({history:L.createWebHistory(),routes:[...Z,ee,v],scrollBehavior:()=>({left:0,top:0})}),Me=["/login","/404","/403"];G.beforeEach(async(t,r,l)=>{const m=O();if(m.initTheme(),re())if(t.path==="/login")l({path:"/"});else{const c=F();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()}),H().setMenuList(ce)),t.name&&t.meta.keepAlive&&m.addCachedView(t.name),l()}else Me.includes(t.path)?l():l("/login")});function Ue(){const t=L.createRouter({history:L.createWebHistory(),routes:[...Z,ee,v]});G.matcher=t.matcher}const H=X.defineStore("menu",()=>{const t=e.ref(y.get("menuList")||[]),r=e.computed(()=>t.value.length>0),l=s=>{t.value=s,y.set("menuList",s)},m=()=>{t.value=[],y.remove("menuList")},c=s=>s.filter(n=>!n.hidden).map(n=>{const f={path:n.path,name:n.name,meta:{title:n.title,icon:n.icon,keepAlive:n.keepAlive,hidden:n.hidden}};return n.redirect&&(f.redirect=n.redirect),n.component&&(f.component=()=>$e(Object.assign({}),`../views/${n.component}.vue`,3)),n.children&&n.children.length>0&&(f.children=c(n.children)),f});return{menuList:t,hasMenu:r,setMenuList:l,clearMenu:m,generateRoutes:c,addRoutes:s=>{c(s).forEach(f=>{G.addRoute("Layout",f)})}}}),Y=X.defineStore("auth",()=>{const t=e.ref(J()),r=e.computed(()=>re()),l=e.ref(""),m=e.ref(""),c=e.ref(""),i=e.ref("/login");return{token:t,isLoggedIn:r,baseUrl:l,appId:m,clientId:c,loginPath:i,login:p=>{t.value=p.token,he(p)},logout:()=>{t.value=null,le()},setBaseUrl:p=>{l.value=p},setAppId:p=>{m.value=p},setClientId:p=>{c.value=p},setLoginPath:p=>{i.value=p}}}),Re={class:"sidebar"},Fe={class:"sidebar__logo"},ze={class:"sidebar__logo-text"},Pe={key:0,class:"sidebar__search"},Oe={key:0,class:"sidebar__search-results"},je=["onClick"],qe={class:"menu-icon"},Ke={class:"sidebar__search-item-info"},He={class:"sidebar__search-item-title"},Ye={key:0,class:"sidebar__search-item-parent"},We={class:"menu-icon"},Xe={class:"menu-icon"},Je={class:"menu-icon"},Ge={key:1,class:"sidebar__user"},Qe={class:"sidebar__user-info"},Ze={class:"sidebar__user-name"},ve={class:"sidebar__user-role"},et=e.defineComponent({__name:"Sidebar",setup(t){const r=L.useRoute(),l=L.useRouter(),m=H(),c=F(),i=Y(),s=O(),n=e.ref(""),f=e.computed(()=>s.isCollapsed),N=e.computed(()=>r.path),g=e.computed(()=>s.isDark?"#1d1e1f":"#fff"),B=e.computed(()=>s.isDark?"#cfd3dc":"#303133"),p=e.computed(()=>"#409eff"),E=(k,d="")=>{const o=[];return k.forEach(u=>{u.children&&u.children.length>0?o.push(...E(u.children,u.title)):o.push({...u,parentTitle:d})}),o},S=e.computed(()=>n.value.trim()?E(m.menuList).filter(d=>d.title.toLowerCase().includes(n.value.toLowerCase())):[]),V=e.computed(()=>n.value.trim()?m.menuList.map(k=>{if(k.children&&k.children.length>0){const d=k.children.filter(o=>o.title.toLowerCase().includes(n.value.toLowerCase()));return d.length>0?{...k,children:d}:null}return k.title.toLowerCase().includes(n.value.toLowerCase())?k:null}).filter(Boolean):m.menuList),_=k=>{k&&k!==r.path&&(l.push(k),n.value="")},x=k=>{l.push(k),n.value=""},U=()=>{i.logout(),c.clearUserInfo(),m.clearMenu(),l.push("/login")},M=k=>({dashboard:"📊",system:"⚙️",user:"👤",role:"👥",menu:"📋",setting:"🔧"})[k||""]||"📄";return(k,d)=>(e.openBlock(),e.createElementBlock("div",Re,[e.createElementVNode("div",Fe,[d[1]||(d[1]=e.createElementVNode("img",{src:de,alt:"Logo",class:"sidebar__logo-img"},null,-1)),e.withDirectives(e.createElementVNode("span",ze,"Xto Demo",512),[[e.vShow,!f.value]])]),f.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Pe,[e.createVNode(e.unref(h.Input),{modelValue:n.value,"onUpdate:modelValue":d[0]||(d[0]=o=>n.value=o),placeholder:"搜索菜单...",size:"small",clearable:""},null,8,["modelValue"]),S.value.length>0?(e.openBlock(),e.createElementBlock("div",Oe,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(S.value,o=>(e.openBlock(),e.createElementBlock("div",{key:o.path,class:"sidebar__search-item",onClick:u=>x(o.path)},[e.createElementVNode("span",qe,e.toDisplayString(M(o.icon)),1),e.createElementVNode("div",Ke,[e.createElementVNode("span",He,e.toDisplayString(o.title),1),o.parentTitle?(e.openBlock(),e.createElementBlock("span",Ye,e.toDisplayString(o.parentTitle),1)):e.createCommentVNode("",!0)])],8,je))),128))])):e.createCommentVNode("",!0)])),e.createVNode(e.unref(P.Menu),{"default-active":N.value,collapse:f.value,"collapse-transition":!1,"background-color":g.value,"text-color":B.value,"active-text-color":p.value,class:"sidebar__menu",onSelect:_},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(V.value,o=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:o.path},[o.children&&o.children.length>0?(e.openBlock(),e.createBlock(e.unref(P.SubMenu),{key:0,index:o.path},{title:e.withCtx(()=>[e.createElementVNode("span",We,e.toDisplayString(M(o.icon)),1),e.createElementVNode("span",null,e.toDisplayString(o.title),1)]),default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.children,u=>(e.openBlock(),e.createBlock(e.unref(P.MenuItem),{key:u.path,index:u.path},{default:e.withCtx(()=>[e.createElementVNode("span",Xe,e.toDisplayString(M(u.icon)),1),e.createElementVNode("span",null,e.toDisplayString(u.title),1)]),_:2},1032,["index"]))),128))]),_:2},1032,["index"])):(e.openBlock(),e.createBlock(e.unref(P.MenuItem),{key:1,index:o.path},{default:e.withCtx(()=>[e.createElementVNode("span",Je,e.toDisplayString(M(o.icon)),1),e.createElementVNode("span",null,e.toDisplayString(o.title),1)]),_:2},1032,["index"]))],64))),128))]),_:1},8,["default-active","collapse","background-color","text-color","active-text-color"]),f.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Ge,[e.createElementVNode("div",Qe,[e.createElementVNode("span",Ze,e.toDisplayString(e.unref(c).nickname),1),e.createElementVNode("span",ve,e.toDisplayString(e.unref(c).roles.join(", ")),1)]),e.createVNode(e.unref(w.Button),{type:"text",size:"small",onClick:U},{default:e.withCtx(()=>[...d[2]||(d[2]=[e.createTextVNode("退出",-1)])]),_:1})]))]))}}),A=(t,r)=>{const l=t.__vccOpts||t;for(const[m,c]of r)l[m]=c;return l},_e=A(et,[["__scopeId","data-v-1d224580"]]),tt={class:"header"},nt={class:"header__left"},ot={key:0},lt={key:1},rt={class:"header__breadcrumb"},at={key:0},st={class:"header__right"},it=["title"],dt={key:0,viewBox:"0 0 24 24",width:"16",height:"16",fill:"currentColor"},ct={key:1,viewBox:"0 0 24 24",width:"16",height:"16",fill:"currentColor"},mt={key:0},pt={key:1},ut={class:"header__avatar"},ft={class:"header__user-name"},ht={key:0,class:"header__dropdown"},Vt={class:"header__dropdown-header"},_t={class:"header__dropdown-avatar"},gt={class:"header__dropdown-info"},Nt={class:"header__dropdown-name"},yt={class:"header__dropdown-role"},ge=A(e.defineComponent({__name:"Header",setup(t){const r=L.useRoute(),l=L.useRouter(),m=O(),c=F(),i=Y(),s=H(),n=e.computed(()=>m.isCollapsed),f=e.ref(!1),N=e.ref(null),g=e.ref(!1),B=e.computed(()=>r.matched.filter(u=>u.meta&&u.meta.title).map(u=>({title:u.meta.title,path:u.path}))),p=()=>{m.toggleCollapse()},E=()=>{m.toggleTheme()},S=()=>{document.fullscreenElement?document.exitFullscreen():document.documentElement.requestFullscreen()},V=()=>{g.value=!!document.fullscreenElement},_=()=>{f.value=!f.value},x=()=>{f.value=!1},U=()=>{x(),alert("个人信息功能开发中...")},M=()=>{x(),alert("修改密码功能开发中...")},k=()=>{x(),i.logout(),c.clearUserInfo(),s.clearMenu(),l.push("/login")},d=o=>{N.value&&!N.value.contains(o.target)&&x()};return e.onMounted(()=>{document.addEventListener("click",d),document.addEventListener("fullscreenchange",V)}),e.onUnmounted(()=>{document.removeEventListener("click",d),document.removeEventListener("fullscreenchange",V)}),(o,u)=>{var R;return e.openBlock(),e.createElementBlock("div",tt,[e.createElementVNode("div",nt,[e.createElementVNode("div",{class:"header__collapse",onClick:p},[n.value?(e.openBlock(),e.createElementBlock("span",ot,"☰")):(e.openBlock(),e.createElementBlock("span",lt,"☰"))]),e.createElementVNode("div",rt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(B.value,(z,Q)=>(e.openBlock(),e.createElementBlock("span",{key:z.path},[Q>0?(e.openBlock(),e.createElementBlock("span",at," / ")):e.createCommentVNode("",!0),e.createElementVNode("span",{class:e.normalizeClass({"is-current":Q===B.value.length-1})},e.toDisplayString(z.title),3)]))),128))])]),e.createElementVNode("div",st,[e.createElementVNode("div",{class:"header__action",onClick:S,title:g.value?"Exit Fullscreen":"Fullscreen"},[g.value?(e.openBlock(),e.createElementBlock("svg",dt,[...u[0]||(u[0]=[e.createElementVNode("path",{d:"M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"},null,-1)])])):(e.openBlock(),e.createElementBlock("svg",ct,[...u[1]||(u[1]=[e.createElementVNode("path",{d:"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"},null,-1)])]))],8,it),e.createElementVNode("div",{class:"header__action",onClick:E,title:"切换主题"},[e.unref(m).isDark?(e.openBlock(),e.createElementBlock("span",mt,"🌙")):(e.openBlock(),e.createElementBlock("span",pt,"☀️"))]),e.createElementVNode("div",{class:"header__user",ref_key:"dropdownRef",ref:N},[e.createElementVNode("div",{class:"header__user-trigger",onClick:e.withModifiers(_,["stop"])},[e.createElementVNode("div",ut,[e.createElementVNode("span",null,e.toDisplayString(((R=e.unref(c).nickname)==null?void 0:R.charAt(0))||"U"),1)]),e.createElementVNode("span",ft,e.toDisplayString(e.unref(c).nickname),1),e.createElementVNode("span",{class:e.normalizeClass(["header__user-arrow",{"is-active":f.value}])},"▼",2)]),e.createVNode(e.Transition,{name:"dropdown"},{default:e.withCtx(()=>{var z;return[f.value?(e.openBlock(),e.createElementBlock("div",ht,[e.createElementVNode("div",Vt,[e.createElementVNode("div",_t,[e.createElementVNode("span",null,e.toDisplayString(((z=e.unref(c).nickname)==null?void 0:z.charAt(0))||"U"),1)]),e.createElementVNode("div",gt,[e.createElementVNode("div",Nt,e.toDisplayString(e.unref(c).nickname),1),e.createElementVNode("div",yt,e.toDisplayString(e.unref(c).roles.join(", ")),1)])]),u[6]||(u[6]=e.createElementVNode("div",{class:"header__dropdown-divider"},null,-1)),e.createElementVNode("div",{class:"header__dropdown-menu"},[e.createElementVNode("div",{class:"header__dropdown-item",onClick:U},[...u[2]||(u[2]=[e.createElementVNode("span",{class:"header__dropdown-icon"},"👤",-1),e.createElementVNode("span",null,"个人信息",-1)])]),e.createElementVNode("div",{class:"header__dropdown-item",onClick:M},[...u[3]||(u[3]=[e.createElementVNode("span",{class:"header__dropdown-icon"},"🔐",-1),e.createElementVNode("span",null,"修改密码",-1)])]),u[5]||(u[5]=e.createElementVNode("div",{class:"header__dropdown-divider"},null,-1)),e.createElementVNode("div",{class:"header__dropdown-item header__dropdown-item--danger",onClick:k},[...u[4]||(u[4]=[e.createElementVNode("span",{class:"header__dropdown-icon"},"🚪",-1),e.createElementVNode("span",null,"退出登录",-1)])])])])):e.createCommentVNode("",!0)]}),_:1})],512)])])}}}),[["__scopeId","data-v-7af82b67"]]),Et={class:"layout"},kt={class:"layout__main"},Ct={class:"layout__content"},ae=A(e.defineComponent({__name:"index",setup(t){const r=O(),l=e.computed(()=>r.isCollapsed?"64px":"210px");return(m,c)=>{const i=e.resolveComponent("router-view");return e.openBlock(),e.createElementBlock("div",Et,[e.createElementVNode("aside",{class:"layout__aside",style:e.normalizeStyle({width:l.value})},[e.createVNode(_e)],4),e.createElementVNode("div",kt,[e.createVNode(ge,{class:"layout__header"}),e.createElementVNode("main",Ct,[e.createVNode(i)])])])}}}),[["__scopeId","data-v-0bcf8553"]]),wt=Object.freeze(Object.defineProperty({__proto__:null,default:ae},Symbol.toStringTag,{value:"Module"})),St={class:"tabs-wrapper"},xt={class:"tab-label"},Bt=["onClick"],bt=A(e.defineComponent({__name:"Tabs",setup(t){const r=L.useRoute(),l=L.useRouter(),m=e.computed(()=>{const n=[];return r.matched.forEach(f=>{var N;(N=f.meta)!=null&&N.affix&&n.push({name:f.name,title:f.meta.title,path:f.path,affix:!0})}),n}),c=e.computed(()=>r.path),i=n=>{l.push(n)},s=n=>{const f=m.value.find(N=>N.path===n);if(!(f!=null&&f.affix)&&n===c.value){const N=m.value.findIndex(B=>B.path===n),g=m.value[N-1]||m.value[N+1];g&&l.push(g.path)}};return(n,f)=>(e.openBlock(),e.createElementBlock("div",St,[e.createVNode(e.unref(P.Tabs),{modelValue:c.value,"onUpdate:modelValue":f[0]||(f[0]=N=>c.value=N),type:"card",onTabClick:i},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.value,N=>(e.openBlock(),e.createBlock(e.unref(P.TabPane),{key:N.path,name:N.path,label:N.title,closable:!N.affix},{label:e.withCtx(()=>[e.createElementVNode("span",xt,[e.createTextVNode(e.toDisplayString(N.title)+" ",1),N.affix?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",{key:0,class:"tab-close",onClick:e.withModifiers(g=>s(N.path),["stop"])}," ✕ ",8,Bt))])]),_:2},1032,["name","label","closable"]))),128))]),_:1},8,["modelValue"])]))}}),[["__scopeId","data-v-9156d8cd"]]),Tt={},Dt={class:"footer"};function It(t,r){return e.openBlock(),e.createElementBlock("div",Dt,[...r[0]||(r[0]=[e.createElementVNode("span",null,"Copyright © 2024 Xto Demo. All Rights Reserved.",-1)])])}const $t=A(Tt,[["render",It],["__scopeId","data-v-4852826a"]]),Lt={class:"login"},At={class:"login__container"},Ne=A(e.defineComponent({__name:"index",setup(t){const r=L.useRouter(),l=Y(),m=F(),c=H(),i=e.ref(!1),s=e.ref(!1),n=e.reactive({username:"admin",password:"123456"}),f={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"},{min:6,message:"密码长度至少6位",trigger:"blur"}]},N=e.ref(),g=async()=>{var B;try{await((B=N.value)==null?void 0:B.validate()),i.value=!0,setTimeout(()=>{l.login({token:"mock_token_"+Date.now(),refreshToken:"mock_refresh_token",expireTime:Date.now()+7*24*60*60*1e3}),m.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}]}]),I.Message.success("登录成功"),r.push("/"),i.value=!1},1e3)}catch{i.value=!1}};return(B,p)=>(e.openBlock(),e.createElementBlock("div",Lt,[e.createElementVNode("div",At,[p[5]||(p[5]=e.createElementVNode("div",{class:"login__header"},[e.createElementVNode("img",{src:de,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:N,model:n,rules:f,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]=E=>n.username=E),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]=E=>n.password=E),type:"password",placeholder:"密码","prefix-icon":"🔒",size:"large","show-password":"",onKeyup:e.withKeys(g,["enter"])},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(h.Checkbox),{modelValue:s.value,"onUpdate:modelValue":p[2]||(p[2]=E=>s.value=E)},{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:g},{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-cc0ffe99"]]),Mt=Object.freeze(Object.defineProperty({__proto__:null,default:Ne},Symbol.toStringTag,{value:"Module"})),Ut={class:"error-page"},Rt={class:"error-page__content"},ye=A(e.defineComponent({__name:"404",setup(t){const r=L.useRouter(),l=()=>{r.push("/")};return(m,c)=>(e.openBlock(),e.createElementBlock("div",Ut,[e.createElementVNode("div",Rt,[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(w.Button),{type:"primary",onClick:l},{default:e.withCtx(()=>[...c[0]||(c[0]=[e.createTextVNode("返回首页",-1)])]),_:1})])]))}}),[["__scopeId","data-v-c3c12c24"]]),Ft=Object.freeze(Object.defineProperty({__proto__:null,default:ye},Symbol.toStringTag,{value:"Module"})),zt={class:"error-page"},Pt={class:"error-page__content"},Ee=A(e.defineComponent({__name:"403",setup(t){const r=L.useRouter(),l=()=>{r.push("/")};return(m,c)=>(e.openBlock(),e.createElementBlock("div",zt,[e.createElementVNode("div",Pt,[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(w.Button),{type:"primary",onClick:l},{default:e.withCtx(()=>[...c[0]||(c[0]=[e.createTextVNode("返回首页",-1)])]),_:1})])]))}}),[["__scopeId","data-v-dd5f2795"]]),Ot=Object.freeze(Object.defineProperty({__proto__:null,default:Ee},Symbol.toStringTag,{value:"Module"}));function jt(){const t=O(),r=F(),l=Y(),m=e.computed(()=>r.nickname||r.username||""),c=e.computed(()=>r.userInfo),i=e.computed(()=>t.appName),s=e.computed(()=>l.isLoggedIn),n=e.computed(()=>t.isDark),f=e.computed(()=>t.theme),N=e.computed(()=>t.isCollapsed),g=e.computed(()=>t.layout);return{userName:m,userInfo:c,appName:i,isLoggedIn:s,isDark:n,theme:f,isCollapsed:N,layout:g,toggleTheme:()=>{t.toggleTheme()},toggleCollapse:()=>{t.toggleCollapse()}}}function qt(){const t=F(),r=i=>{const s=t.permissions;return s.includes("*")?!0:Array.isArray(i)?i.some(n=>s.includes(n)):s.includes(i)},l=i=>{const s=t.roles;return s.includes("admin")?!0:Array.isArray(i)?i.some(n=>s.includes(n)):s.includes(i)},m=e.computed(()=>t.roles.includes("admin")),c=e.computed(()=>t.isLoggedIn);return{hasPermission:r,hasRole:l,isAdmin:m,isLoggedIn:c}}function Kt(t,r={}){const{rules:l,onSubmit:m}=r,c=e.ref(),i=e.reactive({...t}),s=e.ref(!1),n=e.ref(!1),f=e.ref(!1),N=()=>{p(),f.value=!1,n.value=!0},g=S=>{Object.assign(i,S),f.value=!0,n.value=!0},B=()=>{n.value=!1,p()},p=()=>{var S;Object.keys(t).forEach(V=>{i[V]=t[V]}),(S=c.value)==null||S.resetFields()};return{formRef:c,formData:i,rules:l,loading:s,visible:n,isEdit:f,openAdd:N,openEdit:g,close:B,resetForm:p,handleSubmit:async()=>{var S;try{await((S=c.value)==null?void 0:S.validate()),s.value=!0,await(m==null?void 0:m(i)),B()}catch(V){console.error(V)}finally{s.value=!1}}}}function Ht(t){const{fetchData:r,defaultPageSize:l=10}=t,m=e.ref(!1),c=e.ref([]),i=e.ref(0),s=e.ref(1),n=e.ref(l),f=e.reactive({}),N=async()=>{m.value=!0;try{const _={...f,page:s.value,pageSize:n.value},x=await r(_);c.value=x.list,i.value=x.total}catch(_){console.error(_)}finally{m.value=!1}},g=()=>{s.value=1,N()},B=()=>{Object.keys(f).forEach(_=>{f[_]=void 0}),s.value=1,N()},p=_=>{s.value=_,N()},E=_=>{n.value=_,s.value=1,N()},S=()=>{N()},V=e.computed(()=>({current:s.value,pageSize:n.value,total:i.value}));return{loading:m,data:c,total:i,currentPage:s,pageSize:n,searchParams:f,pagination:V,getData:N,handleSearch:g,handleReset:B,handlePageChange:p,handleSizeChange:E,refresh:S}}function Yt(t){const l=F().permissions;return Array.isArray(t)?t.some(m=>l.includes(m)):l.includes(t)}function ke(t){const l=F().roles;return Array.isArray(t)?t.some(m=>l.includes(m)):l.includes(t)}function Wt(){return ke("admin")}const W=(()=>{const t=De.create({baseURL:void 0,timeout:3e4,headers:{"Content-Type":"application/json"}});return t.interceptors.request.use(r=>{const l=J();return l&&(r.headers.Authorization=`Bearer ${l}`),r},r=>Promise.reject(r)),t.interceptors.response.use(r=>{const{data:l}=r;return l.code===200||l.code===0?l.data:(I.Message.error(l.message||"请求失败"),Promise.reject(new Error(l.message||"请求失败")))},r=>{var m;const{response:l}=r;if(l)switch(l.status){case 401:I.Message.error("登录已过期,请重新登录"),le(),window.location.href="/login";break;case 403:I.Message.error("没有权限访问");break;case 404:I.Message.error("请求资源不存在");break;case 500:I.Message.error("服务器错误");break;default:I.Message.error(((m=l.data)==null?void 0:m.message)||"请求失败")}else I.Message.error("网络连接失败");return Promise.reject(r)}),t})(),b={get(t,r){return W.get(t,r)},post(t,r,l){return W.post(t,r,l)},put(t,r,l){return W.put(t,r,l)},patch(t,r,l){return W.patch(t,r,l)},delete(t,r){return W.delete(t,r)}};function Xt(t,r={}){const l=r.indexPath||"/dashboard";return{path:"/",name:"Layout",component:ae,redirect:l,children:t}}function Jt(t){return L.createRouter({history:L.createWebHistory(),routes:t,scrollBehavior:()=>({left:0,top:0})})}function Gt(t){return b.post("/auth/login",t)}function Qt(){return b.post("/auth/logout")}function Zt(){return b.get("/user/info")}function vt(t){return b.post("/auth/refresh",{refreshToken:t})}function en(t){return b.get("/role/list",{params:t})}function tn(t){return b.get(`/role/${t}`)}function nn(t){return b.post("/role",t)}function on(t,r){return b.put(`/role/${t}`,r)}function ln(t){return b.delete(`/role/${t}`)}function rn(t,r){return b.patch(`/role/${t}/status`,{status:r})}function an(){return b.get("/menu/list")}function sn(){return b.get("/menu/tree")}function dn(t){return b.post("/menu",t)}function cn(t,r){return b.put(`/menu/${t}`,r)}function mn(t){return b.delete(`/menu/${t}`)}function pn(t){return b.get("/user/list",{params:t})}function un(t){return b.get(`/user/${t}`)}function fn(t){return b.post("/user",t)}function hn(t,r){return b.put(`/user/${t}`,r)}function Vn(t){return b.delete(`/user/${t}`)}function _n(t){return b.post("/user/batch-delete",{ids:t})}function gn(t,r){return b.patch(`/user/${t}/status`,{status:r})}function Nn(t){return b.post(`/user/${t}/reset-password`)}var C=(t=>(t[t.ENABLED=1]="ENABLED",t[t.DISABLED=0]="DISABLED",t))(C||{}),Ce=(t=>(t[t.UNKNOWN=0]="UNKNOWN",t[t.MALE=1]="MALE",t[t.FEMALE=2]="FEMALE",t))(Ce||{}),$=(t=>(t[t.DIRECTORY=0]="DIRECTORY",t[t.MENU=1]="MENU",t[t.BUTTON=2]="BUTTON",t))($||{});const yn={1:"启用",0:"禁用"},En={0:"未知",1:"男",2:"女"},kn={0:"目录",1:"菜单",2:"按钮"},se=[{label:"启用",value:1},{label:"禁用",value:0}],Cn=[{label:"未知",value:0},{label:"男",value:1},{label:"女",value:2}],we=[{label:"目录",value:0},{label:"菜单",value:1},{label:"按钮",value:2}],wn={mounted(t,r){var s;const l=F(),{value:m}=r;if(!m)return;const c=l.permissions;let i=!1;Array.isArray(m)?i=m.some(n=>c.includes(n)||c.includes("*")):i=c.includes(m)||c.includes("*"),i||(s=t.parentNode)==null||s.removeChild(t)}},Sn={class:"dashboard"},xn={class:"dashboard__stats"},Bn={class:"stat-card__content"},bn={class:"stat-card__info"},Tn={class:"stat-card__title"},Dn={class:"dashboard__main"},In={class:"quick-links"},$n={class:"quick-link__icon"},Ln={class:"quick-link__title"},An={class:"activity-list"},Mn={class:"activity-item__action"},Un={class:"activity-item__time"},Rn={class:"system-info"},Fn={class:"system-info__item"},zn={class:"system-info__item"},Se=Object.freeze(Object.defineProperty({__proto__:null,default:A(e.defineComponent({__name:"index",setup(t){const r=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"}]),l=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"}]),m=e.ref([{title:"用户管理",path:"/system/user",icon:"👤"},{title:"角色管理",path:"/system/role",icon:"👥"},{title:"菜单管理",path:"/system/menu",icon:"📋"},{title:"系统设置",path:"/system",icon:"⚙️"}]);return(c,i)=>{const s=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock("div",Sn,[e.createElementVNode("div",xn,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,n=>(e.openBlock(),e.createBlock(e.unref(D.Card),{key:n.title,class:"stat-card"},{default:e.withCtx(()=>[e.createElementVNode("div",Bn,[e.createElementVNode("div",{class:"stat-card__icon",style:e.normalizeStyle({backgroundColor:n.color+"20"})},e.toDisplayString(n.icon),5),e.createElementVNode("div",bn,[e.createElementVNode("div",Tn,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",Dn,[e.createVNode(e.unref(D.Card),{class:"dashboard__quick"},{header:e.withCtx(()=>[...i[0]||(i[0]=[e.createElementVNode("span",{class:"card-title"},"快捷入口",-1)])]),default:e.withCtx(()=>[e.createElementVNode("div",In,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.value,n=>(e.openBlock(),e.createBlock(s,{key:n.path,to:n.path,class:"quick-link"},{default:e.withCtx(()=>[e.createElementVNode("span",$n,e.toDisplayString(n.icon),1),e.createElementVNode("span",Ln,e.toDisplayString(n.title),1)]),_:2},1032,["to"]))),128))])]),_:1}),e.createVNode(e.unref(D.Card),{class:"dashboard__activity"},{header:e.withCtx(()=>[...i[1]||(i[1]=[e.createElementVNode("span",{class:"card-title"},"最近活动",-1)])]),default:e.withCtx(()=>[e.createElementVNode("div",An,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,(n,f)=>(e.openBlock(),e.createElementBlock("div",{key:f,class:"activity-item"},[e.createVNode(e.unref(D.Tag),{type:n.type,size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(n.user),1)]),_:2},1032,["type"]),e.createElementVNode("span",Mn,e.toDisplayString(n.action),1),e.createElementVNode("span",Un,e.toDisplayString(n.time),1)]))),128))])]),_:1})]),e.createVNode(e.unref(D.Card),{class:"dashboard__system"},{header:e.withCtx(()=>[...i[2]||(i[2]=[e.createElementVNode("span",{class:"card-title"},"系统信息",-1)])]),default:e.withCtx(()=>[e.createElementVNode("div",Rn,[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",Fn,[i[3]||(i[3]=e.createElementVNode("span",{class:"system-info__label"},"服务器状态",-1)),e.createVNode(e.unref(D.Progress),{percentage:75,status:"success"})]),e.createElementVNode("div",zn,[i[4]||(i[4]=e.createElementVNode("span",{class:"system-info__label"},"内存使用",-1)),e.createVNode(e.unref(D.Progress),{percentage:45})])])]),_:1})])}}}),[["__scopeId","data-v-44648cb1"]])},Symbol.toStringTag,{value:"Module"})),Pn={class:"user-page"},On={class:"toolbar"},jn={class:"data-table"},qn={key:0},Kn={key:1},Hn={class:"pagination-wrapper"},xe=Object.freeze(Object.defineProperty({__proto__:null,default:A(e.defineComponent({__name:"index",setup(t){const r=[{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"}],l=e.ref(!1),m=e.ref([]),c=e.ref(0),i=e.ref(1),s=e.ref(10),n=e.reactive({keyword:"",status:void 0}),f=e.ref(!1),N=e.computed(()=>g.id?"编辑用户":"新增用户"),g=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(),E=()=>{l.value=!0,setTimeout(()=>{let d=[...r];n.keyword&&(d=d.filter(o=>o.username.includes(n.keyword)||o.nickname.includes(n.keyword))),n.status!==void 0&&(d=d.filter(o=>o.status===n.status)),c.value=d.length,m.value=d.slice((i.value-1)*s.value,i.value*s.value),l.value=!1},300)},S=()=>{i.value=1,E()},V=()=>{n.keyword="",n.status=void 0,i.value=1,E()},_=()=>{Object.assign(g,{id:0,username:"",nickname:"",email:"",phone:"",status:C.ENABLED,roles:[]}),f.value=!0},x=d=>{Object.assign(g,d),f.value=!0},U=d=>{I.Message.success("删除成功"),E()},M=async()=>{var d;try{await((d=p.value)==null?void 0:d.validate()),I.Message.success(g.id?"编辑成功":"新增成功"),f.value=!1,E()}catch(o){console.error(o)}},k=d=>{I.Message.success(`已${d.status===C.ENABLED?"启用":"禁用"}用户 ${d.username}`)};return e.onMounted(()=>{E()}),(d,o)=>(e.openBlock(),e.createElementBlock("div",Pn,[e.createVNode(e.unref(D.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":o[0]||(o[0]=u=>n.keyword=u),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":o[1]||(o[1]=u=>n.status=u),options:e.unref(se),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(()=>[...o[11]||(o[11]=[e.createTextVNode("搜索",-1)])]),_:1}),e.createVNode(e.unref(w.Button),{onClick:V},{default:e.withCtx(()=>[...o[12]||(o[12]=[e.createTextVNode("重置",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["model"])]),_:1}),e.createVNode(e.unref(D.Card),{class:"table-card"},{default:e.withCtx(()=>[e.createElementVNode("div",On,[e.createVNode(e.unref(w.Button),{type:"primary",onClick:_},{default:e.withCtx(()=>[...o[13]||(o[13]=[e.createTextVNode("新增用户",-1)])]),_:1})]),e.createElementVNode("table",jn,[o[18]||(o[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,[l.value?(e.openBlock(),e.createElementBlock("tr",qn,[...o[14]||(o[14]=[e.createElementVNode("td",{colspan:"9",class:"loading-cell"},"加载中...",-1)])])):m.value.length===0?(e.openBlock(),e.createElementBlock("tr",Kn,[...o[15]||(o[15]=[e.createElementVNode("td",{colspan:"9",class:"empty-cell"},"暂无数据",-1)])])):(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:2},e.renderList(m.value,u=>(e.openBlock(),e.createElementBlock("tr",{key:u.id},[e.createElementVNode("td",null,e.toDisplayString(u.id),1),e.createElementVNode("td",null,e.toDisplayString(u.username),1),e.createElementVNode("td",null,e.toDisplayString(u.nickname),1),e.createElementVNode("td",null,e.toDisplayString(u.email),1),e.createElementVNode("td",null,e.toDisplayString(u.phone),1),e.createElementVNode("td",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.roles,R=>(e.openBlock(),e.createBlock(e.unref(D.Tag),{key:R,size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(R),1)]),_:2},1024))),128))]),e.createElementVNode("td",null,[e.createVNode(e.unref(h.Switch),{"model-value":u.status===e.unref(C).ENABLED,"onUpdate:modelValue":R=>{u.status=R?e.unref(C).ENABLED:e.unref(C).DISABLED,k(u)}},null,8,["model-value","onUpdate:modelValue"])]),e.createElementVNode("td",null,e.toDisplayString(u.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:R=>x(u)},{default:e.withCtx(()=>[...o[16]||(o[16]=[e.createTextVNode("编辑",-1)])]),_:1},8,["onClick"]),e.createVNode(e.unref(I.Popconfirm),{title:"确定删除该用户吗?",onConfirm:R=>U(u.id)},{default:e.withCtx(()=>[e.createVNode(e.unref(w.Button),{type:"danger",link:"",size:"small"},{default:e.withCtx(()=>[...o[17]||(o[17]=[e.createTextVNode("删除",-1)])]),_:1})]),_:1},8,["onConfirm"])]),_:2},1024)])]))),128))])]),e.createElementVNode("div",Hn,[e.createVNode(e.unref(D.Pagination),{"current-page":i.value,"onUpdate:currentPage":o[2]||(o[2]=u=>i.value=u),"page-size":s.value,"onUpdate:pageSize":o[3]||(o[3]=u=>s.value=u),total:c.value,"page-sizes":[10,20,50,100],layout:"total, sizes, prev, pager, next",onCurrentChange:E,onSizeChange:E},null,8,["current-page","page-size","total"])])]),_:1}),e.createVNode(e.unref(I.Modal),{modelValue:f.value,"onUpdate:modelValue":o[10]||(o[10]=u=>f.value=u),title:N.value,width:"500px"},{footer:e.withCtx(()=>[e.createVNode(e.unref(w.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(w.Button),{onClick:o[9]||(o[9]=u=>f.value=!1)},{default:e.withCtx(()=>[...o[19]||(o[19]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(e.unref(w.Button),{type:"primary",onClick:M},{default:e.withCtx(()=>[...o[20]||(o[20]=[e.createTextVNode("确定",-1)])]),_:1})]),_:1})]),default:e.withCtx(()=>[e.createVNode(e.unref(h.Form),{ref_key:"formRef",ref:p,model:g,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:g.username,"onUpdate:modelValue":o[4]||(o[4]=u=>g.username=u),placeholder:"请输入用户名"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"昵称",prop:"nickname"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:g.nickname,"onUpdate:modelValue":o[5]||(o[5]=u=>g.nickname=u),placeholder:"请输入昵称"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"邮箱",prop:"email"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:g.email,"onUpdate:modelValue":o[6]||(o[6]=u=>g.email=u),placeholder:"请输入邮箱"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"手机号",prop:"phone"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:g.phone,"onUpdate:modelValue":o[7]||(o[7]=u=>g.phone=u),placeholder:"请输入手机号"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"状态"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Switch),{modelValue:g.status,"onUpdate:modelValue":o[8]||(o[8]=u=>g.status=u),"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"})),Yn={class:"role-page"},Wn={class:"toolbar"},Xn={class:"data-table"},Jn={key:0},Gn={key:1},Qn={class:"pagination-wrapper"},Be=Object.freeze(Object.defineProperty({__proto__:null,default:A(e.defineComponent({__name:"index",setup(t){const r=[{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"}],l=e.ref(!1),m=e.ref([]),c=e.ref(0),i=e.ref(1),s=e.ref(10),n=e.reactive({keyword:"",status:void 0}),f=e.ref(!1),N=e.computed(()=>g.id?"编辑角色":"新增角色"),g=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(),E=()=>{l.value=!0,setTimeout(()=>{let k=[...r];n.keyword&&(k=k.filter(d=>d.name.includes(n.keyword)||d.code.includes(n.keyword))),n.status!==void 0&&(k=k.filter(d=>d.status===n.status)),c.value=k.length,m.value=k.slice((i.value-1)*s.value,i.value*s.value),l.value=!1},300)},S=()=>{i.value=1,E()},V=()=>{n.keyword="",n.status=void 0,i.value=1,E()},_=()=>{Object.assign(g,{id:0,name:"",code:"",description:"",status:C.ENABLED,permissions:[]}),f.value=!0},x=k=>{Object.assign(g,k),f.value=!0},U=k=>{I.Message.success("删除成功"),E()},M=async()=>{var k;try{await((k=p.value)==null?void 0:k.validate()),I.Message.success(g.id?"编辑成功":"新增成功"),f.value=!1,E()}catch(d){console.error(d)}};return e.onMounted(()=>{E()}),(k,d)=>(e.openBlock(),e.createElementBlock("div",Yn,[e.createVNode(e.unref(D.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":d[0]||(d[0]=o=>n.keyword=o),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":d[1]||(d[1]=o=>n.status=o),options:e.unref(se),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(()=>[...d[10]||(d[10]=[e.createTextVNode("搜索",-1)])]),_:1}),e.createVNode(e.unref(w.Button),{onClick:V},{default:e.withCtx(()=>[...d[11]||(d[11]=[e.createTextVNode("重置",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["model"])]),_:1}),e.createVNode(e.unref(D.Card),{class:"table-card"},{default:e.withCtx(()=>[e.createElementVNode("div",Wn,[e.createVNode(e.unref(w.Button),{type:"primary",onClick:_},{default:e.withCtx(()=>[...d[12]||(d[12]=[e.createTextVNode("新增角色",-1)])]),_:1})]),e.createElementVNode("table",Xn,[d[17]||(d[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,[l.value?(e.openBlock(),e.createElementBlock("tr",Jn,[...d[13]||(d[13]=[e.createElementVNode("td",{colspan:"7",class:"loading-cell"},"加载中...",-1)])])):m.value.length===0?(e.openBlock(),e.createElementBlock("tr",Gn,[...d[14]||(d[14]=[e.createElementVNode("td",{colspan:"7",class:"empty-cell"},"暂无数据",-1)])])):(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:2},e.renderList(m.value,o=>(e.openBlock(),e.createElementBlock("tr",{key:o.id},[e.createElementVNode("td",null,e.toDisplayString(o.id),1),e.createElementVNode("td",null,e.toDisplayString(o.name),1),e.createElementVNode("td",null,[e.createVNode(e.unref(D.Tag),{type:"primary",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o.code),1)]),_:2},1024)]),e.createElementVNode("td",null,e.toDisplayString(o.description),1),e.createElementVNode("td",null,[e.createVNode(e.unref(D.Tag),{type:o.status===e.unref(C).ENABLED?"success":"danger",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o.status===e.unref(C).ENABLED?"启用":"禁用"),1)]),_:2},1032,["type"])]),e.createElementVNode("td",null,e.toDisplayString(o.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:u=>x(o)},{default:e.withCtx(()=>[...d[15]||(d[15]=[e.createTextVNode("编辑",-1)])]),_:1},8,["onClick"]),e.createVNode(e.unref(I.Popconfirm),{title:"确定删除该角色吗?",onConfirm:u=>U(o.id)},{default:e.withCtx(()=>[e.createVNode(e.unref(w.Button),{type:"danger",link:"",size:"small"},{default:e.withCtx(()=>[...d[16]||(d[16]=[e.createTextVNode("删除",-1)])]),_:1})]),_:1},8,["onConfirm"])]),_:2},1024)])]))),128))])]),e.createElementVNode("div",Qn,[e.createVNode(e.unref(D.Pagination),{"current-page":i.value,"onUpdate:currentPage":d[2]||(d[2]=o=>i.value=o),"page-size":s.value,"onUpdate:pageSize":d[3]||(d[3]=o=>s.value=o),total:c.value,"page-sizes":[10,20,50,100],layout:"total, sizes, prev, pager, next",onCurrentChange:E,onSizeChange:E},null,8,["current-page","page-size","total"])])]),_:1}),e.createVNode(e.unref(I.Modal),{modelValue:f.value,"onUpdate:modelValue":d[9]||(d[9]=o=>f.value=o),title:N.value,width:"500px"},{footer:e.withCtx(()=>[e.createVNode(e.unref(w.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(w.Button),{onClick:d[8]||(d[8]=o=>f.value=!1)},{default:e.withCtx(()=>[...d[18]||(d[18]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(e.unref(w.Button),{type:"primary",onClick:M},{default:e.withCtx(()=>[...d[19]||(d[19]=[e.createTextVNode("确定",-1)])]),_:1})]),_:1})]),default:e.withCtx(()=>[e.createVNode(e.unref(h.Form),{ref_key:"formRef",ref:p,model:g,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:g.name,"onUpdate:modelValue":d[4]||(d[4]=o=>g.name=o),placeholder:"请输入角色名称"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"角色编码",prop:"code"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:g.code,"onUpdate:modelValue":d[5]||(d[5]=o=>g.code=o),placeholder:"请输入角色编码"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"描述"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:g.description,"onUpdate:modelValue":d[6]||(d[6]=o=>g.description=o),placeholder:"请输入描述"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"状态"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Switch),{modelValue:g.status,"onUpdate:modelValue":d[7]||(d[7]=o=>g.status=o),"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"},vn={class:"toolbar"},eo={class:"menu-tree"},to={class:"tree-table"},no={class:"tree-row tree-row--level-0"},oo=["onClick"],lo=["onClick"],be=Object.freeze(Object.defineProperty({__proto__:null,default:A(e.defineComponent({__name:"index",setup(t){const r=[{id:1,parentId:null,name:"Dashboard",path:"/dashboard",component:"dashboard/index",redirect:"",icon:"dashboard",title:"仪表盘",type:$.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:$.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:$.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:$.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:$.MENU,sort:3,status:C.ENABLED,hidden:!1,keepAlive:!0}]}],l=e.ref(!1),m=e.ref([]),c=e.ref(!1),i=e.computed(()=>s.id?"编辑菜单":"新增菜单"),s=e.reactive({id:0,parentId:null,name:"",path:"",component:"",redirect:"",icon:"",title:"",type:$.MENU,sort:0,status:C.ENABLED,hidden:!1,keepAlive:!0}),n={name:[{required:!0,message:"请输入菜单名称",trigger:"blur"}],path:[{required:!0,message:"请输入路由路径",trigger:"blur"}],title:[{required:!0,message:"请输入菜单标题",trigger:"blur"}]},f=e.ref(),N=()=>{l.value=!0,setTimeout(()=>{m.value=r,l.value=!1},300)},g=(S=null)=>{Object.assign(s,{id:0,parentId:S,name:"",path:"",component:"",redirect:"",icon:"",title:"",type:$.MENU,sort:0,status:C.ENABLED,hidden:!1,keepAlive:!0}),c.value=!0},B=S=>{Object.assign(s,S),c.value=!0},p=async()=>{var S;try{await((S=f.value)==null?void 0:S.validate()),I.Message.success(s.id?"编辑成功":"新增成功"),c.value=!1,N()}catch(V){console.error(V)}},E=S=>({dashboard:"📊",system:"⚙️",user:"👤",role:"👥",menu:"📋",setting:"🔧"})[S||""]||"📄";return e.onMounted(()=>{N()}),(S,V)=>(e.openBlock(),e.createElementBlock("div",Zn,[e.createVNode(e.unref(D.Card),{class:"menu-card"},{default:e.withCtx(()=>[e.createElementVNode("div",vn,[e.createVNode(e.unref(w.Button),{type:"primary",onClick:V[0]||(V[0]=_=>g())},{default:e.withCtx(()=>[...V[14]||(V[14]=[e.createTextVNode("新增菜单",-1)])]),_:1})]),e.createElementVNode("div",eo,[e.createElementVNode("table",to,[V[19]||(V[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(m.value,_=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:_.id},[e.createElementVNode("tr",no,[e.createElementVNode("td",null,[e.createElementVNode("span",{class:"menu-name",onClick:x=>B(_)},e.toDisplayString(_.title),9,oo)]),e.createElementVNode("td",null,e.toDisplayString(E(_.icon)),1),e.createElementVNode("td",null,e.toDisplayString(_.path),1),e.createElementVNode("td",null,[e.createVNode(e.unref(D.Tag),{type:_.type===e.unref($).DIRECTORY?"primary":_.type===e.unref($).MENU?"success":"warning",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(_.type===e.unref($).DIRECTORY?"目录":_.type===e.unref($).MENU?"菜单":"按钮"),1)]),_:2},1032,["type"])]),e.createElementVNode("td",null,e.toDisplayString(_.sort),1),e.createElementVNode("td",null,[e.createVNode(e.unref(D.Tag),{type:_.status===e.unref(C).ENABLED?"success":"danger",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(_.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:x=>g(_.id)},{default:e.withCtx(()=>[...V[15]||(V[15]=[e.createTextVNode("新增",-1)])]),_:1},8,["onClick"]),e.createVNode(e.unref(w.Button),{type:"primary",link:"",size:"small",onClick:x=>B(_)},{default:e.withCtx(()=>[...V[16]||(V[16]=[e.createTextVNode("编辑",-1)])]),_:1},8,["onClick"])]),_:2},1024)])]),_.children?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(_.children,x=>(e.openBlock(),e.createElementBlock("tr",{key:x.id,class:"tree-row tree-row--level-1"},[e.createElementVNode("td",null,[V[17]||(V[17]=e.createElementVNode("span",{class:"tree-indent"},null,-1)),e.createElementVNode("span",{class:"menu-name",onClick:U=>B(x)},e.toDisplayString(x.title),9,lo)]),e.createElementVNode("td",null,e.toDisplayString(E(x.icon)),1),e.createElementVNode("td",null,e.toDisplayString(x.path),1),e.createElementVNode("td",null,[e.createVNode(e.unref(D.Tag),{type:x.type===e.unref($).DIRECTORY?"primary":x.type===e.unref($).MENU?"success":"warning",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(x.type===e.unref($).DIRECTORY?"目录":x.type===e.unref($).MENU?"菜单":"按钮"),1)]),_:2},1032,["type"])]),e.createElementVNode("td",null,e.toDisplayString(x.sort),1),e.createElementVNode("td",null,[e.createVNode(e.unref(D.Tag),{type:x.status===e.unref(C).ENABLED?"success":"danger",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(x.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:U=>B(x)},{default:e.withCtx(()=>[...V[18]||(V[18]=[e.createTextVNode("编辑",-1)])]),_:1},8,["onClick"])]),_:2},1024)])]))),128)):e.createCommentVNode("",!0)],64))),128))])])])]),_:1}),e.createVNode(e.unref(I.Modal),{modelValue:c.value,"onUpdate:modelValue":V[13]||(V[13]=_=>c.value=_),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:V[12]||(V[12]=_=>c.value=!1)},{default:e.withCtx(()=>[...V[20]||(V[20]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(e.unref(w.Button),{type:"primary",onClick:p},{default:e.withCtx(()=>[...V[21]||(V[21]=[e.createTextVNode("确定",-1)])]),_:1})]),_:1})]),default:e.withCtx(()=>[e.createVNode(e.unref(h.Form),{ref_key:"formRef",ref:f,model:s,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:s.parentId,"onUpdate:modelValue":V[1]||(V[1]=_=>s.parentId=_),placeholder:"上级菜单ID",disabled:""},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"菜单类型"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Select),{modelValue:s.type,"onUpdate:modelValue":V[2]||(V[2]=_=>s.type=_),options:e.unref(we)},null,8,["modelValue","options"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"菜单名称",prop:"name"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:s.name,"onUpdate:modelValue":V[3]||(V[3]=_=>s.name=_),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:s.title,"onUpdate:modelValue":V[4]||(V[4]=_=>s.title=_),placeholder:"请输入菜单标题"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"路由路径",prop:"path"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:s.path,"onUpdate:modelValue":V[5]||(V[5]=_=>s.path=_),placeholder:"请输入路由路径"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"组件路径"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:s.component,"onUpdate:modelValue":V[6]||(V[6]=_=>s.component=_),placeholder:"请输入组件路径"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"图标"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:s.icon,"onUpdate:modelValue":V[7]||(V[7]=_=>s.icon=_),placeholder:"请输入图标名称"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"排序"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.InputNumber),{modelValue:s.sort,"onUpdate:modelValue":V[8]||(V[8]=_=>s.sort=_),min:0},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"状态"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Switch),{modelValue:s.status,"onUpdate:modelValue":V[9]||(V[9]=_=>s.status=_),"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:s.hidden,"onUpdate:modelValue":V[10]||(V[10]=_=>s.hidden=_)},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"缓存"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Switch),{modelValue:s.keepAlive,"onUpdate:modelValue":V[11]||(V[11]=_=>s.keepAlive=_)},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])]))}}),[["__scopeId","data-v-2a272a68"]])},Symbol.toStringTag,{value:"Module"}));a.Footer=$t,a.Forbidden=Ee,a.Gender=Ce,a.GenderOptions=Cn,a.GenderText=En,a.Header=ge,a.Layout=ae,a.Login=Ne,a.MenuType=$,a.MenuTypeOptions=we,a.MenuTypeText=kn,a.NotFound=ye,a.Sidebar=_e,a.Status=C,a.StatusOptions=se,a.StatusText=yn,a.Tabs=bt,a.batchDeleteUsers=_n,a.clearToken=le,a.createLayoutRoute=Xt,a.createMenu=dn,a.createRole=nn,a.createRouter=Jt,a.createUser=fn,a.defaultDynamicRoutes=Le,a.deleteMenu=mn,a.deleteRole=ln,a.deleteUser=Vn,a.errorRoute=v,a.getMenuList=an,a.getMenuTree=sn,a.getRefreshToken=Ae,a.getRoleDetail=tn,a.getRoleList=en,a.getToken=J,a.getTokenExpire=ue,a.getUserDetail=un,a.getUserInfo=Zt,a.getUserList=pn,a.hasPermission=Yt,a.hasRole=ke,a.hasToken=re,a.http=b,a.isAdmin=Wt,a.isTokenExpired=Ve,a.layoutRoute=ee,a.local=y,a.localStorageUtil=q,a.login=Gt,a.logout=Qt,a.mockMenuData=ce,a.permissionDirective=wn,a.refreshToken=vt,a.resetPassword=Nn,a.resetRouter=Ue,a.router=G,a.session=Ie,a.sessionStorageUtil=K,a.setRefreshToken=pe,a.setToken=me,a.setTokenExpire=fe,a.setTokenInfo=he,a.staticRoutes=Z,a.updateMenu=cn,a.updateRole=on,a.updateRoleStatus=rn,a.updateUser=hn,a.updateUserStatus=gn,a.useApp=jt,a.useAppStore=O,a.useAuth=qt,a.useAuthStore=Y,a.useForm=Kt,a.useMenuStore=H,a.useTable=Ht,a.useUserStore=F,Object.defineProperty(a,Symbol.toStringTag,{value:"Module"})});
1
+ (function(a,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):(a=typeof globalThis<"u"?globalThis:a||self,e(a.XtoFronted={},a.Vue,a.Pinia,a.VueRouter,a.navigation,a.base,a.form,a.feedback,a.axios,a.data))})(this,function(a,e,X,L,P,w,h,I,De,D){"use strict";const j="xto_",ie=t=>({get(r){const l=t.getItem(j+r);if(!l)return null;try{return JSON.parse(l)}catch{return l}},set(r,l){if(l==null){t.removeItem(j+r);return}const m=typeof l=="string"?l:JSON.stringify(l);t.setItem(j+r,m)},remove(r){t.removeItem(j+r)},clear(){Object.keys(t).forEach(l=>{l.startsWith(j)&&t.removeItem(l)})}}),q=ie(window.localStorage),K=ie(window.sessionStorage),y={get:q.get,set:q.set,remove:q.remove,clear:q.clear},Ie={get:K.get,set:K.set,remove:K.remove,clear:K.clear},O=X.defineStore("app",()=>{const t=e.ref(y.get("appName")||"XTO App"),r=e.ref(y.get("indexPath")||"/dashboard"),l=e.ref(y.get("isDark")||!1),m=e.ref(y.get("theme")||"light"),c=e.ref(y.get("layout")||"sidebar"),i=e.ref(y.get("isCollapsed")||!1),s=e.ref(y.get("showTabs")??!0),n=e.ref(y.get("showFooter")??!0),f=e.ref(y.get("showBreadcrumb")??!0),N=e.ref(y.get("primaryColor")||"#409eff"),g=e.ref([]),B=e.computed(()=>l.value?"dark":"light"),p=T=>{t.value=T,y.set("appName",T)},E=T=>{r.value=T,y.set("indexPath",T)},S=()=>{l.value=!l.value,m.value=l.value?"dark":"light",_()},V=T=>{m.value=T,l.value=T==="dark",_()},_=()=>{const T=document.documentElement;l.value?T.classList.add("dark"):T.classList.remove("dark"),y.set("isDark",l.value),y.set("theme",m.value)},x=()=>{i.value=!i.value,y.set("isCollapsed",i.value)},U=T=>{c.value=T,y.set("layout",T)},M=()=>{s.value=!s.value,y.set("showTabs",s.value)},k=()=>{n.value=!n.value,y.set("showFooter",n.value)},d=()=>{f.value=!f.value,y.set("showBreadcrumb",f.value)},o=T=>{N.value=T,document.documentElement.style.setProperty("--color-primary",T),y.set("primaryColor",T)},u=T=>{g.value.includes(T)||g.value.push(T)},R=T=>{const Te=g.value.indexOf(T);Te>-1&&g.value.splice(Te,1)},z=()=>{g.value=[]},Q=()=>{_(),N.value!=="#409eff"&&document.documentElement.style.setProperty("--color-primary",N.value)};return e.watch(l,_),{appName:t,indexPath:r,isDark:l,theme:m,layout:c,isCollapsed:i,showTabs:s,showFooter:n,showBreadcrumb:f,primaryColor:N,cachedViews:g,themeClass:B,setAppName:p,setIndexPath:E,toggleTheme:S,toggleCollapse:x,setTheme:V,setLayout:U,toggleTabs:M,toggleFooter:k,toggleBreadcrumb:d,setPrimaryColor:o,addCachedView:u,removeCachedView:R,clearCachedViews:z,initTheme:Q}}),de="/vite.svg",$e=(t,r,l)=>{const m=t[r];return m?typeof m=="function"?m():Promise.resolve(m):new Promise((c,i)=>{(typeof queueMicrotask=="function"?queueMicrotask:setTimeout)(i.bind(null,new Error("Unknown variable dynamic import: "+r+(r.split("/").length!==l?". Note that variables only represent file names one level deep.":""))))})},Z=[{path:"/login",name:"Login",component:()=>Promise.resolve().then(()=>Mt),meta:{title:"登录",hidden:!0}},{path:"/404",name:"NotFound",component:()=>Promise.resolve().then(()=>Ft),meta:{title:"404",hidden:!0}},{path:"/403",name:"Forbidden",component:()=>Promise.resolve().then(()=>Ot),meta:{title:"403",hidden:!0}}],v={path:"/:pathMatch(.*)*",redirect:"/404",meta:{hidden:!0}},ee={path:"/",name:"Layout",component:()=>Promise.resolve().then(()=>wt),redirect:"/dashboard",children:[{path:"/dashboard",name:"Dashboard",component:()=>Promise.resolve().then(()=>Se),meta:{title:"仪表盘",icon:"dashboard",keepAlive:!0,affix:!0}},{path:"/system/user",name:"SystemUser",component:()=>Promise.resolve().then(()=>xe),meta:{title:"用户管理",icon:"user",keepAlive:!0}},{path:"/system/role",name:"SystemRole",component:()=>Promise.resolve().then(()=>Be),meta:{title:"角色管理",icon:"role",keepAlive:!0}},{path:"/system/menu",name:"SystemMenu",component:()=>Promise.resolve().then(()=>be),meta:{title:"菜单管理",icon:"menu",keepAlive:!0}}]},Le=[{path:"/dashboard",name:"Dashboard",component:()=>Promise.resolve().then(()=>Se),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(()=>xe),meta:{title:"用户管理",icon:"user",keepAlive:!0}},{path:"role",name:"SystemRole",component:()=>Promise.resolve().then(()=>Be),meta:{title:"角色管理",icon:"role",keepAlive:!0}},{path:"menu",name:"SystemMenu",component:()=>Promise.resolve().then(()=>be),meta:{title:"菜单管理",icon:"menu",keepAlive:!0}}]}],ce=[{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}]}],te="token",ne="refresh_token",oe="token_expire",J=()=>y.get(te),me=t=>{y.set(te,t)},Ae=()=>y.get(ne),pe=t=>{y.set(ne,t)},ue=()=>y.get(oe),fe=t=>{y.set(oe,t)},he=t=>{me(t.token),pe(t.refreshToken),fe(t.expireTime)},le=()=>{y.remove(te),y.remove(ne),y.remove(oe)},Ve=()=>{const t=ue();return t?Date.now()>t:!0},re=()=>!!J()&&!Ve(),F=X.defineStore("user",()=>{const t=e.ref(y.get("userInfo")),r=e.ref(y.get("roles")||[]),l=e.ref(y.get("permissions")||[]),m=e.computed(()=>!!t.value),c=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)||""}),s=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:r,permissions:l,isLoggedIn:m,username:c,nickname:i,avatar:s,userId:n,setUserInfo:p=>{t.value=p,r.value=p.roles||[],l.value=p.permissions||[],y.set("userInfo",p),y.set("roles",p.roles||[]),y.set("permissions",p.permissions||[])},clearUserInfo:()=>{t.value=null,r.value=[],l.value=[],y.remove("userInfo"),y.remove("roles"),y.remove("permissions")},hasPermission:p=>Array.isArray(p)?p.some(E=>l.value.includes(E)):l.value.includes(p),hasRole:p=>Array.isArray(p)?p.some(E=>r.value.includes(E)):r.value.includes(p)}}),G=L.createRouter({history:L.createWebHistory(),routes:[...Z,ee,v],scrollBehavior:()=>({left:0,top:0})}),Me=["/login","/404","/403"];G.beforeEach(async(t,r,l)=>{const m=O();if(m.initTheme(),re())if(t.path==="/login")l({path:"/"});else{const c=F();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()}),H().setMenuList(ce)),t.name&&t.meta.keepAlive&&m.addCachedView(t.name),l()}else Me.includes(t.path)?l():l("/login")});function Ue(){const t=L.createRouter({history:L.createWebHistory(),routes:[...Z,ee,v]});G.matcher=t.matcher}const H=X.defineStore("menu",()=>{const t=e.ref(y.get("menuList")||[]),r=e.computed(()=>t.value.length>0),l=s=>{t.value=s,y.set("menuList",s)},m=()=>{t.value=[],y.remove("menuList")},c=s=>s.filter(n=>!n.hidden).map(n=>{const f={path:n.path,name:n.name,meta:{title:n.title,icon:n.icon,keepAlive:n.keepAlive,hidden:n.hidden}};return n.redirect&&(f.redirect=n.redirect),n.component&&(f.component=()=>$e(Object.assign({}),`../views/${n.component}.vue`,3)),n.children&&n.children.length>0&&(f.children=c(n.children)),f});return{menuList:t,hasMenu:r,setMenuList:l,clearMenu:m,generateRoutes:c,addRoutes:s=>{c(s).forEach(f=>{G.addRoute("Layout",f)})}}}),Y=X.defineStore("auth",()=>{const t=e.ref(J()),r=e.computed(()=>re()),l=e.ref(""),m=e.ref(""),c=e.ref(""),i=e.ref("/login");return{token:t,isLoggedIn:r,baseUrl:l,appId:m,clientId:c,loginPath:i,login:p=>{t.value=p.token,he(p)},logout:()=>{t.value=null,le()},setBaseUrl:p=>{l.value=p},setAppId:p=>{m.value=p},setClientId:p=>{c.value=p},setLoginPath:p=>{i.value=p}}}),Re={class:"sidebar"},Fe={class:"sidebar__logo"},ze={class:"sidebar__logo-text"},Pe={key:0,class:"sidebar__search"},Oe={key:0,class:"sidebar__search-results"},je=["onClick"],qe={class:"menu-icon"},Ke={class:"sidebar__search-item-info"},He={class:"sidebar__search-item-title"},Ye={key:0,class:"sidebar__search-item-parent"},We={class:"menu-icon"},Xe={class:"menu-icon"},Je={class:"menu-icon"},Ge={key:1,class:"sidebar__user"},Qe={class:"sidebar__user-info"},Ze={class:"sidebar__user-name"},ve={class:"sidebar__user-role"},et=e.defineComponent({__name:"Sidebar",setup(t){const r=L.useRoute(),l=L.useRouter(),m=H(),c=F(),i=Y(),s=O(),n=e.ref(""),f=e.computed(()=>s.isCollapsed),N=e.computed(()=>r.path),g=e.computed(()=>s.isDark?"#1d1e1f":"#fff"),B=e.computed(()=>s.isDark?"#cfd3dc":"#303133"),p=e.computed(()=>"#409eff"),E=(k,d="")=>{const o=[];return k.forEach(u=>{u.children&&u.children.length>0?o.push(...E(u.children,u.title)):o.push({...u,parentTitle:d})}),o},S=e.computed(()=>n.value.trim()?E(m.menuList).filter(d=>d.title.toLowerCase().includes(n.value.toLowerCase())):[]),V=e.computed(()=>n.value.trim()?m.menuList.map(k=>{if(k.children&&k.children.length>0){const d=k.children.filter(o=>o.title.toLowerCase().includes(n.value.toLowerCase()));return d.length>0?{...k,children:d}:null}return k.title.toLowerCase().includes(n.value.toLowerCase())?k:null}).filter(Boolean):m.menuList),_=k=>{k&&k!==r.path&&(l.push(k),n.value="")},x=k=>{l.push(k),n.value=""},U=()=>{i.logout(),c.clearUserInfo(),m.clearMenu(),l.push("/login")},M=k=>({dashboard:"📊",system:"⚙️",user:"👤",role:"👥",menu:"📋",setting:"🔧"})[k||""]||"📄";return(k,d)=>(e.openBlock(),e.createElementBlock("div",Re,[e.createElementVNode("div",Fe,[d[1]||(d[1]=e.createElementVNode("img",{src:de,alt:"Logo",class:"sidebar__logo-img"},null,-1)),e.withDirectives(e.createElementVNode("span",ze,"Xto Demo",512),[[e.vShow,!f.value]])]),f.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Pe,[e.createVNode(e.unref(h.Input),{modelValue:n.value,"onUpdate:modelValue":d[0]||(d[0]=o=>n.value=o),placeholder:"搜索菜单...",size:"small",clearable:""},null,8,["modelValue"]),S.value.length>0?(e.openBlock(),e.createElementBlock("div",Oe,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(S.value,o=>(e.openBlock(),e.createElementBlock("div",{key:o.path,class:"sidebar__search-item",onClick:u=>x(o.path)},[e.createElementVNode("span",qe,e.toDisplayString(M(o.icon)),1),e.createElementVNode("div",Ke,[e.createElementVNode("span",He,e.toDisplayString(o.title),1),o.parentTitle?(e.openBlock(),e.createElementBlock("span",Ye,e.toDisplayString(o.parentTitle),1)):e.createCommentVNode("",!0)])],8,je))),128))])):e.createCommentVNode("",!0)])),e.createVNode(e.unref(P.Menu),{"default-active":N.value,collapse:f.value,"collapse-transition":!1,"background-color":g.value,"text-color":B.value,"active-text-color":p.value,class:"sidebar__menu",onSelect:_},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(V.value,o=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:o.path},[o.children&&o.children.length>0?(e.openBlock(),e.createBlock(e.unref(P.SubMenu),{key:0,index:o.path},{title:e.withCtx(()=>[e.createElementVNode("span",We,e.toDisplayString(M(o.icon)),1),e.createElementVNode("span",null,e.toDisplayString(o.title),1)]),default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.children,u=>(e.openBlock(),e.createBlock(e.unref(P.MenuItem),{key:u.path,index:u.path},{default:e.withCtx(()=>[e.createElementVNode("span",Xe,e.toDisplayString(M(u.icon)),1),e.createElementVNode("span",null,e.toDisplayString(u.title),1)]),_:2},1032,["index"]))),128))]),_:2},1032,["index"])):(e.openBlock(),e.createBlock(e.unref(P.MenuItem),{key:1,index:o.path},{default:e.withCtx(()=>[e.createElementVNode("span",Je,e.toDisplayString(M(o.icon)),1),e.createElementVNode("span",null,e.toDisplayString(o.title),1)]),_:2},1032,["index"]))],64))),128))]),_:1},8,["default-active","collapse","background-color","text-color","active-text-color"]),f.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Ge,[e.createElementVNode("div",Qe,[e.createElementVNode("span",Ze,e.toDisplayString(e.unref(c).nickname),1),e.createElementVNode("span",ve,e.toDisplayString(e.unref(c).roles.join(", ")),1)]),e.createVNode(e.unref(w.Button),{type:"text",size:"small",onClick:U},{default:e.withCtx(()=>[...d[2]||(d[2]=[e.createTextVNode("退出",-1)])]),_:1})]))]))}}),A=(t,r)=>{const l=t.__vccOpts||t;for(const[m,c]of r)l[m]=c;return l},_e=A(et,[["__scopeId","data-v-1d224580"]]),tt={class:"header"},nt={class:"header__left"},ot={key:0},lt={key:1},rt={class:"header__breadcrumb"},at={key:0},st={class:"header__right"},it=["title"],dt={key:0,viewBox:"0 0 24 24",width:"16",height:"16",fill:"currentColor"},ct={key:1,viewBox:"0 0 24 24",width:"16",height:"16",fill:"currentColor"},mt={key:0},pt={key:1},ut={class:"header__avatar"},ft={class:"header__user-name"},ht={key:0,class:"header__dropdown"},Vt={class:"header__dropdown-header"},_t={class:"header__dropdown-avatar"},gt={class:"header__dropdown-info"},Nt={class:"header__dropdown-name"},yt={class:"header__dropdown-role"},ge=A(e.defineComponent({__name:"Header",setup(t){const r=L.useRoute(),l=L.useRouter(),m=O(),c=F(),i=Y(),s=H(),n=e.computed(()=>m.isCollapsed),f=e.ref(!1),N=e.ref(null),g=e.ref(!1),B=e.computed(()=>r.matched.filter(u=>u.meta&&u.meta.title).map(u=>({title:u.meta.title,path:u.path}))),p=()=>{m.toggleCollapse()},E=()=>{m.toggleTheme()},S=()=>{document.fullscreenElement?document.exitFullscreen():document.documentElement.requestFullscreen()},V=()=>{g.value=!!document.fullscreenElement},_=()=>{f.value=!f.value},x=()=>{f.value=!1},U=()=>{x(),alert("个人信息功能开发中...")},M=()=>{x(),alert("修改密码功能开发中...")},k=()=>{x(),i.logout(),c.clearUserInfo(),s.clearMenu(),l.push("/login")},d=o=>{N.value&&!N.value.contains(o.target)&&x()};return e.onMounted(()=>{document.addEventListener("click",d),document.addEventListener("fullscreenchange",V)}),e.onUnmounted(()=>{document.removeEventListener("click",d),document.removeEventListener("fullscreenchange",V)}),(o,u)=>{var R;return e.openBlock(),e.createElementBlock("div",tt,[e.createElementVNode("div",nt,[e.createElementVNode("div",{class:"header__collapse",onClick:p},[n.value?(e.openBlock(),e.createElementBlock("span",ot,"☰")):(e.openBlock(),e.createElementBlock("span",lt,"☰"))]),e.createElementVNode("div",rt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(B.value,(z,Q)=>(e.openBlock(),e.createElementBlock("span",{key:z.path},[Q>0?(e.openBlock(),e.createElementBlock("span",at," / ")):e.createCommentVNode("",!0),e.createElementVNode("span",{class:e.normalizeClass({"is-current":Q===B.value.length-1})},e.toDisplayString(z.title),3)]))),128))])]),e.createElementVNode("div",st,[e.createElementVNode("div",{class:"header__action",onClick:S,title:g.value?"Exit Fullscreen":"Fullscreen"},[g.value?(e.openBlock(),e.createElementBlock("svg",dt,[...u[0]||(u[0]=[e.createElementVNode("path",{d:"M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"},null,-1)])])):(e.openBlock(),e.createElementBlock("svg",ct,[...u[1]||(u[1]=[e.createElementVNode("path",{d:"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"},null,-1)])]))],8,it),e.createElementVNode("div",{class:"header__action",onClick:E,title:"切换主题"},[e.unref(m).isDark?(e.openBlock(),e.createElementBlock("span",mt,"🌙")):(e.openBlock(),e.createElementBlock("span",pt,"☀️"))]),e.createElementVNode("div",{class:"header__user",ref_key:"dropdownRef",ref:N},[e.createElementVNode("div",{class:"header__user-trigger",onClick:e.withModifiers(_,["stop"])},[e.createElementVNode("div",ut,[e.createElementVNode("span",null,e.toDisplayString(((R=e.unref(c).nickname)==null?void 0:R.charAt(0))||"U"),1)]),e.createElementVNode("span",ft,e.toDisplayString(e.unref(c).nickname),1),e.createElementVNode("span",{class:e.normalizeClass(["header__user-arrow",{"is-active":f.value}])},"▼",2)]),e.createVNode(e.Transition,{name:"dropdown"},{default:e.withCtx(()=>{var z;return[f.value?(e.openBlock(),e.createElementBlock("div",ht,[e.createElementVNode("div",Vt,[e.createElementVNode("div",_t,[e.createElementVNode("span",null,e.toDisplayString(((z=e.unref(c).nickname)==null?void 0:z.charAt(0))||"U"),1)]),e.createElementVNode("div",gt,[e.createElementVNode("div",Nt,e.toDisplayString(e.unref(c).nickname),1),e.createElementVNode("div",yt,e.toDisplayString(e.unref(c).roles.join(", ")),1)])]),u[6]||(u[6]=e.createElementVNode("div",{class:"header__dropdown-divider"},null,-1)),e.createElementVNode("div",{class:"header__dropdown-menu"},[e.createElementVNode("div",{class:"header__dropdown-item",onClick:U},[...u[2]||(u[2]=[e.createElementVNode("span",{class:"header__dropdown-icon"},"👤",-1),e.createElementVNode("span",null,"个人信息",-1)])]),e.createElementVNode("div",{class:"header__dropdown-item",onClick:M},[...u[3]||(u[3]=[e.createElementVNode("span",{class:"header__dropdown-icon"},"🔐",-1),e.createElementVNode("span",null,"修改密码",-1)])]),u[5]||(u[5]=e.createElementVNode("div",{class:"header__dropdown-divider"},null,-1)),e.createElementVNode("div",{class:"header__dropdown-item header__dropdown-item--danger",onClick:k},[...u[4]||(u[4]=[e.createElementVNode("span",{class:"header__dropdown-icon"},"🚪",-1),e.createElementVNode("span",null,"退出登录",-1)])])])])):e.createCommentVNode("",!0)]}),_:1})],512)])])}}}),[["__scopeId","data-v-7af82b67"]]),Et={class:"layout"},kt={class:"layout__main"},Ct={class:"layout__content"},ae=A(e.defineComponent({__name:"index",setup(t){const r=O(),l=e.computed(()=>r.isCollapsed?"64px":"210px");return(m,c)=>{const i=e.resolveComponent("router-view");return e.openBlock(),e.createElementBlock("div",Et,[e.createElementVNode("aside",{class:"layout__aside",style:e.normalizeStyle({width:l.value})},[e.createVNode(_e)],4),e.createElementVNode("div",kt,[e.createVNode(ge,{class:"layout__header"}),e.createElementVNode("main",Ct,[e.createVNode(i)])])])}}}),[["__scopeId","data-v-0bcf8553"]]),wt=Object.freeze(Object.defineProperty({__proto__:null,default:ae},Symbol.toStringTag,{value:"Module"})),St={class:"tabs-wrapper"},xt={class:"tab-label"},Bt=["onClick"],bt=A(e.defineComponent({__name:"Tabs",setup(t){const r=L.useRoute(),l=L.useRouter(),m=e.computed(()=>{const n=[];return r.matched.forEach(f=>{var N;(N=f.meta)!=null&&N.affix&&n.push({name:f.name,title:f.meta.title,path:f.path,affix:!0})}),n}),c=e.computed(()=>r.path),i=n=>{l.push(n)},s=n=>{const f=m.value.find(N=>N.path===n);if(!(f!=null&&f.affix)&&n===c.value){const N=m.value.findIndex(B=>B.path===n),g=m.value[N-1]||m.value[N+1];g&&l.push(g.path)}};return(n,f)=>(e.openBlock(),e.createElementBlock("div",St,[e.createVNode(e.unref(P.Tabs),{modelValue:c.value,"onUpdate:modelValue":f[0]||(f[0]=N=>c.value=N),type:"card",onTabClick:i},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.value,N=>(e.openBlock(),e.createBlock(e.unref(P.TabPane),{key:N.path,name:N.path,label:N.title,closable:!N.affix},{label:e.withCtx(()=>[e.createElementVNode("span",xt,[e.createTextVNode(e.toDisplayString(N.title)+" ",1),N.affix?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",{key:0,class:"tab-close",onClick:e.withModifiers(g=>s(N.path),["stop"])}," ✕ ",8,Bt))])]),_:2},1032,["name","label","closable"]))),128))]),_:1},8,["modelValue"])]))}}),[["__scopeId","data-v-9156d8cd"]]),Tt={},Dt={class:"footer"};function It(t,r){return e.openBlock(),e.createElementBlock("div",Dt,[...r[0]||(r[0]=[e.createElementVNode("span",null,"Copyright © 2024 Xto Demo. All Rights Reserved.",-1)])])}const $t=A(Tt,[["render",It],["__scopeId","data-v-4852826a"]]),Lt={class:"login"},At={class:"login__container"},Ne=A(e.defineComponent({__name:"index",setup(t){const r=L.useRouter(),l=Y(),m=F(),c=H(),i=e.ref(!1),s=e.ref(!1),n=e.reactive({username:"admin",password:"123456"}),f={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"},{min:6,message:"密码长度至少6位",trigger:"blur"}]},N=e.ref(),g=async()=>{var B;try{await((B=N.value)==null?void 0:B.validate()),i.value=!0,setTimeout(()=>{l.login({token:"mock_token_"+Date.now(),refreshToken:"mock_refresh_token",expireTime:Date.now()+7*24*60*60*1e3}),m.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}]}]),I.Message.success("登录成功"),r.push("/"),i.value=!1},1e3)}catch{i.value=!1}};return(B,p)=>(e.openBlock(),e.createElementBlock("div",Lt,[e.createElementVNode("div",At,[p[5]||(p[5]=e.createElementVNode("div",{class:"login__header"},[e.createElementVNode("img",{src:de,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:N,model:n,rules:f,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]=E=>n.username=E),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]=E=>n.password=E),type:"password",placeholder:"密码","prefix-icon":"🔒",size:"large","show-password":"",onKeyup:e.withKeys(g,["enter"])},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(h.Checkbox),{modelValue:s.value,"onUpdate:modelValue":p[2]||(p[2]=E=>s.value=E)},{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:g},{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"]]),Mt=Object.freeze(Object.defineProperty({__proto__:null,default:Ne},Symbol.toStringTag,{value:"Module"})),Ut={class:"error-page"},Rt={class:"error-page__content"},ye=A(e.defineComponent({__name:"404",setup(t){const r=L.useRouter(),l=()=>{r.push("/")};return(m,c)=>(e.openBlock(),e.createElementBlock("div",Ut,[e.createElementVNode("div",Rt,[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(w.Button),{type:"primary",onClick:l},{default:e.withCtx(()=>[...c[0]||(c[0]=[e.createTextVNode("返回首页",-1)])]),_:1})])]))}}),[["__scopeId","data-v-c3c12c24"]]),Ft=Object.freeze(Object.defineProperty({__proto__:null,default:ye},Symbol.toStringTag,{value:"Module"})),zt={class:"error-page"},Pt={class:"error-page__content"},Ee=A(e.defineComponent({__name:"403",setup(t){const r=L.useRouter(),l=()=>{r.push("/")};return(m,c)=>(e.openBlock(),e.createElementBlock("div",zt,[e.createElementVNode("div",Pt,[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(w.Button),{type:"primary",onClick:l},{default:e.withCtx(()=>[...c[0]||(c[0]=[e.createTextVNode("返回首页",-1)])]),_:1})])]))}}),[["__scopeId","data-v-dd5f2795"]]),Ot=Object.freeze(Object.defineProperty({__proto__:null,default:Ee},Symbol.toStringTag,{value:"Module"}));function jt(){const t=O(),r=F(),l=Y(),m=e.computed(()=>r.nickname||r.username||""),c=e.computed(()=>r.userInfo),i=e.computed(()=>t.appName),s=e.computed(()=>l.isLoggedIn),n=e.computed(()=>t.isDark),f=e.computed(()=>t.theme),N=e.computed(()=>t.isCollapsed),g=e.computed(()=>t.layout);return{userName:m,userInfo:c,appName:i,isLoggedIn:s,isDark:n,theme:f,isCollapsed:N,layout:g,toggleTheme:()=>{t.toggleTheme()},toggleCollapse:()=>{t.toggleCollapse()}}}function qt(){const t=F(),r=i=>{const s=t.permissions;return s.includes("*")?!0:Array.isArray(i)?i.some(n=>s.includes(n)):s.includes(i)},l=i=>{const s=t.roles;return s.includes("admin")?!0:Array.isArray(i)?i.some(n=>s.includes(n)):s.includes(i)},m=e.computed(()=>t.roles.includes("admin")),c=e.computed(()=>t.isLoggedIn);return{hasPermission:r,hasRole:l,isAdmin:m,isLoggedIn:c}}function Kt(t,r={}){const{rules:l,onSubmit:m}=r,c=e.ref(),i=e.reactive({...t}),s=e.ref(!1),n=e.ref(!1),f=e.ref(!1),N=()=>{p(),f.value=!1,n.value=!0},g=S=>{Object.assign(i,S),f.value=!0,n.value=!0},B=()=>{n.value=!1,p()},p=()=>{var S;Object.keys(t).forEach(V=>{i[V]=t[V]}),(S=c.value)==null||S.resetFields()};return{formRef:c,formData:i,rules:l,loading:s,visible:n,isEdit:f,openAdd:N,openEdit:g,close:B,resetForm:p,handleSubmit:async()=>{var S;try{await((S=c.value)==null?void 0:S.validate()),s.value=!0,await(m==null?void 0:m(i)),B()}catch(V){console.error(V)}finally{s.value=!1}}}}function Ht(t){const{fetchData:r,defaultPageSize:l=10}=t,m=e.ref(!1),c=e.ref([]),i=e.ref(0),s=e.ref(1),n=e.ref(l),f=e.reactive({}),N=async()=>{m.value=!0;try{const _={...f,page:s.value,pageSize:n.value},x=await r(_);c.value=x.list,i.value=x.total}catch(_){console.error(_)}finally{m.value=!1}},g=()=>{s.value=1,N()},B=()=>{Object.keys(f).forEach(_=>{f[_]=void 0}),s.value=1,N()},p=_=>{s.value=_,N()},E=_=>{n.value=_,s.value=1,N()},S=()=>{N()},V=e.computed(()=>({current:s.value,pageSize:n.value,total:i.value}));return{loading:m,data:c,total:i,currentPage:s,pageSize:n,searchParams:f,pagination:V,getData:N,handleSearch:g,handleReset:B,handlePageChange:p,handleSizeChange:E,refresh:S}}function Yt(t){const l=F().permissions;return Array.isArray(t)?t.some(m=>l.includes(m)):l.includes(t)}function ke(t){const l=F().roles;return Array.isArray(t)?t.some(m=>l.includes(m)):l.includes(t)}function Wt(){return ke("admin")}const W=(()=>{const t=De.create({baseURL:void 0,timeout:3e4,headers:{"Content-Type":"application/json"}});return t.interceptors.request.use(r=>{const l=J();return l&&(r.headers.Authorization=`Bearer ${l}`),r},r=>Promise.reject(r)),t.interceptors.response.use(r=>{const{data:l}=r;return l.code===200||l.code===0?l.data:(I.Message.error(l.message||"请求失败"),Promise.reject(new Error(l.message||"请求失败")))},r=>{var m;const{response:l}=r;if(l)switch(l.status){case 401:I.Message.error("登录已过期,请重新登录"),le(),window.location.href="/login";break;case 403:I.Message.error("没有权限访问");break;case 404:I.Message.error("请求资源不存在");break;case 500:I.Message.error("服务器错误");break;default:I.Message.error(((m=l.data)==null?void 0:m.message)||"请求失败")}else I.Message.error("网络连接失败");return Promise.reject(r)}),t})(),b={get(t,r){return W.get(t,r)},post(t,r,l){return W.post(t,r,l)},put(t,r,l){return W.put(t,r,l)},patch(t,r,l){return W.patch(t,r,l)},delete(t,r){return W.delete(t,r)}};function Xt(t,r={}){const l=r.indexPath||"/dashboard";return{path:"/",name:"Layout",component:ae,redirect:l,children:t}}function Jt(t){return L.createRouter({history:L.createWebHistory(),routes:t,scrollBehavior:()=>({left:0,top:0})})}function Gt(t){return b.post("/auth/login",t)}function Qt(){return b.post("/auth/logout")}function Zt(){return b.get("/user/info")}function vt(t){return b.post("/auth/refresh",{refreshToken:t})}function en(t){return b.get("/role/list",{params:t})}function tn(t){return b.get(`/role/${t}`)}function nn(t){return b.post("/role",t)}function on(t,r){return b.put(`/role/${t}`,r)}function ln(t){return b.delete(`/role/${t}`)}function rn(t,r){return b.patch(`/role/${t}/status`,{status:r})}function an(){return b.get("/menu/list")}function sn(){return b.get("/menu/tree")}function dn(t){return b.post("/menu",t)}function cn(t,r){return b.put(`/menu/${t}`,r)}function mn(t){return b.delete(`/menu/${t}`)}function pn(t){return b.get("/user/list",{params:t})}function un(t){return b.get(`/user/${t}`)}function fn(t){return b.post("/user",t)}function hn(t,r){return b.put(`/user/${t}`,r)}function Vn(t){return b.delete(`/user/${t}`)}function _n(t){return b.post("/user/batch-delete",{ids:t})}function gn(t,r){return b.patch(`/user/${t}/status`,{status:r})}function Nn(t){return b.post(`/user/${t}/reset-password`)}var C=(t=>(t[t.ENABLED=1]="ENABLED",t[t.DISABLED=0]="DISABLED",t))(C||{}),Ce=(t=>(t[t.UNKNOWN=0]="UNKNOWN",t[t.MALE=1]="MALE",t[t.FEMALE=2]="FEMALE",t))(Ce||{}),$=(t=>(t[t.DIRECTORY=0]="DIRECTORY",t[t.MENU=1]="MENU",t[t.BUTTON=2]="BUTTON",t))($||{});const yn={1:"启用",0:"禁用"},En={0:"未知",1:"男",2:"女"},kn={0:"目录",1:"菜单",2:"按钮"},se=[{label:"启用",value:1},{label:"禁用",value:0}],Cn=[{label:"未知",value:0},{label:"男",value:1},{label:"女",value:2}],we=[{label:"目录",value:0},{label:"菜单",value:1},{label:"按钮",value:2}],wn={mounted(t,r){var s;const l=F(),{value:m}=r;if(!m)return;const c=l.permissions;let i=!1;Array.isArray(m)?i=m.some(n=>c.includes(n)||c.includes("*")):i=c.includes(m)||c.includes("*"),i||(s=t.parentNode)==null||s.removeChild(t)}},Sn={class:"dashboard"},xn={class:"dashboard__stats"},Bn={class:"stat-card__content"},bn={class:"stat-card__info"},Tn={class:"stat-card__title"},Dn={class:"dashboard__main"},In={class:"quick-links"},$n={class:"quick-link__icon"},Ln={class:"quick-link__title"},An={class:"activity-list"},Mn={class:"activity-item__action"},Un={class:"activity-item__time"},Rn={class:"system-info"},Fn={class:"system-info__item"},zn={class:"system-info__item"},Se=Object.freeze(Object.defineProperty({__proto__:null,default:A(e.defineComponent({__name:"index",setup(t){const r=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"}]),l=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"}]),m=e.ref([{title:"用户管理",path:"/system/user",icon:"👤"},{title:"角色管理",path:"/system/role",icon:"👥"},{title:"菜单管理",path:"/system/menu",icon:"📋"},{title:"系统设置",path:"/system",icon:"⚙️"}]);return(c,i)=>{const s=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock("div",Sn,[e.createElementVNode("div",xn,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,n=>(e.openBlock(),e.createBlock(e.unref(D.Card),{key:n.title,class:"stat-card"},{default:e.withCtx(()=>[e.createElementVNode("div",Bn,[e.createElementVNode("div",{class:"stat-card__icon",style:e.normalizeStyle({backgroundColor:n.color+"20"})},e.toDisplayString(n.icon),5),e.createElementVNode("div",bn,[e.createElementVNode("div",Tn,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",Dn,[e.createVNode(e.unref(D.Card),{class:"dashboard__quick"},{header:e.withCtx(()=>[...i[0]||(i[0]=[e.createElementVNode("span",{class:"card-title"},"快捷入口",-1)])]),default:e.withCtx(()=>[e.createElementVNode("div",In,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.value,n=>(e.openBlock(),e.createBlock(s,{key:n.path,to:n.path,class:"quick-link"},{default:e.withCtx(()=>[e.createElementVNode("span",$n,e.toDisplayString(n.icon),1),e.createElementVNode("span",Ln,e.toDisplayString(n.title),1)]),_:2},1032,["to"]))),128))])]),_:1}),e.createVNode(e.unref(D.Card),{class:"dashboard__activity"},{header:e.withCtx(()=>[...i[1]||(i[1]=[e.createElementVNode("span",{class:"card-title"},"最近活动",-1)])]),default:e.withCtx(()=>[e.createElementVNode("div",An,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,(n,f)=>(e.openBlock(),e.createElementBlock("div",{key:f,class:"activity-item"},[e.createVNode(e.unref(D.Tag),{type:n.type,size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(n.user),1)]),_:2},1032,["type"]),e.createElementVNode("span",Mn,e.toDisplayString(n.action),1),e.createElementVNode("span",Un,e.toDisplayString(n.time),1)]))),128))])]),_:1})]),e.createVNode(e.unref(D.Card),{class:"dashboard__system"},{header:e.withCtx(()=>[...i[2]||(i[2]=[e.createElementVNode("span",{class:"card-title"},"系统信息",-1)])]),default:e.withCtx(()=>[e.createElementVNode("div",Rn,[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",Fn,[i[3]||(i[3]=e.createElementVNode("span",{class:"system-info__label"},"服务器状态",-1)),e.createVNode(e.unref(D.Progress),{percentage:75,status:"success"})]),e.createElementVNode("div",zn,[i[4]||(i[4]=e.createElementVNode("span",{class:"system-info__label"},"内存使用",-1)),e.createVNode(e.unref(D.Progress),{percentage:45})])])]),_:1})])}}}),[["__scopeId","data-v-44648cb1"]])},Symbol.toStringTag,{value:"Module"})),Pn={class:"user-page"},On={class:"toolbar"},jn={class:"data-table"},qn={key:0},Kn={key:1},Hn={class:"pagination-wrapper"},xe=Object.freeze(Object.defineProperty({__proto__:null,default:A(e.defineComponent({__name:"index",setup(t){const r=[{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"}],l=e.ref(!1),m=e.ref([]),c=e.ref(0),i=e.ref(1),s=e.ref(10),n=e.reactive({keyword:"",status:void 0}),f=e.ref(!1),N=e.computed(()=>g.id?"编辑用户":"新增用户"),g=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(),E=()=>{l.value=!0,setTimeout(()=>{let d=[...r];n.keyword&&(d=d.filter(o=>o.username.includes(n.keyword)||o.nickname.includes(n.keyword))),n.status!==void 0&&(d=d.filter(o=>o.status===n.status)),c.value=d.length,m.value=d.slice((i.value-1)*s.value,i.value*s.value),l.value=!1},300)},S=()=>{i.value=1,E()},V=()=>{n.keyword="",n.status=void 0,i.value=1,E()},_=()=>{Object.assign(g,{id:0,username:"",nickname:"",email:"",phone:"",status:C.ENABLED,roles:[]}),f.value=!0},x=d=>{Object.assign(g,d),f.value=!0},U=d=>{I.Message.success("删除成功"),E()},M=async()=>{var d;try{await((d=p.value)==null?void 0:d.validate()),I.Message.success(g.id?"编辑成功":"新增成功"),f.value=!1,E()}catch(o){console.error(o)}},k=d=>{I.Message.success(`已${d.status===C.ENABLED?"启用":"禁用"}用户 ${d.username}`)};return e.onMounted(()=>{E()}),(d,o)=>(e.openBlock(),e.createElementBlock("div",Pn,[e.createVNode(e.unref(D.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":o[0]||(o[0]=u=>n.keyword=u),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":o[1]||(o[1]=u=>n.status=u),options:e.unref(se),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(()=>[...o[11]||(o[11]=[e.createTextVNode("搜索",-1)])]),_:1}),e.createVNode(e.unref(w.Button),{onClick:V},{default:e.withCtx(()=>[...o[12]||(o[12]=[e.createTextVNode("重置",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["model"])]),_:1}),e.createVNode(e.unref(D.Card),{class:"table-card"},{default:e.withCtx(()=>[e.createElementVNode("div",On,[e.createVNode(e.unref(w.Button),{type:"primary",onClick:_},{default:e.withCtx(()=>[...o[13]||(o[13]=[e.createTextVNode("新增用户",-1)])]),_:1})]),e.createElementVNode("table",jn,[o[18]||(o[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,[l.value?(e.openBlock(),e.createElementBlock("tr",qn,[...o[14]||(o[14]=[e.createElementVNode("td",{colspan:"9",class:"loading-cell"},"加载中...",-1)])])):m.value.length===0?(e.openBlock(),e.createElementBlock("tr",Kn,[...o[15]||(o[15]=[e.createElementVNode("td",{colspan:"9",class:"empty-cell"},"暂无数据",-1)])])):(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:2},e.renderList(m.value,u=>(e.openBlock(),e.createElementBlock("tr",{key:u.id},[e.createElementVNode("td",null,e.toDisplayString(u.id),1),e.createElementVNode("td",null,e.toDisplayString(u.username),1),e.createElementVNode("td",null,e.toDisplayString(u.nickname),1),e.createElementVNode("td",null,e.toDisplayString(u.email),1),e.createElementVNode("td",null,e.toDisplayString(u.phone),1),e.createElementVNode("td",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.roles,R=>(e.openBlock(),e.createBlock(e.unref(D.Tag),{key:R,size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(R),1)]),_:2},1024))),128))]),e.createElementVNode("td",null,[e.createVNode(e.unref(h.Switch),{"model-value":u.status===e.unref(C).ENABLED,"onUpdate:modelValue":R=>{u.status=R?e.unref(C).ENABLED:e.unref(C).DISABLED,k(u)}},null,8,["model-value","onUpdate:modelValue"])]),e.createElementVNode("td",null,e.toDisplayString(u.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:R=>x(u)},{default:e.withCtx(()=>[...o[16]||(o[16]=[e.createTextVNode("编辑",-1)])]),_:1},8,["onClick"]),e.createVNode(e.unref(I.Popconfirm),{title:"确定删除该用户吗?",onConfirm:R=>U(u.id)},{default:e.withCtx(()=>[e.createVNode(e.unref(w.Button),{type:"danger",link:"",size:"small"},{default:e.withCtx(()=>[...o[17]||(o[17]=[e.createTextVNode("删除",-1)])]),_:1})]),_:1},8,["onConfirm"])]),_:2},1024)])]))),128))])]),e.createElementVNode("div",Hn,[e.createVNode(e.unref(D.Pagination),{"current-page":i.value,"onUpdate:currentPage":o[2]||(o[2]=u=>i.value=u),"page-size":s.value,"onUpdate:pageSize":o[3]||(o[3]=u=>s.value=u),total:c.value,"page-sizes":[10,20,50,100],layout:"total, sizes, prev, pager, next",onCurrentChange:E,onSizeChange:E},null,8,["current-page","page-size","total"])])]),_:1}),e.createVNode(e.unref(I.Modal),{modelValue:f.value,"onUpdate:modelValue":o[10]||(o[10]=u=>f.value=u),title:N.value,width:"500px"},{footer:e.withCtx(()=>[e.createVNode(e.unref(w.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(w.Button),{onClick:o[9]||(o[9]=u=>f.value=!1)},{default:e.withCtx(()=>[...o[19]||(o[19]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(e.unref(w.Button),{type:"primary",onClick:M},{default:e.withCtx(()=>[...o[20]||(o[20]=[e.createTextVNode("确定",-1)])]),_:1})]),_:1})]),default:e.withCtx(()=>[e.createVNode(e.unref(h.Form),{ref_key:"formRef",ref:p,model:g,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:g.username,"onUpdate:modelValue":o[4]||(o[4]=u=>g.username=u),placeholder:"请输入用户名"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"昵称",prop:"nickname"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:g.nickname,"onUpdate:modelValue":o[5]||(o[5]=u=>g.nickname=u),placeholder:"请输入昵称"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"邮箱",prop:"email"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:g.email,"onUpdate:modelValue":o[6]||(o[6]=u=>g.email=u),placeholder:"请输入邮箱"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"手机号",prop:"phone"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:g.phone,"onUpdate:modelValue":o[7]||(o[7]=u=>g.phone=u),placeholder:"请输入手机号"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"状态"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Switch),{modelValue:g.status,"onUpdate:modelValue":o[8]||(o[8]=u=>g.status=u),"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"})),Yn={class:"role-page"},Wn={class:"toolbar"},Xn={class:"data-table"},Jn={key:0},Gn={key:1},Qn={class:"pagination-wrapper"},Be=Object.freeze(Object.defineProperty({__proto__:null,default:A(e.defineComponent({__name:"index",setup(t){const r=[{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"}],l=e.ref(!1),m=e.ref([]),c=e.ref(0),i=e.ref(1),s=e.ref(10),n=e.reactive({keyword:"",status:void 0}),f=e.ref(!1),N=e.computed(()=>g.id?"编辑角色":"新增角色"),g=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(),E=()=>{l.value=!0,setTimeout(()=>{let k=[...r];n.keyword&&(k=k.filter(d=>d.name.includes(n.keyword)||d.code.includes(n.keyword))),n.status!==void 0&&(k=k.filter(d=>d.status===n.status)),c.value=k.length,m.value=k.slice((i.value-1)*s.value,i.value*s.value),l.value=!1},300)},S=()=>{i.value=1,E()},V=()=>{n.keyword="",n.status=void 0,i.value=1,E()},_=()=>{Object.assign(g,{id:0,name:"",code:"",description:"",status:C.ENABLED,permissions:[]}),f.value=!0},x=k=>{Object.assign(g,k),f.value=!0},U=k=>{I.Message.success("删除成功"),E()},M=async()=>{var k;try{await((k=p.value)==null?void 0:k.validate()),I.Message.success(g.id?"编辑成功":"新增成功"),f.value=!1,E()}catch(d){console.error(d)}};return e.onMounted(()=>{E()}),(k,d)=>(e.openBlock(),e.createElementBlock("div",Yn,[e.createVNode(e.unref(D.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":d[0]||(d[0]=o=>n.keyword=o),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":d[1]||(d[1]=o=>n.status=o),options:e.unref(se),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(()=>[...d[10]||(d[10]=[e.createTextVNode("搜索",-1)])]),_:1}),e.createVNode(e.unref(w.Button),{onClick:V},{default:e.withCtx(()=>[...d[11]||(d[11]=[e.createTextVNode("重置",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["model"])]),_:1}),e.createVNode(e.unref(D.Card),{class:"table-card"},{default:e.withCtx(()=>[e.createElementVNode("div",Wn,[e.createVNode(e.unref(w.Button),{type:"primary",onClick:_},{default:e.withCtx(()=>[...d[12]||(d[12]=[e.createTextVNode("新增角色",-1)])]),_:1})]),e.createElementVNode("table",Xn,[d[17]||(d[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,[l.value?(e.openBlock(),e.createElementBlock("tr",Jn,[...d[13]||(d[13]=[e.createElementVNode("td",{colspan:"7",class:"loading-cell"},"加载中...",-1)])])):m.value.length===0?(e.openBlock(),e.createElementBlock("tr",Gn,[...d[14]||(d[14]=[e.createElementVNode("td",{colspan:"7",class:"empty-cell"},"暂无数据",-1)])])):(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:2},e.renderList(m.value,o=>(e.openBlock(),e.createElementBlock("tr",{key:o.id},[e.createElementVNode("td",null,e.toDisplayString(o.id),1),e.createElementVNode("td",null,e.toDisplayString(o.name),1),e.createElementVNode("td",null,[e.createVNode(e.unref(D.Tag),{type:"primary",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o.code),1)]),_:2},1024)]),e.createElementVNode("td",null,e.toDisplayString(o.description),1),e.createElementVNode("td",null,[e.createVNode(e.unref(D.Tag),{type:o.status===e.unref(C).ENABLED?"success":"danger",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o.status===e.unref(C).ENABLED?"启用":"禁用"),1)]),_:2},1032,["type"])]),e.createElementVNode("td",null,e.toDisplayString(o.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:u=>x(o)},{default:e.withCtx(()=>[...d[15]||(d[15]=[e.createTextVNode("编辑",-1)])]),_:1},8,["onClick"]),e.createVNode(e.unref(I.Popconfirm),{title:"确定删除该角色吗?",onConfirm:u=>U(o.id)},{default:e.withCtx(()=>[e.createVNode(e.unref(w.Button),{type:"danger",link:"",size:"small"},{default:e.withCtx(()=>[...d[16]||(d[16]=[e.createTextVNode("删除",-1)])]),_:1})]),_:1},8,["onConfirm"])]),_:2},1024)])]))),128))])]),e.createElementVNode("div",Qn,[e.createVNode(e.unref(D.Pagination),{"current-page":i.value,"onUpdate:currentPage":d[2]||(d[2]=o=>i.value=o),"page-size":s.value,"onUpdate:pageSize":d[3]||(d[3]=o=>s.value=o),total:c.value,"page-sizes":[10,20,50,100],layout:"total, sizes, prev, pager, next",onCurrentChange:E,onSizeChange:E},null,8,["current-page","page-size","total"])])]),_:1}),e.createVNode(e.unref(I.Modal),{modelValue:f.value,"onUpdate:modelValue":d[9]||(d[9]=o=>f.value=o),title:N.value,width:"500px"},{footer:e.withCtx(()=>[e.createVNode(e.unref(w.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(w.Button),{onClick:d[8]||(d[8]=o=>f.value=!1)},{default:e.withCtx(()=>[...d[18]||(d[18]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(e.unref(w.Button),{type:"primary",onClick:M},{default:e.withCtx(()=>[...d[19]||(d[19]=[e.createTextVNode("确定",-1)])]),_:1})]),_:1})]),default:e.withCtx(()=>[e.createVNode(e.unref(h.Form),{ref_key:"formRef",ref:p,model:g,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:g.name,"onUpdate:modelValue":d[4]||(d[4]=o=>g.name=o),placeholder:"请输入角色名称"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"角色编码",prop:"code"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:g.code,"onUpdate:modelValue":d[5]||(d[5]=o=>g.code=o),placeholder:"请输入角色编码"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"描述"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:g.description,"onUpdate:modelValue":d[6]||(d[6]=o=>g.description=o),placeholder:"请输入描述"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"状态"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Switch),{modelValue:g.status,"onUpdate:modelValue":d[7]||(d[7]=o=>g.status=o),"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"},vn={class:"toolbar"},eo={class:"menu-tree"},to={class:"tree-table"},no={class:"tree-row tree-row--level-0"},oo=["onClick"],lo=["onClick"],be=Object.freeze(Object.defineProperty({__proto__:null,default:A(e.defineComponent({__name:"index",setup(t){const r=[{id:1,parentId:null,name:"Dashboard",path:"/dashboard",component:"dashboard/index",redirect:"",icon:"dashboard",title:"仪表盘",type:$.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:$.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:$.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:$.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:$.MENU,sort:3,status:C.ENABLED,hidden:!1,keepAlive:!0}]}],l=e.ref(!1),m=e.ref([]),c=e.ref(!1),i=e.computed(()=>s.id?"编辑菜单":"新增菜单"),s=e.reactive({id:0,parentId:null,name:"",path:"",component:"",redirect:"",icon:"",title:"",type:$.MENU,sort:0,status:C.ENABLED,hidden:!1,keepAlive:!0}),n={name:[{required:!0,message:"请输入菜单名称",trigger:"blur"}],path:[{required:!0,message:"请输入路由路径",trigger:"blur"}],title:[{required:!0,message:"请输入菜单标题",trigger:"blur"}]},f=e.ref(),N=()=>{l.value=!0,setTimeout(()=>{m.value=r,l.value=!1},300)},g=(S=null)=>{Object.assign(s,{id:0,parentId:S,name:"",path:"",component:"",redirect:"",icon:"",title:"",type:$.MENU,sort:0,status:C.ENABLED,hidden:!1,keepAlive:!0}),c.value=!0},B=S=>{Object.assign(s,S),c.value=!0},p=async()=>{var S;try{await((S=f.value)==null?void 0:S.validate()),I.Message.success(s.id?"编辑成功":"新增成功"),c.value=!1,N()}catch(V){console.error(V)}},E=S=>({dashboard:"📊",system:"⚙️",user:"👤",role:"👥",menu:"📋",setting:"🔧"})[S||""]||"📄";return e.onMounted(()=>{N()}),(S,V)=>(e.openBlock(),e.createElementBlock("div",Zn,[e.createVNode(e.unref(D.Card),{class:"menu-card"},{default:e.withCtx(()=>[e.createElementVNode("div",vn,[e.createVNode(e.unref(w.Button),{type:"primary",onClick:V[0]||(V[0]=_=>g())},{default:e.withCtx(()=>[...V[14]||(V[14]=[e.createTextVNode("新增菜单",-1)])]),_:1})]),e.createElementVNode("div",eo,[e.createElementVNode("table",to,[V[19]||(V[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(m.value,_=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:_.id},[e.createElementVNode("tr",no,[e.createElementVNode("td",null,[e.createElementVNode("span",{class:"menu-name",onClick:x=>B(_)},e.toDisplayString(_.title),9,oo)]),e.createElementVNode("td",null,e.toDisplayString(E(_.icon)),1),e.createElementVNode("td",null,e.toDisplayString(_.path),1),e.createElementVNode("td",null,[e.createVNode(e.unref(D.Tag),{type:_.type===e.unref($).DIRECTORY?"primary":_.type===e.unref($).MENU?"success":"warning",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(_.type===e.unref($).DIRECTORY?"目录":_.type===e.unref($).MENU?"菜单":"按钮"),1)]),_:2},1032,["type"])]),e.createElementVNode("td",null,e.toDisplayString(_.sort),1),e.createElementVNode("td",null,[e.createVNode(e.unref(D.Tag),{type:_.status===e.unref(C).ENABLED?"success":"danger",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(_.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:x=>g(_.id)},{default:e.withCtx(()=>[...V[15]||(V[15]=[e.createTextVNode("新增",-1)])]),_:1},8,["onClick"]),e.createVNode(e.unref(w.Button),{type:"primary",link:"",size:"small",onClick:x=>B(_)},{default:e.withCtx(()=>[...V[16]||(V[16]=[e.createTextVNode("编辑",-1)])]),_:1},8,["onClick"])]),_:2},1024)])]),_.children?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(_.children,x=>(e.openBlock(),e.createElementBlock("tr",{key:x.id,class:"tree-row tree-row--level-1"},[e.createElementVNode("td",null,[V[17]||(V[17]=e.createElementVNode("span",{class:"tree-indent"},null,-1)),e.createElementVNode("span",{class:"menu-name",onClick:U=>B(x)},e.toDisplayString(x.title),9,lo)]),e.createElementVNode("td",null,e.toDisplayString(E(x.icon)),1),e.createElementVNode("td",null,e.toDisplayString(x.path),1),e.createElementVNode("td",null,[e.createVNode(e.unref(D.Tag),{type:x.type===e.unref($).DIRECTORY?"primary":x.type===e.unref($).MENU?"success":"warning",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(x.type===e.unref($).DIRECTORY?"目录":x.type===e.unref($).MENU?"菜单":"按钮"),1)]),_:2},1032,["type"])]),e.createElementVNode("td",null,e.toDisplayString(x.sort),1),e.createElementVNode("td",null,[e.createVNode(e.unref(D.Tag),{type:x.status===e.unref(C).ENABLED?"success":"danger",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(x.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:U=>B(x)},{default:e.withCtx(()=>[...V[18]||(V[18]=[e.createTextVNode("编辑",-1)])]),_:1},8,["onClick"])]),_:2},1024)])]))),128)):e.createCommentVNode("",!0)],64))),128))])])])]),_:1}),e.createVNode(e.unref(I.Modal),{modelValue:c.value,"onUpdate:modelValue":V[13]||(V[13]=_=>c.value=_),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:V[12]||(V[12]=_=>c.value=!1)},{default:e.withCtx(()=>[...V[20]||(V[20]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(e.unref(w.Button),{type:"primary",onClick:p},{default:e.withCtx(()=>[...V[21]||(V[21]=[e.createTextVNode("确定",-1)])]),_:1})]),_:1})]),default:e.withCtx(()=>[e.createVNode(e.unref(h.Form),{ref_key:"formRef",ref:f,model:s,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:s.parentId,"onUpdate:modelValue":V[1]||(V[1]=_=>s.parentId=_),placeholder:"上级菜单ID",disabled:""},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"菜单类型"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Select),{modelValue:s.type,"onUpdate:modelValue":V[2]||(V[2]=_=>s.type=_),options:e.unref(we)},null,8,["modelValue","options"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"菜单名称",prop:"name"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:s.name,"onUpdate:modelValue":V[3]||(V[3]=_=>s.name=_),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:s.title,"onUpdate:modelValue":V[4]||(V[4]=_=>s.title=_),placeholder:"请输入菜单标题"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"路由路径",prop:"path"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:s.path,"onUpdate:modelValue":V[5]||(V[5]=_=>s.path=_),placeholder:"请输入路由路径"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"组件路径"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:s.component,"onUpdate:modelValue":V[6]||(V[6]=_=>s.component=_),placeholder:"请输入组件路径"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"图标"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Input),{modelValue:s.icon,"onUpdate:modelValue":V[7]||(V[7]=_=>s.icon=_),placeholder:"请输入图标名称"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"排序"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.InputNumber),{modelValue:s.sort,"onUpdate:modelValue":V[8]||(V[8]=_=>s.sort=_),min:0},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"状态"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Switch),{modelValue:s.status,"onUpdate:modelValue":V[9]||(V[9]=_=>s.status=_),"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:s.hidden,"onUpdate:modelValue":V[10]||(V[10]=_=>s.hidden=_)},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(h.FormItem),{label:"缓存"},{default:e.withCtx(()=>[e.createVNode(e.unref(h.Switch),{modelValue:s.keepAlive,"onUpdate:modelValue":V[11]||(V[11]=_=>s.keepAlive=_)},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])]))}}),[["__scopeId","data-v-2a272a68"]])},Symbol.toStringTag,{value:"Module"}));a.Footer=$t,a.Forbidden=Ee,a.Gender=Ce,a.GenderOptions=Cn,a.GenderText=En,a.Header=ge,a.Layout=ae,a.Login=Ne,a.MenuType=$,a.MenuTypeOptions=we,a.MenuTypeText=kn,a.NotFound=ye,a.Sidebar=_e,a.Status=C,a.StatusOptions=se,a.StatusText=yn,a.Tabs=bt,a.batchDeleteUsers=_n,a.clearToken=le,a.createLayoutRoute=Xt,a.createMenu=dn,a.createRole=nn,a.createRouter=Jt,a.createUser=fn,a.defaultDynamicRoutes=Le,a.deleteMenu=mn,a.deleteRole=ln,a.deleteUser=Vn,a.errorRoute=v,a.getMenuList=an,a.getMenuTree=sn,a.getRefreshToken=Ae,a.getRoleDetail=tn,a.getRoleList=en,a.getToken=J,a.getTokenExpire=ue,a.getUserDetail=un,a.getUserInfo=Zt,a.getUserList=pn,a.hasPermission=Yt,a.hasRole=ke,a.hasToken=re,a.http=b,a.isAdmin=Wt,a.isTokenExpired=Ve,a.layoutRoute=ee,a.local=y,a.localStorageUtil=q,a.login=Gt,a.logout=Qt,a.mockMenuData=ce,a.permissionDirective=wn,a.refreshToken=vt,a.resetPassword=Nn,a.resetRouter=Ue,a.router=G,a.session=Ie,a.sessionStorageUtil=K,a.setRefreshToken=pe,a.setToken=me,a.setTokenExpire=fe,a.setTokenInfo=he,a.staticRoutes=Z,a.updateMenu=cn,a.updateRole=on,a.updateRoleStatus=rn,a.updateUser=hn,a.updateUserStatus=gn,a.useApp=jt,a.useAppStore=O,a.useAuth=qt,a.useAuthStore=Y,a.useForm=Kt,a.useMenuStore=H,a.useTable=Ht,a.useUserStore=F,Object.defineProperty(a,Symbol.toStringTag,{value:"Module"})});
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- .sidebar[data-v-1d224580]{height:100%;display:flex;flex-direction:column;background-color:var(--bg-color)}.sidebar__logo[data-v-1d224580]{height:50px;display:flex;align-items:center;justify-content:center;gap:10px;border-bottom:1px solid var(--color-border-lighter)}.sidebar__logo-img[data-v-1d224580]{width:32px;height:32px}.sidebar__logo-text[data-v-1d224580]{font-size:16px;font-weight:600;color:var(--color-primary)}.sidebar__search[data-v-1d224580]{padding:10px;border-bottom:1px solid var(--color-border-lighter);position:relative}.sidebar__search-results[data-v-1d224580]{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-1d224580]{display:flex;align-items:center;gap:10px;padding:10px 12px;cursor:pointer;transition:background-color .2s}.sidebar__search-item[data-v-1d224580]:hover{background-color:var(--color-fill)}.sidebar__search-item-info[data-v-1d224580]{display:flex;flex-direction:column;gap:2px}.sidebar__search-item-title[data-v-1d224580]{font-size:14px;color:var(--color-text-primary)}.sidebar__search-item-parent[data-v-1d224580]{font-size:12px;color:var(--color-text-secondary)}.sidebar__menu[data-v-1d224580]{flex:1;border-right:none;overflow-y:auto}.sidebar__user[data-v-1d224580]{padding:10px;border-top:1px solid var(--color-border-lighter);display:flex;align-items:center;justify-content:space-between}.sidebar__user-info[data-v-1d224580]{display:flex;flex-direction:column;gap:2px}.sidebar__user-name[data-v-1d224580]{font-size:14px;font-weight:500}.sidebar__user-role[data-v-1d224580]{font-size:12px;color:var(--color-text-secondary)}.menu-icon[data-v-1d224580]{margin-right:8px}.header[data-v-7af82b67]{display:flex;align-items:center;justify-content:space-between;padding:0 20px;height:100%}.header__left[data-v-7af82b67]{display:flex;align-items:center;gap:15px}.header__collapse[data-v-7af82b67]{width:24px;height:24px;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:18px;color:var(--color-text-regular)}.header__collapse[data-v-7af82b67]:hover{color:var(--color-primary)}.header__breadcrumb[data-v-7af82b67]{font-size:14px;color:var(--color-text-secondary)}.header__breadcrumb .is-current[data-v-7af82b67]{color:var(--color-text-primary);font-weight:500}.header__right[data-v-7af82b67]{display:flex;align-items:center;gap:15px}.header__action[data-v-7af82b67]{width:32px;height:32px;display:flex;align-items:center;justify-content:center;cursor:pointer;border-radius:var(--border-radius-base);font-size:16px}.header__action[data-v-7af82b67]:hover{background-color:var(--color-fill)}.header__user[data-v-7af82b67]{position:relative}.header__user-trigger[data-v-7af82b67]{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-7af82b67]:hover{background-color:var(--color-fill)}.header__user-name[data-v-7af82b67]{font-size:14px;color:var(--color-text-primary)}.header__user-arrow[data-v-7af82b67]{font-size:10px;color:var(--color-text-secondary);transition:transform .2s}.header__user-arrow.is-active[data-v-7af82b67]{transform:rotate(180deg)}.header__avatar[data-v-7af82b67]{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-7af82b67]{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-7af82b67]{display:flex;align-items:center;gap:12px;padding:16px}.header__dropdown-avatar[data-v-7af82b67]{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-7af82b67]{flex:1}.header__dropdown-name[data-v-7af82b67]{font-size:14px;font-weight:500;color:var(--color-text-primary)}.header__dropdown-role[data-v-7af82b67]{font-size:12px;color:var(--color-text-secondary);margin-top:2px}.header__dropdown-divider[data-v-7af82b67]{height:1px;background-color:var(--color-border-lighter)}.header__dropdown-menu[data-v-7af82b67]{padding:8px 0}.header__dropdown-item[data-v-7af82b67]{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-7af82b67]:hover{background-color:var(--color-fill);color:var(--color-text-primary)}.header__dropdown-item--danger[data-v-7af82b67]{color:var(--color-danger)}.header__dropdown-item--danger[data-v-7af82b67]:hover{background-color:var(--color-danger-light);color:var(--color-danger)}.header__dropdown-icon[data-v-7af82b67]{font-size:16px}.dropdown-enter-active[data-v-7af82b67],.dropdown-leave-active[data-v-7af82b67]{transition:all .2s ease}.dropdown-enter-from[data-v-7af82b67],.dropdown-leave-to[data-v-7af82b67]{opacity:0;transform:translateY(-10px)}.layout[data-v-0bcf8553]{display:flex;width:100%;height:100%}.layout__aside[data-v-0bcf8553]{transition:width .3s;overflow:hidden;flex-shrink:0;height:100%}.layout__main[data-v-0bcf8553]{flex:1;display:flex;flex-direction:column;overflow:hidden;height:100%}.layout__header[data-v-0bcf8553]{height:50px;background-color:var(--bg-color);border-bottom:1px solid var(--color-border-lighter);flex-shrink:0}.layout__content[data-v-0bcf8553]{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-cc0ffe99]{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-cc0ffe99]{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-cc0ffe99]{text-align:center;margin-bottom:30px}.login__logo[data-v-cc0ffe99]{width:60px;height:60px}.login__title[data-v-cc0ffe99]{font-size:28px;font-weight:600;color:var(--color-primary);margin:15px 0 5px}.login__subtitle[data-v-cc0ffe99]{font-size:14px;color:var(--color-text-secondary)}.login__form[data-v-cc0ffe99] .t-form-item{margin-bottom:20px}.login__form[data-v-cc0ffe99] .x-input__prefix{margin-right:8px}.login__submit[data-v-cc0ffe99]{width:100%}.login__footer[data-v-cc0ffe99]{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-1d224580]{height:100%;display:flex;flex-direction:column;background-color:var(--bg-color)}.sidebar__logo[data-v-1d224580]{height:50px;display:flex;align-items:center;justify-content:center;gap:10px;border-bottom:1px solid var(--color-border-lighter)}.sidebar__logo-img[data-v-1d224580]{width:32px;height:32px}.sidebar__logo-text[data-v-1d224580]{font-size:16px;font-weight:600;color:var(--color-primary)}.sidebar__search[data-v-1d224580]{padding:10px;border-bottom:1px solid var(--color-border-lighter);position:relative}.sidebar__search-results[data-v-1d224580]{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-1d224580]{display:flex;align-items:center;gap:10px;padding:10px 12px;cursor:pointer;transition:background-color .2s}.sidebar__search-item[data-v-1d224580]:hover{background-color:var(--color-fill)}.sidebar__search-item-info[data-v-1d224580]{display:flex;flex-direction:column;gap:2px}.sidebar__search-item-title[data-v-1d224580]{font-size:14px;color:var(--color-text-primary)}.sidebar__search-item-parent[data-v-1d224580]{font-size:12px;color:var(--color-text-secondary)}.sidebar__menu[data-v-1d224580]{flex:1;border-right:none;overflow-y:auto}.sidebar__user[data-v-1d224580]{padding:10px;border-top:1px solid var(--color-border-lighter);display:flex;align-items:center;justify-content:space-between}.sidebar__user-info[data-v-1d224580]{display:flex;flex-direction:column;gap:2px}.sidebar__user-name[data-v-1d224580]{font-size:14px;font-weight:500}.sidebar__user-role[data-v-1d224580]{font-size:12px;color:var(--color-text-secondary)}.menu-icon[data-v-1d224580]{margin-right:8px}.header[data-v-7af82b67]{display:flex;align-items:center;justify-content:space-between;padding:0 20px;height:100%}.header__left[data-v-7af82b67]{display:flex;align-items:center;gap:15px}.header__collapse[data-v-7af82b67]{width:24px;height:24px;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:18px;color:var(--color-text-regular)}.header__collapse[data-v-7af82b67]:hover{color:var(--color-primary)}.header__breadcrumb[data-v-7af82b67]{font-size:14px;color:var(--color-text-secondary)}.header__breadcrumb .is-current[data-v-7af82b67]{color:var(--color-text-primary);font-weight:500}.header__right[data-v-7af82b67]{display:flex;align-items:center;gap:15px}.header__action[data-v-7af82b67]{width:32px;height:32px;display:flex;align-items:center;justify-content:center;cursor:pointer;border-radius:var(--border-radius-base);font-size:16px}.header__action[data-v-7af82b67]:hover{background-color:var(--color-fill)}.header__user[data-v-7af82b67]{position:relative}.header__user-trigger[data-v-7af82b67]{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-7af82b67]:hover{background-color:var(--color-fill)}.header__user-name[data-v-7af82b67]{font-size:14px;color:var(--color-text-primary)}.header__user-arrow[data-v-7af82b67]{font-size:10px;color:var(--color-text-secondary);transition:transform .2s}.header__user-arrow.is-active[data-v-7af82b67]{transform:rotate(180deg)}.header__avatar[data-v-7af82b67]{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-7af82b67]{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-7af82b67]{display:flex;align-items:center;gap:12px;padding:16px}.header__dropdown-avatar[data-v-7af82b67]{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-7af82b67]{flex:1}.header__dropdown-name[data-v-7af82b67]{font-size:14px;font-weight:500;color:var(--color-text-primary)}.header__dropdown-role[data-v-7af82b67]{font-size:12px;color:var(--color-text-secondary);margin-top:2px}.header__dropdown-divider[data-v-7af82b67]{height:1px;background-color:var(--color-border-lighter)}.header__dropdown-menu[data-v-7af82b67]{padding:8px 0}.header__dropdown-item[data-v-7af82b67]{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-7af82b67]:hover{background-color:var(--color-fill);color:var(--color-text-primary)}.header__dropdown-item--danger[data-v-7af82b67]{color:var(--color-danger)}.header__dropdown-item--danger[data-v-7af82b67]:hover{background-color:var(--color-danger-light);color:var(--color-danger)}.header__dropdown-icon[data-v-7af82b67]{font-size:16px}.dropdown-enter-active[data-v-7af82b67],.dropdown-leave-active[data-v-7af82b67]{transition:all .2s ease}.dropdown-enter-from[data-v-7af82b67],.dropdown-leave-to[data-v-7af82b67]{opacity:0;transform:translateY(-10px)}.layout[data-v-0bcf8553]{display:flex;width:100%;height:100%}.layout__aside[data-v-0bcf8553]{transition:width .3s;overflow:hidden;flex-shrink:0;height:100%}.layout__main[data-v-0bcf8553]{flex:1;display:flex;flex-direction:column;overflow:hidden;height:100%}.layout__header[data-v-0bcf8553]{height:50px;background-color:var(--bg-color);border-bottom:1px solid var(--color-border-lighter);flex-shrink:0}.layout__content[data-v-0bcf8553]{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.0",
3
+ "version": "0.3.1",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "XTO 前端应用框架",
@@ -225,7 +225,7 @@ const handleLogin = async () => {
225
225
  }
226
226
 
227
227
  &__form {
228
- :deep(.t-form-item) {
228
+ :deep(.x-form-item) {
229
229
  margin-bottom: 20px;
230
230
  }
231
231