xto-fronted 0.3.6 → 0.3.7

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.d.ts CHANGED
@@ -22,6 +22,7 @@ export { default as router, resetRouter } from './router';
22
22
  export * from './router/staticRoutes';
23
23
  export * from './router/dynamicRoutes';
24
24
  export { createLayoutRoute, createRouter } from './router/layoutRoute';
25
+ export { setupRouterGuards } from './router/guards';
25
26
  export * from './api/auth';
26
27
  export * from './api/system';
27
28
  export * from './api/user';
package/dist/index.es.js CHANGED
@@ -1,4 +1,4 @@
1
- import { F as s, c as t, G as o, d as r, e as u, H as n, L as i, i as l, M as d, b as p, f as T, g, h as R, S as c, a as k, j as S, T as h, k as U, l as M, m as f, n as m, o as x, p as y, q as b, r as D, s as L, t as A, u as F, v as E, w as G, x as O, y as I, z as P, A as j, B as v, C as w, D as H, E as N, I as q, J as z, K as B, N as C, O as J, P as K, Q, R as V, U as W, V as X, W as Y, X as Z, Y as $, Z as _, $ as ee, a0 as ae, a1 as se, a2 as te, a3 as oe, a4 as re, a5 as ue, a6 as ne, a7 as ie, a8 as le, a9 as de, aa as pe, ab as Te, ac as ge, ad as Re, ae as ce, af as ke, ag as Se, ah as he, ai as Ue, aj as Me, ak as fe, al as me, am as xe } from "./index-D7TZamyY.js";
1
+ import { F as s, c as t, G as o, d as r, e as u, H as n, L as i, i as l, M as d, b as p, f as T, g as R, h as g, S as c, a as k, j as S, T as h, k as U, l as M, m as f, n as m, o as x, p as y, q as b, r as D, s as L, t as A, u as F, v as G, w as E, x as O, y as I, z as P, A as j, B as v, C as w, D as H, E as N, I as q, J as z, K as B, N as C, O as J, P as K, Q, R as V, U as W, V as X, W as Y, X as Z, Y as $, Z as _, $ as ee, a0 as ae, a1 as se, a2 as te, a3 as oe, a4 as re, a5 as ue, a6 as ne, a7 as ie, a8 as le, a9 as de, aa as pe, ab as Te, ac as Re, ad as ge, ae as ce, af as ke, ag as Se, ah as he, ai as Ue, aj as Me, ak as fe, al as me, am as xe, an as ye } from "./index-DdC1uV2v.js";
2
2
  export {
3
3
  s as Footer,
4
4
  t as Forbidden,
@@ -11,8 +11,8 @@ export {
11
11
  d as MenuType,
12
12
  p as MenuTypeOptions,
13
13
  T as MenuTypeText,
14
- g as NotFound,
15
- R as Sidebar,
14
+ R as NotFound,
15
+ g as Sidebar,
16
16
  c as Status,
17
17
  k as StatusOptions,
18
18
  S as StatusText,
@@ -28,8 +28,8 @@ export {
28
28
  L as deleteMenu,
29
29
  A as deleteRole,
30
30
  F as deleteUser,
31
- E as errorRoute,
32
- G as getMenuList,
31
+ G as errorRoute,
32
+ E as getMenuList,
33
33
  O as getMenuTree,
34
34
  I as getRefreshToken,
35
35
  P as getRoleDetail,
@@ -62,18 +62,19 @@ export {
62
62
  ne as setToken,
63
63
  ie as setTokenExpire,
64
64
  le as setTokenInfo,
65
- de as staticRoutes,
66
- pe as updateMenu,
67
- Te as updateRole,
65
+ de as setupRouterGuards,
66
+ pe as staticRoutes,
67
+ Te as updateMenu,
68
+ Re as updateRole,
68
69
  ge as updateRoleStatus,
69
- Re as updateUser,
70
- ce as updateUserStatus,
71
- ke as useApp,
72
- Se as useAppStore,
73
- he as useAuth,
74
- Ue as useAuthStore,
75
- Me as useForm,
76
- fe as useMenuStore,
77
- me as useTable,
78
- xe as useUserStore
70
+ ce as updateUser,
71
+ ke as updateUserStatus,
72
+ Se as useApp,
73
+ he as useAppStore,
74
+ Ue as useAuth,
75
+ Me as useAuthStore,
76
+ fe as useForm,
77
+ me as useMenuStore,
78
+ xe as useTable,
79
+ ye as useUserStore
79
80
  };
package/dist/index.umd.js CHANGED
@@ -1 +1 @@
1
- (function(r,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("pinia"),require("vue-router"),require("@xto/navigation"),require("@xto/base"),require("@xto/feedback"),require("@xto/form"),require("axios"),require("@xto/data")):typeof define=="function"&&define.amd?define(["exports","vue","pinia","vue-router","@xto/navigation","@xto/base","@xto/feedback","@xto/form","axios","@xto/data"],e):(r=typeof globalThis<"u"?globalThis:r||self,e(r.XtoFronted={},r.Vue,r.Pinia,r.VueRouter,r.navigation,r.base,r.feedback,r.form,r.axios,r.data))})(this,function(r,e,v,R,q,y,A,V,Oe,L){"use strict";const H="xto_",he=t=>({get(l){const o=t.getItem(H+l);if(!o)return null;try{return JSON.parse(o)}catch{return o}},set(l,o){if(o==null){t.removeItem(H+l);return}const s=typeof o=="string"?o:JSON.stringify(o);t.setItem(H+l,s)},remove(l){t.removeItem(H+l)},clear(){Object.keys(t).forEach(o=>{o.startsWith(H)&&t.removeItem(o)})}}),W=he(window.localStorage),X=he(window.sessionStorage),E={get:W.get,set:W.set,remove:W.remove,clear:W.clear},je={get:X.get,set:X.set,remove:X.remove,clear:X.clear},K=v.defineStore("app",()=>{const t=e.ref(E.get("appName")||"XTO App"),l=e.ref(E.get("indexPath")||"/dashboard"),o=e.ref(E.get("isDark")||!1),s=e.ref(E.get("theme")||"light"),c=e.ref(E.get("layout")||"sidebar"),i=e.ref(E.get("isCollapsed")||!1),a=e.ref(E.get("showTabs")??!0),n=e.ref(E.get("showFooter")??!0),h=e.ref(E.get("showBreadcrumb")??!0),_=e.ref(E.get("primaryColor")||"#409eff"),N=e.ref([]),b=e.computed(()=>o.value?"dark":"light"),m=T=>{t.value=T,E.set("appName",T)},C=T=>{l.value=T,E.set("indexPath",T)},S=()=>{o.value=!o.value,s.value=o.value?"dark":"light",u()},p=T=>{s.value=T,o.value=T==="dark",u()},u=()=>{const T=document.documentElement;o.value?T.classList.add("dark"):T.classList.remove("dark"),E.set("isDark",o.value),E.set("theme",s.value)},B=()=>{i.value=!i.value,E.set("isCollapsed",i.value)},$=T=>{c.value=T,E.set("layout",T)},z=()=>{a.value=!a.value,E.set("showTabs",a.value)},U=()=>{n.value=!n.value,E.set("showFooter",n.value)},f=()=>{h.value=!h.value,E.set("showBreadcrumb",h.value)},d=T=>{_.value=T,document.documentElement.style.setProperty("--color-primary",T),E.set("primaryColor",T)},k=T=>{N.value.includes(T)||N.value.push(T)},O=T=>{const ne=N.value.indexOf(T);ne>-1&&N.value.splice(ne,1)},ue=()=>{N.value=[]},fe=()=>{u(),_.value!=="#409eff"&&document.documentElement.style.setProperty("--color-primary",_.value)};return e.watch(o,u),{appName:t,indexPath:l,isDark:o,theme:s,layout:c,isCollapsed:i,showTabs:a,showFooter:n,showBreadcrumb:h,primaryColor:_,cachedViews:N,themeClass:b,setAppName:m,setIndexPath:C,toggleTheme:S,toggleCollapse:B,setTheme:p,setLayout:$,toggleTabs:z,toggleFooter:U,toggleBreadcrumb:f,setPrimaryColor:d,addCachedView:k,removeCachedView:O,clearCachedViews:ue,initTheme:fe}}),Ne="/vite.svg",qe=(t,l,o)=>{const s=t[l];return s?typeof s=="function"?s():Promise.resolve(s):new Promise((c,i)=>{(typeof queueMicrotask=="function"?queueMicrotask:setTimeout)(i.bind(null,new Error("Unknown variable dynamic import: "+l+(l.split("/").length!==o?". Note that variables only represent file names one level deep.":""))))})},oe=[{path:"/login",name:"Login",component:()=>Promise.resolve().then(()=>en),meta:{title:"登录",hidden:!0}},{path:"/404",name:"NotFound",component:()=>Promise.resolve().then(()=>on),meta:{title:"404",hidden:!0}},{path:"/403",name:"Forbidden",component:()=>Promise.resolve().then(()=>rn),meta:{title:"403",hidden:!0}}],le={path:"/:pathMatch(.*)*",redirect:"/404",meta:{hidden:!0}},ae={path:"/",name:"Layout",component:()=>Promise.resolve().then(()=>qt),redirect:"/dashboard",children:[{path:"/dashboard",name:"Dashboard",component:()=>Promise.resolve().then(()=>$e),meta:{title:"仪表盘",icon:"dashboard",keepAlive:!0,affix:!0}},{path:"/system/user",name:"SystemUser",component:()=>Promise.resolve().then(()=>Ae),meta:{title:"用户管理",icon:"user",keepAlive:!0}},{path:"/system/role",name:"SystemRole",component:()=>Promise.resolve().then(()=>Ue),meta:{title:"角色管理",icon:"role",keepAlive:!0}},{path:"/system/menu",name:"SystemMenu",component:()=>Promise.resolve().then(()=>Me),meta:{title:"菜单管理",icon:"menu",keepAlive:!0}}]},Ke=[{path:"/dashboard",name:"Dashboard",component:()=>Promise.resolve().then(()=>$e),meta:{title:"仪表盘",icon:"dashboard",keepAlive:!0,affix:!0}},{path:"/system",name:"System",redirect:"/system/user",meta:{title:"系统管理",icon:"setting"},children:[{path:"user",name:"SystemUser",component:()=>Promise.resolve().then(()=>Ae),meta:{title:"用户管理",icon:"user",keepAlive:!0}},{path:"role",name:"SystemRole",component:()=>Promise.resolve().then(()=>Ue),meta:{title:"角色管理",icon:"role",keepAlive:!0}},{path:"menu",name:"SystemMenu",component:()=>Promise.resolve().then(()=>Me),meta:{title:"菜单管理",icon:"menu",keepAlive:!0}}]}],ge=[{id:1,name:"Dashboard",path:"/dashboard",component:"dashboard/index",icon:"dashboard",title:"仪表盘",keepAlive:!0,affix:!0},{id:2,name:"System",path:"/system",redirect:"/system/user",icon:"setting",title:"系统管理",children:[{id:21,name:"SystemUser",path:"/system/user",component:"system/user/index",icon:"user",title:"用户管理",keepAlive:!0},{id:22,name:"SystemRole",path:"/system/role",component:"system/role/index",icon:"role",title:"角色管理",keepAlive:!0},{id:23,name:"SystemMenu",path:"/system/menu",component:"system/menu/index",icon:"menu",title:"菜单管理",keepAlive:!0}]}],re="token",se="refresh_token",ie="token_expire",ee=()=>E.get(re),_e=t=>{E.set(re,t)},Ye=()=>E.get(se),ye=t=>{E.set(se,t)},Ee=()=>E.get(ie),ke=t=>{E.set(ie,t)},Ce=t=>{_e(t.token),ye(t.refreshToken),ke(t.expireTime)},de=()=>{E.remove(re),E.remove(se),E.remove(ie)},we=()=>{const t=Ee();return t?Date.now()>t:!0},ce=()=>!!ee()&&!we(),P=v.defineStore("user",()=>{const t=e.ref(E.get("userInfo")),l=e.ref(E.get("roles")||[]),o=e.ref(E.get("permissions")||[]),s=e.computed(()=>!!t.value),c=e.computed(()=>{var m;return((m=t.value)==null?void 0:m.username)||""}),i=e.computed(()=>{var m;return((m=t.value)==null?void 0:m.nickname)||""}),a=e.computed(()=>{var m;return((m=t.value)==null?void 0:m.avatar)||""}),n=e.computed(()=>{var m;return(m=t.value)==null?void 0:m.id});return{userInfo:t,roles:l,permissions:o,isLoggedIn:s,username:c,nickname:i,avatar:a,userId:n,setUserInfo:m=>{t.value=m,l.value=m.roles||[],o.value=m.permissions||[],E.set("userInfo",m),E.set("roles",m.roles||[]),E.set("permissions",m.permissions||[])},clearUserInfo:()=>{t.value=null,l.value=[],o.value=[],E.remove("userInfo"),E.remove("roles"),E.remove("permissions")},hasPermission:m=>Array.isArray(m)?m.some(C=>o.value.includes(C)):o.value.includes(m),hasRole:m=>Array.isArray(m)?m.some(C=>l.value.includes(C)):l.value.includes(m)}}),te=R.createRouter({history:R.createWebHistory(),routes:[...oe,ae,le],scrollBehavior:()=>({left:0,top:0})}),He=["/login","/404","/403"];te.beforeEach(async(t,l,o)=>{const s=K();if(s.initTheme(),ce())if(t.path==="/login")o({path:"/"});else{const c=P();c.isLoggedIn||(c.setUserInfo({id:1,username:"admin",nickname:"管理员",avatar:"",email:"admin@example.com",phone:"13800138000",status:1,roles:["admin"],permissions:["*"],createTime:new Date().toISOString()}),J().setMenuList(ge)),t.name&&t.meta.keepAlive&&s.addCachedView(t.name),o()}else He.includes(t.path)?o():o("/login")});function We(){const t=R.createRouter({history:R.createWebHistory(),routes:[...oe,ae,le]});te.matcher=t.matcher}const J=v.defineStore("menu",()=>{const t=e.ref(E.get("menuList")||[]),l=e.computed(()=>t.value.length>0),o=a=>{t.value=a,E.set("menuList",a)},s=()=>{t.value=[],E.remove("menuList")},c=a=>a.filter(n=>!n.hidden).map(n=>{const h={path:n.path,name:n.name,meta:{title:n.title,icon:n.icon,keepAlive:n.keepAlive,hidden:n.hidden}};return n.redirect&&(h.redirect=n.redirect),n.component&&(h.component=()=>qe(Object.assign({}),`../views/${n.component}.vue`,3)),n.children&&n.children.length>0&&(h.children=c(n.children)),h});return{menuList:t,hasMenu:l,setMenuList:o,clearMenu:s,generateRoutes:c,addRoutes:a=>{c(a).forEach(h=>{te.addRoute("Layout",h)})}}}),G=v.defineStore("auth",()=>{const t=e.ref(ee()),l=e.computed(()=>ce()),o=e.ref(""),s=e.ref(""),c=e.ref(""),i=e.ref("/login");return{token:t,isLoggedIn:l,baseUrl:o,appId:s,clientId:c,loginPath:i,login:m=>{t.value=m.token,Ce(m)},logout:()=>{t.value=null,de()},setBaseUrl:m=>{o.value=m},setAppId:m=>{s.value=m},setClientId:m=>{c.value=m},setLoginPath:m=>{i.value=m}}}),Xe={class:"sidebar__logo"},Je={key:0,class:"sidebar__user"},Ge={class:"sidebar__user-info"},Qe={class:"sidebar__user-name"},Ze={class:"sidebar__user-role"},ve=e.defineComponent({__name:"Sidebar",setup(t){const l=R.useRoute(),o=R.useRouter(),s=J(),c=P(),i=G(),a=K(),n=e.computed(()=>a.isCollapsed),h=e.computed(()=>l.path),_=e.computed(()=>a.isDark?"#1d1e1f":"#fff"),N=e.computed(()=>a.isDark?"#cfd3dc":"#303133"),b=e.computed(()=>"#409eff"),m=p=>{p&&p!==l.path&&o.push(p)},C=()=>{i.logout(),c.clearUserInfo(),s.clearMenu(),o.push("/login")},S=p=>({dashboard:"dashboard",system:"system",user:"user",role:"role",menu:"list",setting:"setting"})[p||""]||"file";return(p,u)=>{var B;return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["sidebar",{"sidebar--collapsed":n.value}])},[e.createElementVNode("div",Xe,[u[0]||(u[0]=e.createElementVNode("img",{src:Ne,alt:"Logo",class:"sidebar__logo-img"},null,-1)),e.withDirectives(e.createElementVNode("span",{class:"sidebar__logo-text"},e.toDisplayString(e.unref(a).appName),513),[[e.vShow,!n.value]])]),e.createVNode(e.unref(q.Menu),{"default-active":h.value,mode:"vertical",collapse:n.value,"collapse-transition":!1,"background-color":_.value,"text-color":N.value,"active-text-color":b.value,class:"sidebar__menu",onSelect:m},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(s).menuList,$=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:$.path},[$.children&&$.children.length>0?(e.openBlock(),e.createBlock(e.unref(q.SubMenu),{key:0,index:$.path},{title:e.withCtx(()=>[e.createVNode(e.unref(y.Icon),{name:S($.icon),size:16},null,8,["name"]),e.createElementVNode("span",null,e.toDisplayString($.title),1)]),default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList($.children,z=>(e.openBlock(),e.createBlock(e.unref(q.MenuItem),{key:z.path,index:z.path},{default:e.withCtx(()=>[e.createVNode(e.unref(y.Icon),{name:S(z.icon),size:16},null,8,["name"]),e.createElementVNode("span",null,e.toDisplayString(z.title),1)]),_:2},1032,["index"]))),128))]),_:2},1032,["index"])):(e.openBlock(),e.createBlock(e.unref(q.MenuItem),{key:1,index:$.path},{default:e.withCtx(()=>[e.createVNode(e.unref(y.Icon),{name:S($.icon),size:16},null,8,["name"]),e.createElementVNode("span",null,e.toDisplayString($.title),1)]),_:2},1032,["index"]))],64))),128))]),_:1},8,["default-active","collapse","background-color","text-color","active-text-color"]),n.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Je,[e.createElementVNode("div",Ge,[e.createElementVNode("span",Qe,e.toDisplayString(e.unref(c).nickname),1),e.createElementVNode("span",Ze,e.toDisplayString((B=e.unref(c).roles)==null?void 0:B.join(", ")),1)]),e.createVNode(e.unref(y.Button),{type:"text",size:"small",onClick:C},{default:e.withCtx(()=>[...u[1]||(u[1]=[e.createTextVNode("退出",-1)])]),_:1})]))],2)}}}),F=(t,l)=>{const o=t.__vccOpts||t;for(const[s,c]of l)o[s]=c;return o},xe=F(ve,[["__scopeId","data-v-a7668285"]]),et={class:"header"},tt={class:"header__left"},nt={key:0,class:"header__breadcrumb"},ot={key:0,class:"breadcrumb-separator"},lt={class:"header__right"},at=["title"],rt={class:"header__avatar"},st={class:"header__user-name"},it={key:0,class:"header__dropdown"},dt={class:"header__dropdown-header"},ct={class:"header__dropdown-avatar"},mt={class:"header__dropdown-info"},pt={class:"header__dropdown-name"},ut={class:"header__dropdown-role"},ft={class:"header__dropdown-menu"},Vt={class:"search-container"},ht={class:"search-input-wrapper"},Nt={key:0,class:"search-results"},gt=["onClick"],_t={class:"search-result-info"},yt={class:"search-result-title"},Et={key:0,class:"search-result-parent"},kt={key:1,class:"search-empty"},Ct={class:"settings-drawer"},wt={class:"settings-section"},xt={class:"settings-layout-options"},St=["onClick"],Bt={class:"layout-option__preview"},bt={key:0,class:"layout-preview-sidebar"},Tt={key:1,class:"layout-preview-top"},Dt={key:2,class:"layout-preview-mix"},It={class:"layout-option__label"},Lt={class:"settings-section"},$t={class:"settings-color-options"},At=["title","onClick"],Ut={class:"settings-section"},Mt={class:"settings-switch-list"},Rt={class:"settings-switch-item"},zt={class:"settings-switch-item"},Se=F(e.defineComponent({__name:"Header",setup(t){const l=R.useRoute(),o=R.useRouter(),s=K(),c=P(),i=G(),a=J(),n=e.ref(!1),h=e.ref(!1),_=e.ref(null),N=e.ref(!1),b=e.ref(!1),m=e.ref(""),C=e.ref(null),S=e.ref(!1),p=[{value:"sidebar",label:"左侧菜单",icon:"sidebar-left"},{value:"top",label:"顶部菜单",icon:"menu"},{value:"mix",label:"混合菜单",icon:"grid"}],u=[{value:"#409eff",label:"默认蓝"},{value:"#1890ff",label:"科技蓝"},{value:"#52c41a",label:"极光绿"},{value:"#faad14",label:"日落橙"},{value:"#f5222d",label:"薄暮红"},{value:"#722ed1",label:"酱紫"}],B=e.computed(()=>l.matched.filter(g=>g.meta&&g.meta.title).map(g=>({title:g.meta.title,path:g.path}))),$=(I,g="")=>{const Y=[];return I.forEach(w=>{w.children&&w.children.length>0?Y.push(...$(w.children,w.title)):Y.push({...w,parentTitle:g})}),Y},z=e.computed(()=>m.value.trim()?$(a.menuList).filter(g=>g.title.toLowerCase().includes(m.value.toLowerCase())):[]),U=e.computed(()=>s.layout),f=()=>{s.toggleCollapse()},d=()=>{s.toggleTheme()},k=()=>{h.value=!0},O=I=>{s.setLayout(I)},ue=I=>{S.value=I;const g=document.documentElement;I?g.classList.add("grey-mode"):g.classList.remove("grey-mode")},fe=()=>{document.fullscreenElement?document.exitFullscreen():document.documentElement.requestFullscreen()},T=()=>{N.value=!!document.fullscreenElement},ne=()=>{n.value=!n.value},Z=()=>{n.value=!1},Re=()=>{b.value=!0},Ve=()=>{b.value=!1,m.value=""},ze=I=>{o.push(I),Ve()},xo=I=>{s.setPrimaryColor(I)},So=()=>{Z(),o.push("/profile")},Bo=()=>{Z(),o.push("/change-password")},bo=()=>{Z(),i.logout(),c.clearUserInfo(),a.clearMenu(),o.push("/login")},Fe=I=>{_.value&&!_.value.contains(I.target)&&Z(),C.value&&!C.value.contains(I.target)&&Ve()},Pe=I=>{I.key==="Escape"&&(Ve(),Z()),(I.ctrlKey||I.metaKey)&&I.key==="k"&&(I.preventDefault(),Re())};return e.onMounted(()=>{document.addEventListener("click",Fe),document.addEventListener("fullscreenchange",T),document.addEventListener("keydown",Pe),s.initTheme(),S.value=document.documentElement.classList.contains("grey-mode")}),e.onUnmounted(()=>{document.removeEventListener("click",Fe),document.removeEventListener("fullscreenchange",T),document.removeEventListener("keydown",Pe)}),(I,g)=>{var Y;return e.openBlock(),e.createElementBlock("div",et,[e.createElementVNode("div",tt,[e.createElementVNode("div",{class:"header__collapse",onClick:f},[e.createVNode(e.unref(y.Icon),{name:e.unref(s).isCollapsed?"menu-unfold":"menu-fold",size:18},null,8,["name"])]),e.unref(s).showBreadcrumb?(e.openBlock(),e.createElementBlock("div",nt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(B.value,(w,j)=>(e.openBlock(),e.createElementBlock("span",{key:w.path},[j>0?(e.openBlock(),e.createElementBlock("span",ot,"/")):e.createCommentVNode("",!0),e.createElementVNode("span",{class:e.normalizeClass({"is-current":j===B.value.length-1})},e.toDisplayString(w.title),3)]))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",lt,[e.createElementVNode("div",{class:"header__action",onClick:Re,title:"搜索 (Ctrl+K)"},[e.createVNode(e.unref(y.Icon),{name:"search",size:16})]),e.createElementVNode("div",{class:"header__action",onClick:fe,title:N.value?"退出全屏":"全屏"},[e.createVNode(e.unref(y.Icon),{name:N.value?"fullscreen-exit":"fullscreen",size:16},null,8,["name"])],8,at),e.createElementVNode("div",{class:"header__action",onClick:k,title:"换肤设置"},[e.createVNode(e.unref(y.Icon),{name:"setting",size:16})]),e.createElementVNode("div",{class:"header__action",onClick:d,title:"切换主题"},[e.createVNode(e.unref(y.Icon),{name:e.unref(s).isDark?"sun":"moon",size:16},null,8,["name"])]),e.createElementVNode("div",{class:"header__user",ref_key:"dropdownRef",ref:_},[e.createElementVNode("div",{class:"header__user-trigger",onClick:e.withModifiers(ne,["stop"])},[e.createElementVNode("div",rt,[e.createElementVNode("span",null,e.toDisplayString(((Y=e.unref(c).nickname)==null?void 0:Y.charAt(0))||"U"),1)]),e.createElementVNode("span",st,e.toDisplayString(e.unref(c).nickname),1),e.createElementVNode("span",{class:e.normalizeClass(["header__user-arrow",{"is-active":n.value}])},"▼",2)]),e.createVNode(e.Transition,{name:"dropdown"},{default:e.withCtx(()=>{var w,j;return[n.value?(e.openBlock(),e.createElementBlock("div",it,[e.createElementVNode("div",dt,[e.createElementVNode("div",ct,[e.createElementVNode("span",null,e.toDisplayString(((w=e.unref(c).nickname)==null?void 0:w.charAt(0))||"U"),1)]),e.createElementVNode("div",mt,[e.createElementVNode("div",pt,e.toDisplayString(e.unref(c).nickname),1),e.createElementVNode("div",ut,e.toDisplayString((j=e.unref(c).roles)==null?void 0:j.join(", ")),1)])]),g[8]||(g[8]=e.createElementVNode("div",{class:"header__dropdown-divider"},null,-1)),e.createElementVNode("div",ft,[e.createElementVNode("div",{class:"header__dropdown-item",onClick:So},[e.createVNode(e.unref(y.Icon),{name:"user",size:16}),g[4]||(g[4]=e.createElementVNode("span",null,"个人信息",-1))]),e.createElementVNode("div",{class:"header__dropdown-item",onClick:Bo},[e.createVNode(e.unref(y.Icon),{name:"lock",size:16}),g[5]||(g[5]=e.createElementVNode("span",null,"修改密码",-1))]),g[7]||(g[7]=e.createElementVNode("div",{class:"header__dropdown-divider"},null,-1)),e.createElementVNode("div",{class:"header__dropdown-item header__dropdown-item--danger",onClick:bo},[e.createVNode(e.unref(y.Icon),{name:"logout",size:16}),g[6]||(g[6]=e.createElementVNode("span",null,"退出登录",-1))])])])):e.createCommentVNode("",!0)]}),_:1})],512)]),e.createVNode(e.Transition,{name:"search"},{default:e.withCtx(()=>[b.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"header__search-modal",ref_key:"searchRef",ref:C},[e.createElementVNode("div",Vt,[e.createElementVNode("div",ht,[e.createVNode(e.unref(y.Icon),{class:"search-icon",name:"search",size:20}),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":g[0]||(g[0]=w=>m.value=w),type:"text",class:"search-input",placeholder:"搜索菜单...",autofocus:"",onKeyup:g[1]||(g[1]=e.withKeys(w=>z.value[0]&&ze(z.value[0].path),["enter"]))},null,544),[[e.vModelText,m.value]]),g[9]||(g[9]=e.createElementVNode("span",{class:"search-shortcut"},"ESC 关闭",-1))]),z.value.length>0?(e.openBlock(),e.createElementBlock("div",Nt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(z.value,(w,j)=>(e.openBlock(),e.createElementBlock("div",{key:w.path,class:e.normalizeClass(["search-result-item",{"is-first":j===0}]),onClick:Ko=>ze(w.path)},[e.createVNode(e.unref(y.Icon),{class:"search-result-icon",name:w.icon||"file",size:20},null,8,["name"]),e.createElementVNode("div",_t,[e.createElementVNode("span",yt,e.toDisplayString(w.title),1),w.parentTitle?(e.openBlock(),e.createElementBlock("span",Et,e.toDisplayString(w.parentTitle),1)):e.createCommentVNode("",!0)])],10,gt))),128))])):m.value?(e.openBlock(),e.createElementBlock("div",kt," 未找到匹配的菜单 ")):e.createCommentVNode("",!0)])],512)):e.createCommentVNode("",!0)]),_:1}),e.createVNode(e.unref(A.Drawer),{modelValue:h.value,"onUpdate:modelValue":g[3]||(g[3]=w=>h.value=w),title:"换肤设置",direction:"rtl",size:"320px"},{default:e.withCtx(()=>[e.createElementVNode("div",Ct,[e.createElementVNode("div",wt,[g[13]||(g[13]=e.createElementVNode("div",{class:"settings-title"},"布局模式",-1)),e.createElementVNode("div",xt,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(p,w=>e.createElementVNode("div",{key:w.value,class:e.normalizeClass(["layout-option",{"is-active":U.value===w.value}]),onClick:j=>O(w.value)},[e.createElementVNode("div",Bt,[w.value==="sidebar"?(e.openBlock(),e.createElementBlock("div",bt,[...g[10]||(g[10]=[e.createElementVNode("div",{class:"preview-aside"},null,-1),e.createElementVNode("div",{class:"preview-main"},[e.createElementVNode("div",{class:"preview-header"}),e.createElementVNode("div",{class:"preview-content"})],-1)])])):w.value==="top"?(e.openBlock(),e.createElementBlock("div",Tt,[...g[11]||(g[11]=[e.createElementVNode("div",{class:"preview-header-full"},null,-1),e.createElementVNode("div",{class:"preview-content-full"},null,-1)])])):(e.openBlock(),e.createElementBlock("div",Dt,[...g[12]||(g[12]=[e.createElementVNode("div",{class:"preview-header-mix"},[e.createElementVNode("div",{class:"preview-mix-left"})],-1),e.createElementVNode("div",{class:"preview-mix-body"},[e.createElementVNode("div",{class:"preview-mix-aside"}),e.createElementVNode("div",{class:"preview-mix-content"})],-1)])]))]),e.createElementVNode("span",It,e.toDisplayString(w.label),1)],10,St)),64))])]),e.createElementVNode("div",Lt,[g[14]||(g[14]=e.createElementVNode("div",{class:"settings-title"},"主题色",-1)),e.createElementVNode("div",$t,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(u,w=>e.createElementVNode("div",{key:w.value,class:e.normalizeClass(["color-option",{"is-active":e.unref(s).primaryColor===w.value}]),style:e.normalizeStyle({backgroundColor:w.value}),title:w.label,onClick:j=>xo(w.value)},[e.unref(s).primaryColor===w.value?(e.openBlock(),e.createBlock(e.unref(y.Icon),{key:0,name:"check",size:12,color:"#fff"})):e.createCommentVNode("",!0)],14,At)),64))])]),e.createElementVNode("div",Ut,[g[19]||(g[19]=e.createElementVNode("div",{class:"settings-title"},"功能设置",-1)),e.createElementVNode("div",Mt,[e.createElementVNode("div",Rt,[g[16]||(g[16]=e.createElementVNode("span",null,"灰色模式",-1)),e.createElementVNode("div",{class:e.normalizeClass(["switch-wrapper",{"is-checked":S.value}]),onClick:g[2]||(g[2]=w=>ue(!S.value))},[...g[15]||(g[15]=[e.createElementVNode("span",{class:"switch-core"},null,-1)])],2)]),e.createElementVNode("div",zt,[g[18]||(g[18]=e.createElementVNode("span",null,"暗黑模式",-1)),e.createElementVNode("div",{class:e.normalizeClass(["switch-wrapper",{"is-checked":e.unref(s).isDark}]),onClick:d},[...g[17]||(g[17]=[e.createElementVNode("span",{class:"switch-core"},null,-1)])],2)])])])])]),_:1},8,["modelValue"])])}}}),[["__scopeId","data-v-015c45c9"]]),Ft={class:"layout"},Pt={class:"layout__main"},Ot={class:"layout__header"},jt={class:"layout__content"},me=F(e.defineComponent({__name:"index",setup(t){const l=K(),o=e.computed(()=>l.isCollapsed?"64px":"210px");return(s,c)=>{const i=e.resolveComponent("router-view");return e.openBlock(),e.createElementBlock("div",Ft,[e.createElementVNode("aside",{class:"layout__aside",style:e.normalizeStyle({width:o.value})},[e.createVNode(xe)],4),e.createElementVNode("div",Pt,[e.createElementVNode("header",Ot,[e.createVNode(Se)]),e.createElementVNode("main",jt,[e.createVNode(i)])])])}}}),[["__scopeId","data-v-a3110011"]]),qt=Object.freeze(Object.defineProperty({__proto__:null,default:me},Symbol.toStringTag,{value:"Module"})),Kt={class:"tabs-wrapper"},Yt={class:"tab-label"},Ht=["onClick"],Wt=F(e.defineComponent({__name:"Tabs",setup(t){const l=R.useRoute(),o=R.useRouter(),s=e.computed(()=>{const n=[];return l.matched.forEach(h=>{var _;(_=h.meta)!=null&&_.affix&&n.push({name:h.name,title:h.meta.title,path:h.path,affix:!0})}),n}),c=e.computed(()=>l.path),i=n=>{o.push(n)},a=n=>{const h=s.value.find(_=>_.path===n);if(!(h!=null&&h.affix)&&n===c.value){const _=s.value.findIndex(b=>b.path===n),N=s.value[_-1]||s.value[_+1];N&&o.push(N.path)}};return(n,h)=>(e.openBlock(),e.createElementBlock("div",Kt,[e.createVNode(e.unref(q.Tabs),{modelValue:c.value,"onUpdate:modelValue":h[0]||(h[0]=_=>c.value=_),type:"card",onTabClick:i},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,_=>(e.openBlock(),e.createBlock(e.unref(q.TabPane),{key:_.path,name:_.path,label:_.title,closable:!_.affix},{label:e.withCtx(()=>[e.createElementVNode("span",Yt,[e.createTextVNode(e.toDisplayString(_.title)+" ",1),_.affix?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",{key:0,class:"tab-close",onClick:e.withModifiers(N=>a(_.path),["stop"])}," ✕ ",8,Ht))])]),_:2},1032,["name","label","closable"]))),128))]),_:1},8,["modelValue"])]))}}),[["__scopeId","data-v-9156d8cd"]]),Xt={},Jt={class:"footer"};function Gt(t,l){return e.openBlock(),e.createElementBlock("div",Jt,[...l[0]||(l[0]=[e.createElementVNode("span",null,"Copyright © 2024 Xto Demo. All Rights Reserved.",-1)])])}const Qt=F(Xt,[["render",Gt],["__scopeId","data-v-4852826a"]]),Zt={class:"login"},vt={class:"login__container"},Be=F(e.defineComponent({__name:"index",setup(t){const l=R.useRouter(),o=G(),s=P(),c=J(),i=e.ref(!1),a=e.ref(!1),n=e.reactive({username:"admin",password:"123456"}),h={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"},{min:6,message:"密码长度至少6位",trigger:"blur"}]},_=e.ref(),N=async()=>{var b;try{await((b=_.value)==null?void 0:b.validate()),i.value=!0,setTimeout(()=>{o.login({token:"mock_token_"+Date.now(),refreshToken:"mock_refresh_token",expireTime:Date.now()+7*24*60*60*1e3}),s.setUserInfo({id:1,username:n.username,nickname:"管理员",avatar:"",email:"admin@example.com",phone:"13800138000",status:1,roles:["admin"],permissions:["*"],createTime:new Date().toISOString()}),c.setMenuList([{id:1,name:"Dashboard",path:"/dashboard",component:"dashboard/index",icon:"dashboard",title:"仪表盘",keepAlive:!0,affix:!0},{id:2,name:"System",path:"/system",redirect:"/system/user",icon:"setting",title:"系统管理",children:[{id:21,name:"SystemUser",path:"/system/user",component:"system/user/index",icon:"user",title:"用户管理",keepAlive:!0},{id:22,name:"SystemRole",path:"/system/role",component:"system/role/index",icon:"role",title:"角色管理",keepAlive:!0},{id:23,name:"SystemMenu",path:"/system/menu",component:"system/menu/index",icon:"menu",title:"菜单管理",keepAlive:!0}]}]),A.Message.success("登录成功"),l.push("/"),i.value=!1},1e3)}catch{i.value=!1}};return(b,m)=>(e.openBlock(),e.createElementBlock("div",Zt,[e.createElementVNode("div",vt,[m[5]||(m[5]=e.createElementVNode("div",{class:"login__header"},[e.createElementVNode("img",{src:Ne,alt:"Logo",class:"login__logo"}),e.createElementVNode("h1",{class:"login__title"},"Xto Demo"),e.createElementVNode("p",{class:"login__subtitle"},"后台管理系统")],-1)),e.createVNode(e.unref(V.Form),{ref_key:"formRef",ref:_,model:n,rules:h,class:"login__form","label-width":"0"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.FormItem),{prop:"username"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:n.username,"onUpdate:modelValue":m[0]||(m[0]=C=>n.username=C),placeholder:"用户名","prefix-icon":"👤",size:"large"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{prop:"password"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:n.password,"onUpdate:modelValue":m[1]||(m[1]=C=>n.password=C),type:"password",placeholder:"密码","prefix-icon":"🔒",size:"large","show-password":"",onKeyup:e.withKeys(N,["enter"])},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(V.Checkbox),{modelValue:a.value,"onUpdate:modelValue":m[2]||(m[2]=C=>a.value=C)},{default:e.withCtx(()=>[...m[3]||(m[3]=[e.createTextVNode("记住我",-1)])]),_:1},8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(y.Button),{type:"primary",size:"large",loading:i.value,class:"login__submit",onClick:N},{default:e.withCtx(()=>[...m[4]||(m[4]=[e.createTextVNode(" 登录 ",-1)])]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"]),m[6]||(m[6]=e.createElementVNode("div",{class:"login__footer"},[e.createElementVNode("p",null,"提示: 任意用户名密码即可登录 (Mock 模式)")],-1))])]))}}),[["__scopeId","data-v-40e9f7eb"]]),en=Object.freeze(Object.defineProperty({__proto__:null,default:Be},Symbol.toStringTag,{value:"Module"})),tn={class:"error-page"},nn={class:"error-page__content"},be=F(e.defineComponent({__name:"404",setup(t){const l=R.useRouter(),o=()=>{l.push("/")};return(s,c)=>(e.openBlock(),e.createElementBlock("div",tn,[e.createElementVNode("div",nn,[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(y.Button),{type:"primary",onClick:o},{default:e.withCtx(()=>[...c[0]||(c[0]=[e.createTextVNode("返回首页",-1)])]),_:1})])]))}}),[["__scopeId","data-v-c3c12c24"]]),on=Object.freeze(Object.defineProperty({__proto__:null,default:be},Symbol.toStringTag,{value:"Module"})),ln={class:"error-page"},an={class:"error-page__content"},Te=F(e.defineComponent({__name:"403",setup(t){const l=R.useRouter(),o=()=>{l.push("/")};return(s,c)=>(e.openBlock(),e.createElementBlock("div",ln,[e.createElementVNode("div",an,[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(y.Button),{type:"primary",onClick:o},{default:e.withCtx(()=>[...c[0]||(c[0]=[e.createTextVNode("返回首页",-1)])]),_:1})])]))}}),[["__scopeId","data-v-dd5f2795"]]),rn=Object.freeze(Object.defineProperty({__proto__:null,default:Te},Symbol.toStringTag,{value:"Module"}));function sn(){const t=K(),l=P(),o=G(),s=e.computed(()=>l.nickname||l.username||""),c=e.computed(()=>l.userInfo),i=e.computed(()=>t.appName),a=e.computed(()=>o.isLoggedIn),n=e.computed(()=>t.isDark),h=e.computed(()=>t.theme),_=e.computed(()=>t.isCollapsed),N=e.computed(()=>t.layout);return{userName:s,userInfo:c,appName:i,isLoggedIn:a,isDark:n,theme:h,isCollapsed:_,layout:N,toggleTheme:()=>{t.toggleTheme()},toggleCollapse:()=>{t.toggleCollapse()}}}function dn(){const t=P(),l=i=>{const a=t.permissions;return a.includes("*")?!0:Array.isArray(i)?i.some(n=>a.includes(n)):a.includes(i)},o=i=>{const a=t.roles;return a.includes("admin")?!0:Array.isArray(i)?i.some(n=>a.includes(n)):a.includes(i)},s=e.computed(()=>t.roles.includes("admin")),c=e.computed(()=>t.isLoggedIn);return{hasPermission:l,hasRole:o,isAdmin:s,isLoggedIn:c}}function cn(t,l={}){const{rules:o,onSubmit:s}=l,c=e.ref(),i=e.reactive({...t}),a=e.ref(!1),n=e.ref(!1),h=e.ref(!1),_=()=>{m(),h.value=!1,n.value=!0},N=S=>{Object.assign(i,S),h.value=!0,n.value=!0},b=()=>{n.value=!1,m()},m=()=>{var S;Object.keys(t).forEach(p=>{i[p]=t[p]}),(S=c.value)==null||S.resetFields()};return{formRef:c,formData:i,rules:o,loading:a,visible:n,isEdit:h,openAdd:_,openEdit:N,close:b,resetForm:m,handleSubmit:async()=>{var S;try{await((S=c.value)==null?void 0:S.validate()),a.value=!0,await(s==null?void 0:s(i)),b()}catch(p){console.error(p)}finally{a.value=!1}}}}function mn(t){const{fetchData:l,defaultPageSize:o=10}=t,s=e.ref(!1),c=e.ref([]),i=e.ref(0),a=e.ref(1),n=e.ref(o),h=e.reactive({}),_=async()=>{s.value=!0;try{const u={...h,page:a.value,pageSize:n.value},B=await l(u);c.value=B.list,i.value=B.total}catch(u){console.error(u)}finally{s.value=!1}},N=()=>{a.value=1,_()},b=()=>{Object.keys(h).forEach(u=>{h[u]=void 0}),a.value=1,_()},m=u=>{a.value=u,_()},C=u=>{n.value=u,a.value=1,_()},S=()=>{_()},p=e.computed(()=>({current:a.value,pageSize:n.value,total:i.value}));return{loading:s,data:c,total:i,currentPage:a,pageSize:n,searchParams:h,pagination:p,getData:_,handleSearch:N,handleReset:b,handlePageChange:m,handleSizeChange:C,refresh:S}}function pn(t){const o=P().permissions;return Array.isArray(t)?t.some(s=>o.includes(s)):o.includes(t)}function De(t){const o=P().roles;return Array.isArray(t)?t.some(s=>o.includes(s)):o.includes(t)}function un(){return De("admin")}const Q=(()=>{const t=Oe.create({baseURL:void 0,timeout:3e4,headers:{"Content-Type":"application/json"}});return t.interceptors.request.use(l=>{const o=ee();return o&&(l.headers.Authorization=`Bearer ${o}`),l},l=>Promise.reject(l)),t.interceptors.response.use(l=>{const{data:o}=l;return o.code===200||o.code===0?o.data:(A.Message.error(o.message||"请求失败"),Promise.reject(new Error(o.message||"请求失败")))},l=>{var s;const{response:o}=l;if(o)switch(o.status){case 401:A.Message.error("登录已过期,请重新登录"),de(),window.location.href="/login";break;case 403:A.Message.error("没有权限访问");break;case 404:A.Message.error("请求资源不存在");break;case 500:A.Message.error("服务器错误");break;default:A.Message.error(((s=o.data)==null?void 0:s.message)||"请求失败")}else A.Message.error("网络连接失败");return Promise.reject(l)}),t})(),D={get(t,l){return Q.get(t,l)},post(t,l,o){return Q.post(t,l,o)},put(t,l,o){return Q.put(t,l,o)},patch(t,l,o){return Q.patch(t,l,o)},delete(t,l){return Q.delete(t,l)}};function fn(t,l={}){const o=l.indexPath||"/dashboard";return{path:"/",name:"Layout",component:me,redirect:o,children:t}}function Vn(t){return R.createRouter({history:R.createWebHistory(),routes:t,scrollBehavior:()=>({left:0,top:0})})}function hn(t){return D.post("/auth/login",t)}function Nn(){return D.post("/auth/logout")}function gn(){return D.get("/user/info")}function _n(t){return D.post("/auth/refresh",{refreshToken:t})}function yn(t){return D.get("/role/list",{params:t})}function En(t){return D.get(`/role/${t}`)}function kn(t){return D.post("/role",t)}function Cn(t,l){return D.put(`/role/${t}`,l)}function wn(t){return D.delete(`/role/${t}`)}function xn(t,l){return D.patch(`/role/${t}/status`,{status:l})}function Sn(){return D.get("/menu/list")}function Bn(){return D.get("/menu/tree")}function bn(t){return D.post("/menu",t)}function Tn(t,l){return D.put(`/menu/${t}`,l)}function Dn(t){return D.delete(`/menu/${t}`)}function In(t){return D.get("/user/list",{params:t})}function Ln(t){return D.get(`/user/${t}`)}function $n(t){return D.post("/user",t)}function An(t,l){return D.put(`/user/${t}`,l)}function Un(t){return D.delete(`/user/${t}`)}function Mn(t){return D.post("/user/batch-delete",{ids:t})}function Rn(t,l){return D.patch(`/user/${t}/status`,{status:l})}function zn(t){return D.post(`/user/${t}/reset-password`)}var x=(t=>(t[t.ENABLED=1]="ENABLED",t[t.DISABLED=0]="DISABLED",t))(x||{}),Ie=(t=>(t[t.UNKNOWN=0]="UNKNOWN",t[t.MALE=1]="MALE",t[t.FEMALE=2]="FEMALE",t))(Ie||{}),M=(t=>(t[t.DIRECTORY=0]="DIRECTORY",t[t.MENU=1]="MENU",t[t.BUTTON=2]="BUTTON",t))(M||{});const Fn={1:"启用",0:"禁用"},Pn={0:"未知",1:"男",2:"女"},On={0:"目录",1:"菜单",2:"按钮"},pe=[{label:"启用",value:1},{label:"禁用",value:0}],jn=[{label:"未知",value:0},{label:"男",value:1},{label:"女",value:2}],Le=[{label:"目录",value:0},{label:"菜单",value:1},{label:"按钮",value:2}],qn={mounted(t,l){var a;const o=P(),{value:s}=l;if(!s)return;const c=o.permissions;let i=!1;Array.isArray(s)?i=s.some(n=>c.includes(n)||c.includes("*")):i=c.includes(s)||c.includes("*"),i||(a=t.parentNode)==null||a.removeChild(t)}},Kn={class:"dashboard"},Yn={class:"dashboard__stats"},Hn={class:"stat-card__content"},Wn={class:"stat-card__info"},Xn={class:"stat-card__title"},Jn={class:"dashboard__main"},Gn={class:"quick-links"},Qn={class:"quick-link__icon"},Zn={class:"quick-link__title"},vn={class:"activity-list"},eo={class:"activity-item__action"},to={class:"activity-item__time"},no={class:"system-info"},oo={class:"system-info__item"},lo={class:"system-info__item"},$e=Object.freeze(Object.defineProperty({__proto__:null,default:F(e.defineComponent({__name:"index",setup(t){const l=e.ref([{title:"用户总数",value:1234,icon:"👥",color:"#409eff"},{title:"今日访问",value:567,icon:"👀",color:"#67c23a"},{title:"订单数量",value:890,icon:"📦",color:"#e6a23c"},{title:"销售金额",value:123456,icon:"💰",color:"#f56c6c"}]),o=e.ref([{user:"张三",action:"登录系统",time:"2分钟前",type:"success"},{user:"李四",action:"修改了用户信息",time:"5分钟前",type:"warning"},{user:"王五",action:"创建了新订单",time:"10分钟前",type:"info"},{user:"赵六",action:"删除了测试数据",time:"30分钟前",type:"danger"},{user:"钱七",action:"更新了系统配置",time:"1小时前",type:"primary"}]),s=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 a=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock("div",Kn,[e.createElementVNode("div",Yn,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,n=>(e.openBlock(),e.createBlock(e.unref(L.Card),{key:n.title,class:"stat-card"},{default:e.withCtx(()=>[e.createElementVNode("div",Hn,[e.createElementVNode("div",{class:"stat-card__icon",style:e.normalizeStyle({backgroundColor:n.color+"20"})},e.toDisplayString(n.icon),5),e.createElementVNode("div",Wn,[e.createElementVNode("div",Xn,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",Jn,[e.createVNode(e.unref(L.Card),{class:"dashboard__quick"},{header:e.withCtx(()=>[...i[0]||(i[0]=[e.createElementVNode("span",{class:"card-title"},"快捷入口",-1)])]),default:e.withCtx(()=>[e.createElementVNode("div",Gn,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,n=>(e.openBlock(),e.createBlock(a,{key:n.path,to:n.path,class:"quick-link"},{default:e.withCtx(()=>[e.createElementVNode("span",Qn,e.toDisplayString(n.icon),1),e.createElementVNode("span",Zn,e.toDisplayString(n.title),1)]),_:2},1032,["to"]))),128))])]),_:1}),e.createVNode(e.unref(L.Card),{class:"dashboard__activity"},{header:e.withCtx(()=>[...i[1]||(i[1]=[e.createElementVNode("span",{class:"card-title"},"最近活动",-1)])]),default:e.withCtx(()=>[e.createElementVNode("div",vn,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,(n,h)=>(e.openBlock(),e.createElementBlock("div",{key:h,class:"activity-item"},[e.createVNode(e.unref(L.Tag),{type:n.type,size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(n.user),1)]),_:2},1032,["type"]),e.createElementVNode("span",eo,e.toDisplayString(n.action),1),e.createElementVNode("span",to,e.toDisplayString(n.time),1)]))),128))])]),_:1})]),e.createVNode(e.unref(L.Card),{class:"dashboard__system"},{header:e.withCtx(()=>[...i[2]||(i[2]=[e.createElementVNode("span",{class:"card-title"},"系统信息",-1)])]),default:e.withCtx(()=>[e.createElementVNode("div",no,[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",oo,[i[3]||(i[3]=e.createElementVNode("span",{class:"system-info__label"},"服务器状态",-1)),e.createVNode(e.unref(L.Progress),{percentage:75,status:"success"})]),e.createElementVNode("div",lo,[i[4]||(i[4]=e.createElementVNode("span",{class:"system-info__label"},"内存使用",-1)),e.createVNode(e.unref(L.Progress),{percentage:45})])])]),_:1})])}}}),[["__scopeId","data-v-44648cb1"]])},Symbol.toStringTag,{value:"Module"})),ao={class:"user-page"},ro={class:"toolbar"},so={class:"data-table"},io={key:0},co={key:1},mo={class:"pagination-wrapper"},Ae=Object.freeze(Object.defineProperty({__proto__:null,default:F(e.defineComponent({__name:"index",setup(t){const l=[{id:1,username:"admin",nickname:"管理员",email:"admin@example.com",phone:"13800138001",status:x.ENABLED,roles:["admin"],createTime:"2024-01-01 10:00:00"},{id:2,username:"zhangsan",nickname:"张三",email:"zhangsan@example.com",phone:"13800138002",status:x.ENABLED,roles:["editor"],createTime:"2024-01-02 10:00:00"},{id:3,username:"lisi",nickname:"李四",email:"lisi@example.com",phone:"13800138003",status:x.DISABLED,roles:["viewer"],createTime:"2024-01-03 10:00:00"},{id:4,username:"wangwu",nickname:"王五",email:"wangwu@example.com",phone:"13800138004",status:x.ENABLED,roles:["editor"],createTime:"2024-01-04 10:00:00"},{id:5,username:"zhaoliu",nickname:"赵六",email:"zhaoliu@example.com",phone:"13800138005",status:x.ENABLED,roles:["viewer"],createTime:"2024-01-05 10:00:00"}],o=e.ref(!1),s=e.ref([]),c=e.ref(0),i=e.ref(1),a=e.ref(10),n=e.reactive({keyword:"",status:void 0}),h=e.ref(!1),_=e.computed(()=>N.id?"编辑用户":"新增用户"),N=e.reactive({id:0,username:"",nickname:"",email:"",phone:"",status:x.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"}]},m=e.ref(),C=()=>{o.value=!0,setTimeout(()=>{let f=[...l];n.keyword&&(f=f.filter(d=>d.username.includes(n.keyword)||d.nickname.includes(n.keyword))),n.status!==void 0&&(f=f.filter(d=>d.status===n.status)),c.value=f.length,s.value=f.slice((i.value-1)*a.value,i.value*a.value),o.value=!1},300)},S=()=>{i.value=1,C()},p=()=>{n.keyword="",n.status=void 0,i.value=1,C()},u=()=>{Object.assign(N,{id:0,username:"",nickname:"",email:"",phone:"",status:x.ENABLED,roles:[]}),h.value=!0},B=f=>{Object.assign(N,f),h.value=!0},$=f=>{A.Message.success("删除成功"),C()},z=async()=>{var f;try{await((f=m.value)==null?void 0:f.validate()),A.Message.success(N.id?"编辑成功":"新增成功"),h.value=!1,C()}catch(d){console.error(d)}},U=f=>{A.Message.success(`已${f.status===x.ENABLED?"启用":"禁用"}用户 ${f.username}`)};return e.onMounted(()=>{C()}),(f,d)=>(e.openBlock(),e.createElementBlock("div",ao,[e.createVNode(e.unref(L.Card),{class:"search-card"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Form),{model:n,inline:""},{default:e.withCtx(()=>[e.createVNode(e.unref(V.FormItem),{label:"关键词"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:n.keyword,"onUpdate:modelValue":d[0]||(d[0]=k=>n.keyword=k),placeholder:"用户名/昵称",clearable:"",onKeyup:e.withKeys(S,["enter"])},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"状态"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Select),{modelValue:n.status,"onUpdate:modelValue":d[1]||(d[1]=k=>n.status=k),options:e.unref(pe),placeholder:"请选择",clearable:""},null,8,["modelValue","options"])]),_:1}),e.createVNode(e.unref(V.FormItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(y.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(y.Button),{type:"primary",onClick:S},{default:e.withCtx(()=>[...d[11]||(d[11]=[e.createTextVNode("搜索",-1)])]),_:1}),e.createVNode(e.unref(y.Button),{onClick:p},{default:e.withCtx(()=>[...d[12]||(d[12]=[e.createTextVNode("重置",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["model"])]),_:1}),e.createVNode(e.unref(L.Card),{class:"table-card"},{default:e.withCtx(()=>[e.createElementVNode("div",ro,[e.createVNode(e.unref(y.Button),{type:"primary",onClick:u},{default:e.withCtx(()=>[...d[13]||(d[13]=[e.createTextVNode("新增用户",-1)])]),_:1})]),e.createElementVNode("table",so,[d[18]||(d[18]=e.createElementVNode("thead",null,[e.createElementVNode("tr",null,[e.createElementVNode("th",null,"ID"),e.createElementVNode("th",null,"用户名"),e.createElementVNode("th",null,"昵称"),e.createElementVNode("th",null,"邮箱"),e.createElementVNode("th",null,"手机号"),e.createElementVNode("th",null,"角色"),e.createElementVNode("th",null,"状态"),e.createElementVNode("th",null,"创建时间"),e.createElementVNode("th",null,"操作")])],-1)),e.createElementVNode("tbody",null,[o.value?(e.openBlock(),e.createElementBlock("tr",io,[...d[14]||(d[14]=[e.createElementVNode("td",{colspan:"9",class:"loading-cell"},"加载中...",-1)])])):s.value.length===0?(e.openBlock(),e.createElementBlock("tr",co,[...d[15]||(d[15]=[e.createElementVNode("td",{colspan:"9",class:"empty-cell"},"暂无数据",-1)])])):(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:2},e.renderList(s.value,k=>(e.openBlock(),e.createElementBlock("tr",{key:k.id},[e.createElementVNode("td",null,e.toDisplayString(k.id),1),e.createElementVNode("td",null,e.toDisplayString(k.username),1),e.createElementVNode("td",null,e.toDisplayString(k.nickname),1),e.createElementVNode("td",null,e.toDisplayString(k.email),1),e.createElementVNode("td",null,e.toDisplayString(k.phone),1),e.createElementVNode("td",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(k.roles,O=>(e.openBlock(),e.createBlock(e.unref(L.Tag),{key:O,size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(O),1)]),_:2},1024))),128))]),e.createElementVNode("td",null,[e.createVNode(e.unref(V.Switch),{"model-value":k.status===e.unref(x).ENABLED,"onUpdate:modelValue":O=>{k.status=O?e.unref(x).ENABLED:e.unref(x).DISABLED,U(k)}},null,8,["model-value","onUpdate:modelValue"])]),e.createElementVNode("td",null,e.toDisplayString(k.createTime),1),e.createElementVNode("td",null,[e.createVNode(e.unref(y.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(y.Button),{type:"primary",link:"",size:"small",onClick:O=>B(k)},{default:e.withCtx(()=>[...d[16]||(d[16]=[e.createTextVNode("编辑",-1)])]),_:1},8,["onClick"]),e.createVNode(e.unref(A.Popconfirm),{title:"确定删除该用户吗?",onConfirm:O=>$(k.id)},{default:e.withCtx(()=>[e.createVNode(e.unref(y.Button),{type:"danger",link:"",size:"small"},{default:e.withCtx(()=>[...d[17]||(d[17]=[e.createTextVNode("删除",-1)])]),_:1})]),_:1},8,["onConfirm"])]),_:2},1024)])]))),128))])]),e.createElementVNode("div",mo,[e.createVNode(e.unref(L.Pagination),{"current-page":i.value,"onUpdate:currentPage":d[2]||(d[2]=k=>i.value=k),"page-size":a.value,"onUpdate:pageSize":d[3]||(d[3]=k=>a.value=k),total:c.value,"page-sizes":[10,20,50,100],layout:"total, sizes, prev, pager, next",onCurrentChange:C,onSizeChange:C},null,8,["current-page","page-size","total"])])]),_:1}),e.createVNode(e.unref(A.Modal),{modelValue:h.value,"onUpdate:modelValue":d[10]||(d[10]=k=>h.value=k),title:_.value,width:"500px"},{footer:e.withCtx(()=>[e.createVNode(e.unref(y.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(y.Button),{onClick:d[9]||(d[9]=k=>h.value=!1)},{default:e.withCtx(()=>[...d[19]||(d[19]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(e.unref(y.Button),{type:"primary",onClick:z},{default:e.withCtx(()=>[...d[20]||(d[20]=[e.createTextVNode("确定",-1)])]),_:1})]),_:1})]),default:e.withCtx(()=>[e.createVNode(e.unref(V.Form),{ref_key:"formRef",ref:m,model:N,rules:b,"label-width":"80px"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.FormItem),{label:"用户名",prop:"username"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:N.username,"onUpdate:modelValue":d[4]||(d[4]=k=>N.username=k),placeholder:"请输入用户名"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"昵称",prop:"nickname"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:N.nickname,"onUpdate:modelValue":d[5]||(d[5]=k=>N.nickname=k),placeholder:"请输入昵称"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"邮箱",prop:"email"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:N.email,"onUpdate:modelValue":d[6]||(d[6]=k=>N.email=k),placeholder:"请输入邮箱"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"手机号",prop:"phone"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:N.phone,"onUpdate:modelValue":d[7]||(d[7]=k=>N.phone=k),placeholder:"请输入手机号"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"状态"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Switch),{modelValue:N.status,"onUpdate:modelValue":d[8]||(d[8]=k=>N.status=k),"active-value":e.unref(x).ENABLED,"inactive-value":e.unref(x).DISABLED},null,8,["modelValue","active-value","inactive-value"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])]))}}),[["__scopeId","data-v-d2491ae0"]])},Symbol.toStringTag,{value:"Module"})),po={class:"role-page"},uo={class:"toolbar"},fo={class:"data-table"},Vo={key:0},ho={key:1},No={class:"pagination-wrapper"},Ue=Object.freeze(Object.defineProperty({__proto__:null,default:F(e.defineComponent({__name:"index",setup(t){const l=[{id:1,name:"超级管理员",code:"admin",description:"拥有所有权限",status:x.ENABLED,permissions:["*"],createTime:"2024-01-01 10:00:00"},{id:2,name:"编辑",code:"editor",description:"内容编辑权限",status:x.ENABLED,permissions:["user:read","user:write"],createTime:"2024-01-02 10:00:00"},{id:3,name:"访客",code:"viewer",description:"只读权限",status:x.ENABLED,permissions:["user:read"],createTime:"2024-01-03 10:00:00"}],o=e.ref(!1),s=e.ref([]),c=e.ref(0),i=e.ref(1),a=e.ref(10),n=e.reactive({keyword:"",status:void 0}),h=e.ref(!1),_=e.computed(()=>N.id?"编辑角色":"新增角色"),N=e.reactive({id:0,name:"",code:"",description:"",status:x.ENABLED,permissions:[]}),b={name:[{required:!0,message:"请输入角色名称",trigger:"blur"}],code:[{required:!0,message:"请输入角色编码",trigger:"blur"}]},m=e.ref(),C=()=>{o.value=!0,setTimeout(()=>{let U=[...l];n.keyword&&(U=U.filter(f=>f.name.includes(n.keyword)||f.code.includes(n.keyword))),n.status!==void 0&&(U=U.filter(f=>f.status===n.status)),c.value=U.length,s.value=U.slice((i.value-1)*a.value,i.value*a.value),o.value=!1},300)},S=()=>{i.value=1,C()},p=()=>{n.keyword="",n.status=void 0,i.value=1,C()},u=()=>{Object.assign(N,{id:0,name:"",code:"",description:"",status:x.ENABLED,permissions:[]}),h.value=!0},B=U=>{Object.assign(N,U),h.value=!0},$=U=>{A.Message.success("删除成功"),C()},z=async()=>{var U;try{await((U=m.value)==null?void 0:U.validate()),A.Message.success(N.id?"编辑成功":"新增成功"),h.value=!1,C()}catch(f){console.error(f)}};return e.onMounted(()=>{C()}),(U,f)=>(e.openBlock(),e.createElementBlock("div",po,[e.createVNode(e.unref(L.Card),{class:"search-card"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Form),{model:n,inline:""},{default:e.withCtx(()=>[e.createVNode(e.unref(V.FormItem),{label:"关键词"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:n.keyword,"onUpdate:modelValue":f[0]||(f[0]=d=>n.keyword=d),placeholder:"角色名称/编码",clearable:"",onKeyup:e.withKeys(S,["enter"])},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"状态"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Select),{modelValue:n.status,"onUpdate:modelValue":f[1]||(f[1]=d=>n.status=d),options:e.unref(pe),placeholder:"请选择",clearable:""},null,8,["modelValue","options"])]),_:1}),e.createVNode(e.unref(V.FormItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(y.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(y.Button),{type:"primary",onClick:S},{default:e.withCtx(()=>[...f[10]||(f[10]=[e.createTextVNode("搜索",-1)])]),_:1}),e.createVNode(e.unref(y.Button),{onClick:p},{default:e.withCtx(()=>[...f[11]||(f[11]=[e.createTextVNode("重置",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["model"])]),_:1}),e.createVNode(e.unref(L.Card),{class:"table-card"},{default:e.withCtx(()=>[e.createElementVNode("div",uo,[e.createVNode(e.unref(y.Button),{type:"primary",onClick:u},{default:e.withCtx(()=>[...f[12]||(f[12]=[e.createTextVNode("新增角色",-1)])]),_:1})]),e.createElementVNode("table",fo,[f[17]||(f[17]=e.createElementVNode("thead",null,[e.createElementVNode("tr",null,[e.createElementVNode("th",null,"ID"),e.createElementVNode("th",null,"角色名称"),e.createElementVNode("th",null,"角色编码"),e.createElementVNode("th",null,"描述"),e.createElementVNode("th",null,"状态"),e.createElementVNode("th",null,"创建时间"),e.createElementVNode("th",null,"操作")])],-1)),e.createElementVNode("tbody",null,[o.value?(e.openBlock(),e.createElementBlock("tr",Vo,[...f[13]||(f[13]=[e.createElementVNode("td",{colspan:"7",class:"loading-cell"},"加载中...",-1)])])):s.value.length===0?(e.openBlock(),e.createElementBlock("tr",ho,[...f[14]||(f[14]=[e.createElementVNode("td",{colspan:"7",class:"empty-cell"},"暂无数据",-1)])])):(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:2},e.renderList(s.value,d=>(e.openBlock(),e.createElementBlock("tr",{key:d.id},[e.createElementVNode("td",null,e.toDisplayString(d.id),1),e.createElementVNode("td",null,e.toDisplayString(d.name),1),e.createElementVNode("td",null,[e.createVNode(e.unref(L.Tag),{type:"primary",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(d.code),1)]),_:2},1024)]),e.createElementVNode("td",null,e.toDisplayString(d.description),1),e.createElementVNode("td",null,[e.createVNode(e.unref(L.Tag),{type:d.status===e.unref(x).ENABLED?"success":"danger",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(d.status===e.unref(x).ENABLED?"启用":"禁用"),1)]),_:2},1032,["type"])]),e.createElementVNode("td",null,e.toDisplayString(d.createTime),1),e.createElementVNode("td",null,[e.createVNode(e.unref(y.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(y.Button),{type:"primary",link:"",size:"small",onClick:k=>B(d)},{default:e.withCtx(()=>[...f[15]||(f[15]=[e.createTextVNode("编辑",-1)])]),_:1},8,["onClick"]),e.createVNode(e.unref(A.Popconfirm),{title:"确定删除该角色吗?",onConfirm:k=>$(d.id)},{default:e.withCtx(()=>[e.createVNode(e.unref(y.Button),{type:"danger",link:"",size:"small"},{default:e.withCtx(()=>[...f[16]||(f[16]=[e.createTextVNode("删除",-1)])]),_:1})]),_:1},8,["onConfirm"])]),_:2},1024)])]))),128))])]),e.createElementVNode("div",No,[e.createVNode(e.unref(L.Pagination),{"current-page":i.value,"onUpdate:currentPage":f[2]||(f[2]=d=>i.value=d),"page-size":a.value,"onUpdate:pageSize":f[3]||(f[3]=d=>a.value=d),total:c.value,"page-sizes":[10,20,50,100],layout:"total, sizes, prev, pager, next",onCurrentChange:C,onSizeChange:C},null,8,["current-page","page-size","total"])])]),_:1}),e.createVNode(e.unref(A.Modal),{modelValue:h.value,"onUpdate:modelValue":f[9]||(f[9]=d=>h.value=d),title:_.value,width:"500px"},{footer:e.withCtx(()=>[e.createVNode(e.unref(y.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(y.Button),{onClick:f[8]||(f[8]=d=>h.value=!1)},{default:e.withCtx(()=>[...f[18]||(f[18]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(e.unref(y.Button),{type:"primary",onClick:z},{default:e.withCtx(()=>[...f[19]||(f[19]=[e.createTextVNode("确定",-1)])]),_:1})]),_:1})]),default:e.withCtx(()=>[e.createVNode(e.unref(V.Form),{ref_key:"formRef",ref:m,model:N,rules:b,"label-width":"80px"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.FormItem),{label:"角色名称",prop:"name"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:N.name,"onUpdate:modelValue":f[4]||(f[4]=d=>N.name=d),placeholder:"请输入角色名称"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"角色编码",prop:"code"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:N.code,"onUpdate:modelValue":f[5]||(f[5]=d=>N.code=d),placeholder:"请输入角色编码"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"描述"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:N.description,"onUpdate:modelValue":f[6]||(f[6]=d=>N.description=d),placeholder:"请输入描述"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"状态"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Switch),{modelValue:N.status,"onUpdate:modelValue":f[7]||(f[7]=d=>N.status=d),"active-value":e.unref(x).ENABLED,"inactive-value":e.unref(x).DISABLED},null,8,["modelValue","active-value","inactive-value"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])]))}}),[["__scopeId","data-v-8ad30bc6"]])},Symbol.toStringTag,{value:"Module"})),go={class:"menu-page"},_o={class:"toolbar"},yo={class:"menu-tree"},Eo={class:"tree-table"},ko={class:"tree-row tree-row--level-0"},Co=["onClick"],wo=["onClick"],Me=Object.freeze(Object.defineProperty({__proto__:null,default:F(e.defineComponent({__name:"index",setup(t){const l=[{id:1,parentId:null,name:"Dashboard",path:"/dashboard",component:"dashboard/index",redirect:"",icon:"dashboard",title:"仪表盘",type:M.MENU,sort:1,status:x.ENABLED,hidden:!1,keepAlive:!0},{id:2,parentId:null,name:"System",path:"/system",component:"",redirect:"/system/user",icon:"setting",title:"系统管理",type:M.DIRECTORY,sort:2,status:x.ENABLED,hidden:!1,keepAlive:!1,children:[{id:21,parentId:2,name:"SystemUser",path:"/system/user",component:"system/user/index",redirect:"",icon:"user",title:"用户管理",type:M.MENU,sort:1,status:x.ENABLED,hidden:!1,keepAlive:!0},{id:22,parentId:2,name:"SystemRole",path:"/system/role",component:"system/role/index",redirect:"",icon:"role",title:"角色管理",type:M.MENU,sort:2,status:x.ENABLED,hidden:!1,keepAlive:!0},{id:23,parentId:2,name:"SystemMenu",path:"/system/menu",component:"system/menu/index",redirect:"",icon:"menu",title:"菜单管理",type:M.MENU,sort:3,status:x.ENABLED,hidden:!1,keepAlive:!0}]}],o=e.ref(!1),s=e.ref([]),c=e.ref(!1),i=e.computed(()=>a.id?"编辑菜单":"新增菜单"),a=e.reactive({id:0,parentId:null,name:"",path:"",component:"",redirect:"",icon:"",title:"",type:M.MENU,sort:0,status:x.ENABLED,hidden:!1,keepAlive:!0}),n={name:[{required:!0,message:"请输入菜单名称",trigger:"blur"}],path:[{required:!0,message:"请输入路由路径",trigger:"blur"}],title:[{required:!0,message:"请输入菜单标题",trigger:"blur"}]},h=e.ref(),_=()=>{o.value=!0,setTimeout(()=>{s.value=l,o.value=!1},300)},N=(S=null)=>{Object.assign(a,{id:0,parentId:S,name:"",path:"",component:"",redirect:"",icon:"",title:"",type:M.MENU,sort:0,status:x.ENABLED,hidden:!1,keepAlive:!0}),c.value=!0},b=S=>{Object.assign(a,S),c.value=!0},m=async()=>{var S;try{await((S=h.value)==null?void 0:S.validate()),A.Message.success(a.id?"编辑成功":"新增成功"),c.value=!1,_()}catch(p){console.error(p)}},C=S=>({dashboard:"📊",system:"⚙️",user:"👤",role:"👥",menu:"📋",setting:"🔧"})[S||""]||"📄";return e.onMounted(()=>{_()}),(S,p)=>(e.openBlock(),e.createElementBlock("div",go,[e.createVNode(e.unref(L.Card),{class:"menu-card"},{default:e.withCtx(()=>[e.createElementVNode("div",_o,[e.createVNode(e.unref(y.Button),{type:"primary",onClick:p[0]||(p[0]=u=>N())},{default:e.withCtx(()=>[...p[14]||(p[14]=[e.createTextVNode("新增菜单",-1)])]),_:1})]),e.createElementVNode("div",yo,[e.createElementVNode("table",Eo,[p[19]||(p[19]=e.createElementVNode("thead",null,[e.createElementVNode("tr",null,[e.createElementVNode("th",null,"菜单名称"),e.createElementVNode("th",null,"图标"),e.createElementVNode("th",null,"路由路径"),e.createElementVNode("th",null,"类型"),e.createElementVNode("th",null,"排序"),e.createElementVNode("th",null,"状态"),e.createElementVNode("th",null,"操作")])],-1)),e.createElementVNode("tbody",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,u=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:u.id},[e.createElementVNode("tr",ko,[e.createElementVNode("td",null,[e.createElementVNode("span",{class:"menu-name",onClick:B=>b(u)},e.toDisplayString(u.title),9,Co)]),e.createElementVNode("td",null,e.toDisplayString(C(u.icon)),1),e.createElementVNode("td",null,e.toDisplayString(u.path),1),e.createElementVNode("td",null,[e.createVNode(e.unref(L.Tag),{type:u.type===e.unref(M).DIRECTORY?"primary":u.type===e.unref(M).MENU?"success":"warning",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(u.type===e.unref(M).DIRECTORY?"目录":u.type===e.unref(M).MENU?"菜单":"按钮"),1)]),_:2},1032,["type"])]),e.createElementVNode("td",null,e.toDisplayString(u.sort),1),e.createElementVNode("td",null,[e.createVNode(e.unref(L.Tag),{type:u.status===e.unref(x).ENABLED?"success":"danger",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(u.status===e.unref(x).ENABLED?"启用":"禁用"),1)]),_:2},1032,["type"])]),e.createElementVNode("td",null,[e.createVNode(e.unref(y.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(y.Button),{type:"primary",link:"",size:"small",onClick:B=>N(u.id)},{default:e.withCtx(()=>[...p[15]||(p[15]=[e.createTextVNode("新增",-1)])]),_:1},8,["onClick"]),e.createVNode(e.unref(y.Button),{type:"primary",link:"",size:"small",onClick:B=>b(u)},{default:e.withCtx(()=>[...p[16]||(p[16]=[e.createTextVNode("编辑",-1)])]),_:1},8,["onClick"])]),_:2},1024)])]),u.children?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(u.children,B=>(e.openBlock(),e.createElementBlock("tr",{key:B.id,class:"tree-row tree-row--level-1"},[e.createElementVNode("td",null,[p[17]||(p[17]=e.createElementVNode("span",{class:"tree-indent"},null,-1)),e.createElementVNode("span",{class:"menu-name",onClick:$=>b(B)},e.toDisplayString(B.title),9,wo)]),e.createElementVNode("td",null,e.toDisplayString(C(B.icon)),1),e.createElementVNode("td",null,e.toDisplayString(B.path),1),e.createElementVNode("td",null,[e.createVNode(e.unref(L.Tag),{type:B.type===e.unref(M).DIRECTORY?"primary":B.type===e.unref(M).MENU?"success":"warning",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(B.type===e.unref(M).DIRECTORY?"目录":B.type===e.unref(M).MENU?"菜单":"按钮"),1)]),_:2},1032,["type"])]),e.createElementVNode("td",null,e.toDisplayString(B.sort),1),e.createElementVNode("td",null,[e.createVNode(e.unref(L.Tag),{type:B.status===e.unref(x).ENABLED?"success":"danger",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(B.status===e.unref(x).ENABLED?"启用":"禁用"),1)]),_:2},1032,["type"])]),e.createElementVNode("td",null,[e.createVNode(e.unref(y.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(y.Button),{type:"primary",link:"",size:"small",onClick:$=>b(B)},{default:e.withCtx(()=>[...p[18]||(p[18]=[e.createTextVNode("编辑",-1)])]),_:1},8,["onClick"])]),_:2},1024)])]))),128)):e.createCommentVNode("",!0)],64))),128))])])])]),_:1}),e.createVNode(e.unref(A.Modal),{modelValue:c.value,"onUpdate:modelValue":p[13]||(p[13]=u=>c.value=u),title:i.value,width:"600px"},{footer:e.withCtx(()=>[e.createVNode(e.unref(y.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(y.Button),{onClick:p[12]||(p[12]=u=>c.value=!1)},{default:e.withCtx(()=>[...p[20]||(p[20]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(e.unref(y.Button),{type:"primary",onClick:m},{default:e.withCtx(()=>[...p[21]||(p[21]=[e.createTextVNode("确定",-1)])]),_:1})]),_:1})]),default:e.withCtx(()=>[e.createVNode(e.unref(V.Form),{ref_key:"formRef",ref:h,model:a,rules:n,"label-width":"80px"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.FormItem),{label:"上级菜单"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:a.parentId,"onUpdate:modelValue":p[1]||(p[1]=u=>a.parentId=u),placeholder:"上级菜单ID",disabled:""},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"菜单类型"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Select),{modelValue:a.type,"onUpdate:modelValue":p[2]||(p[2]=u=>a.type=u),options:e.unref(Le)},null,8,["modelValue","options"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"菜单名称",prop:"name"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:a.name,"onUpdate:modelValue":p[3]||(p[3]=u=>a.name=u),placeholder:"请输入菜单名称(路由name)"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"菜单标题",prop:"title"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:a.title,"onUpdate:modelValue":p[4]||(p[4]=u=>a.title=u),placeholder:"请输入菜单标题"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"路由路径",prop:"path"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:a.path,"onUpdate:modelValue":p[5]||(p[5]=u=>a.path=u),placeholder:"请输入路由路径"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"组件路径"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:a.component,"onUpdate:modelValue":p[6]||(p[6]=u=>a.component=u),placeholder:"请输入组件路径"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"图标"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:a.icon,"onUpdate:modelValue":p[7]||(p[7]=u=>a.icon=u),placeholder:"请输入图标名称"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"排序"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.InputNumber),{modelValue:a.sort,"onUpdate:modelValue":p[8]||(p[8]=u=>a.sort=u),min:0},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"状态"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Switch),{modelValue:a.status,"onUpdate:modelValue":p[9]||(p[9]=u=>a.status=u),"active-value":e.unref(x).ENABLED,"inactive-value":e.unref(x).DISABLED},null,8,["modelValue","active-value","inactive-value"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"隐藏"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Switch),{modelValue:a.hidden,"onUpdate:modelValue":p[10]||(p[10]=u=>a.hidden=u)},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"缓存"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Switch),{modelValue:a.keepAlive,"onUpdate:modelValue":p[11]||(p[11]=u=>a.keepAlive=u)},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])]))}}),[["__scopeId","data-v-2a272a68"]])},Symbol.toStringTag,{value:"Module"}));r.Footer=Qt,r.Forbidden=Te,r.Gender=Ie,r.GenderOptions=jn,r.GenderText=Pn,r.Header=Se,r.Layout=me,r.Login=Be,r.MenuType=M,r.MenuTypeOptions=Le,r.MenuTypeText=On,r.NotFound=be,r.Sidebar=xe,r.Status=x,r.StatusOptions=pe,r.StatusText=Fn,r.Tabs=Wt,r.batchDeleteUsers=Mn,r.clearToken=de,r.createLayoutRoute=fn,r.createMenu=bn,r.createRole=kn,r.createRouter=Vn,r.createUser=$n,r.defaultDynamicRoutes=Ke,r.deleteMenu=Dn,r.deleteRole=wn,r.deleteUser=Un,r.errorRoute=le,r.getMenuList=Sn,r.getMenuTree=Bn,r.getRefreshToken=Ye,r.getRoleDetail=En,r.getRoleList=yn,r.getToken=ee,r.getTokenExpire=Ee,r.getUserDetail=Ln,r.getUserInfo=gn,r.getUserList=In,r.hasPermission=pn,r.hasRole=De,r.hasToken=ce,r.http=D,r.isAdmin=un,r.isTokenExpired=we,r.layoutRoute=ae,r.local=E,r.localStorageUtil=W,r.login=hn,r.logout=Nn,r.mockMenuData=ge,r.permissionDirective=qn,r.refreshToken=_n,r.resetPassword=zn,r.resetRouter=We,r.router=te,r.session=je,r.sessionStorageUtil=X,r.setRefreshToken=ye,r.setToken=_e,r.setTokenExpire=ke,r.setTokenInfo=Ce,r.staticRoutes=oe,r.updateMenu=Tn,r.updateRole=Cn,r.updateRoleStatus=xn,r.updateUser=An,r.updateUserStatus=Rn,r.useApp=sn,r.useAppStore=K,r.useAuth=dn,r.useAuthStore=G,r.useForm=cn,r.useMenuStore=J,r.useTable=mn,r.useUserStore=P,Object.defineProperty(r,Symbol.toStringTag,{value:"Module"})});
1
+ (function(s,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("pinia"),require("vue-router"),require("@xto/navigation"),require("@xto/base"),require("@xto/feedback"),require("@xto/form"),require("axios"),require("@xto/data")):typeof define=="function"&&define.amd?define(["exports","vue","pinia","vue-router","@xto/navigation","@xto/base","@xto/feedback","@xto/form","axios","@xto/data"],e):(s=typeof globalThis<"u"?globalThis:s||self,e(s.XtoFronted={},s.Vue,s.Pinia,s.VueRouter,s.navigation,s.base,s.feedback,s.form,s.axios,s.data))})(this,function(s,e,ee,R,K,y,A,V,qe,L){"use strict";const W="xto_",Ve=t=>({get(l){const o=t.getItem(W+l);if(!o)return null;try{return JSON.parse(o)}catch{return o}},set(l,o){if(o==null){t.removeItem(W+l);return}const i=typeof o=="string"?o:JSON.stringify(o);t.setItem(W+l,i)},remove(l){t.removeItem(W+l)},clear(){Object.keys(t).forEach(o=>{o.startsWith(W)&&t.removeItem(o)})}}),X=Ve(window.localStorage),G=Ve(window.sessionStorage),E={get:X.get,set:X.set,remove:X.remove,clear:X.clear},Ke={get:G.get,set:G.set,remove:G.remove,clear:G.clear},q=ee.defineStore("app",()=>{const t=e.ref(E.get("appName")||"XTO App"),l=e.ref(E.get("indexPath")||"/dashboard"),o=e.ref(E.get("isDark")||!1),i=e.ref(E.get("theme")||"light"),c=e.ref(E.get("layout")||"sidebar"),a=e.ref(E.get("isCollapsed")||!1),r=e.ref(E.get("showTabs")??!0),n=e.ref(E.get("showFooter")??!0),h=e.ref(E.get("showBreadcrumb")??!0),g=e.ref(E.get("primaryColor")||"#409eff"),N=e.ref([]),B=e.computed(()=>o.value?"dark":"light"),d=T=>{t.value=T,E.set("appName",T)},C=T=>{l.value=T,E.set("indexPath",T)},x=()=>{o.value=!o.value,i.value=o.value?"dark":"light",u()},p=T=>{i.value=T,o.value=T==="dark",u()},u=()=>{const T=document.documentElement;o.value?T.classList.add("dark"):T.classList.remove("dark"),E.set("isDark",o.value),E.set("theme",i.value)},b=()=>{a.value=!a.value,E.set("isCollapsed",a.value)},$=T=>{c.value=T,E.set("layout",T)},z=()=>{r.value=!r.value,E.set("showTabs",r.value)},U=()=>{n.value=!n.value,E.set("showFooter",n.value)},f=()=>{h.value=!h.value,E.set("showBreadcrumb",h.value)},m=T=>{g.value=T,document.documentElement.style.setProperty("--color-primary",T),E.set("primaryColor",T)},k=T=>{N.value.includes(T)||N.value.push(T)},O=T=>{const ne=N.value.indexOf(T);ne>-1&&N.value.splice(ne,1)},ue=()=>{N.value=[]},fe=()=>{u(),g.value!=="#409eff"&&document.documentElement.style.setProperty("--color-primary",g.value)};return e.watch(o,u),{appName:t,indexPath:l,isDark:o,theme:i,layout:c,isCollapsed:a,showTabs:r,showFooter:n,showBreadcrumb:h,primaryColor:g,cachedViews:N,themeClass:B,setAppName:d,setIndexPath:C,toggleTheme:x,toggleCollapse:b,setTheme:p,setLayout:$,toggleTabs:z,toggleFooter:U,toggleBreadcrumb:f,setPrimaryColor:m,addCachedView:k,removeCachedView:O,clearCachedViews:ue,initTheme:fe}}),Ne="/vite.svg",Ye=(t,l,o)=>{const i=t[l];return i?typeof i=="function"?i():Promise.resolve(i):new Promise((c,a)=>{(typeof queueMicrotask=="function"?queueMicrotask:setTimeout)(a.bind(null,new Error("Unknown variable dynamic import: "+l+(l.split("/").length!==o?". Note that variables only represent file names one level deep.":""))))})},oe=[{path:"/login",name:"Login",component:()=>Promise.resolve().then(()=>nn),meta:{title:"登录",hidden:!0}},{path:"/404",name:"NotFound",component:()=>Promise.resolve().then(()=>an),meta:{title:"404",hidden:!0}},{path:"/403",name:"Forbidden",component:()=>Promise.resolve().then(()=>dn),meta:{title:"403",hidden:!0}}],le={path:"/:pathMatch(.*)*",redirect:"/404",meta:{hidden:!0}},ae={path:"/",name:"Layout",component:()=>Promise.resolve().then(()=>Yt),redirect:"/dashboard",children:[{path:"/dashboard",name:"Dashboard",component:()=>Promise.resolve().then(()=>Ue),meta:{title:"仪表盘",icon:"dashboard",keepAlive:!0,affix:!0}},{path:"/system/user",name:"SystemUser",component:()=>Promise.resolve().then(()=>Me),meta:{title:"用户管理",icon:"user",keepAlive:!0}},{path:"/system/role",name:"SystemRole",component:()=>Promise.resolve().then(()=>Re),meta:{title:"角色管理",icon:"role",keepAlive:!0}},{path:"/system/menu",name:"SystemMenu",component:()=>Promise.resolve().then(()=>ze),meta:{title:"菜单管理",icon:"menu",keepAlive:!0}}]},He=[{path:"/dashboard",name:"Dashboard",component:()=>Promise.resolve().then(()=>Ue),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(()=>Me),meta:{title:"用户管理",icon:"user",keepAlive:!0}},{path:"role",name:"SystemRole",component:()=>Promise.resolve().then(()=>Re),meta:{title:"角色管理",icon:"role",keepAlive:!0}},{path:"menu",name:"SystemMenu",component:()=>Promise.resolve().then(()=>ze),meta:{title:"菜单管理",icon:"menu",keepAlive:!0}}]}],ge=[{id:1,name:"Dashboard",path:"/dashboard",component:"dashboard/index",icon:"dashboard",title:"仪表盘",keepAlive:!0,affix:!0},{id:2,name:"System",path:"/system",redirect:"/system/user",icon:"setting",title:"系统管理",children:[{id:21,name:"SystemUser",path:"/system/user",component:"system/user/index",icon:"user",title:"用户管理",keepAlive:!0},{id:22,name:"SystemRole",path:"/system/role",component:"system/role/index",icon:"role",title:"角色管理",keepAlive:!0},{id:23,name:"SystemMenu",path:"/system/menu",component:"system/menu/index",icon:"menu",title:"菜单管理",keepAlive:!0}]}],re="token",se="refresh_token",ie="token_expire",J=()=>E.get(re),_e=t=>{E.set(re,t)},We=()=>E.get(se),ye=t=>{E.set(se,t)},Ee=()=>E.get(ie),ke=t=>{E.set(ie,t)},Ce=t=>{_e(t.token),ye(t.refreshToken),ke(t.expireTime)},de=()=>{E.remove(re),E.remove(se),E.remove(ie)},we=()=>{const t=Ee();return t?Date.now()>t:!0},ce=()=>!!J()&&!we(),P=ee.defineStore("user",()=>{const t=e.ref(E.get("userInfo")),l=e.ref(E.get("roles")||[]),o=e.ref(E.get("permissions")||[]),i=e.computed(()=>!!t.value),c=e.computed(()=>{var d;return((d=t.value)==null?void 0:d.username)||""}),a=e.computed(()=>{var d;return((d=t.value)==null?void 0:d.nickname)||""}),r=e.computed(()=>{var d;return((d=t.value)==null?void 0:d.avatar)||""}),n=e.computed(()=>{var d;return(d=t.value)==null?void 0:d.id});return{userInfo:t,roles:l,permissions:o,isLoggedIn:i,username:c,nickname:a,avatar:r,userId:n,setUserInfo:d=>{t.value=d,l.value=d.roles||[],o.value=d.permissions||[],E.set("userInfo",d),E.set("roles",d.roles||[]),E.set("permissions",d.permissions||[])},clearUserInfo:()=>{t.value=null,l.value=[],o.value=[],E.remove("userInfo"),E.remove("roles"),E.remove("permissions")},hasPermission:d=>Array.isArray(d)?d.some(C=>o.value.includes(C)):o.value.includes(d),hasRole:d=>Array.isArray(d)?d.some(C=>l.value.includes(C)):l.value.includes(d)}}),te=R.createRouter({history:R.createWebHistory(),routes:[...oe,ae,le],scrollBehavior:()=>({left:0,top:0})}),Xe=["/login","/404","/403"];te.beforeEach(async(t,l,o)=>{const i=q();if(i.initTheme(),ce())if(t.path==="/login")o({path:"/"});else{const c=P();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()}),Y().setMenuList(ge)),t.name&&t.meta.keepAlive&&i.addCachedView(t.name),o()}else Xe.includes(t.path)?o():o("/login")});function Ge(){const t=R.createRouter({history:R.createWebHistory(),routes:[...oe,ae,le]});te.matcher=t.matcher}const Y=ee.defineStore("menu",()=>{const t=e.ref(E.get("menuList")||[]),l=e.computed(()=>t.value.length>0),o=r=>{t.value=r,E.set("menuList",r)},i=()=>{t.value=[],E.remove("menuList")},c=r=>r.filter(n=>!n.hidden).map(n=>{const h={path:n.path,name:n.name,meta:{title:n.title,icon:n.icon,keepAlive:n.keepAlive,hidden:n.hidden}};return n.redirect&&(h.redirect=n.redirect),n.component&&(h.component=()=>Ye(Object.assign({}),`../views/${n.component}.vue`,3)),n.children&&n.children.length>0&&(h.children=c(n.children)),h});return{menuList:t,hasMenu:l,setMenuList:o,clearMenu:i,generateRoutes:c,addRoutes:r=>{c(r).forEach(h=>{te.addRoute("Layout",h)})}}}),Q=ee.defineStore("auth",()=>{const t=e.ref(J()),l=e.computed(()=>ce()),o=e.ref(""),i=e.ref(""),c=e.ref(""),a=e.ref("/login");return{token:t,isLoggedIn:l,baseUrl:o,appId:i,clientId:c,loginPath:a,login:d=>{t.value=d.token,Ce(d)},logout:()=>{t.value=null,de()},setBaseUrl:d=>{o.value=d},setAppId:d=>{i.value=d},setClientId:d=>{c.value=d},setLoginPath:d=>{a.value=d}}}),Je={class:"sidebar__logo"},Qe={key:0,class:"sidebar__user"},Ze={class:"sidebar__user-info"},ve={class:"sidebar__user-name"},et={class:"sidebar__user-role"},tt=e.defineComponent({__name:"Sidebar",setup(t){const l=R.useRoute(),o=R.useRouter(),i=Y(),c=P(),a=Q(),r=q(),n=e.computed(()=>r.isCollapsed),h=e.computed(()=>l.path),g=e.computed(()=>r.isDark?"#1d1e1f":"#fff"),N=e.computed(()=>r.isDark?"#cfd3dc":"#303133"),B=e.computed(()=>"#409eff"),d=p=>{p&&p!==l.path&&o.push(p)},C=()=>{a.logout(),c.clearUserInfo(),i.clearMenu(),o.push("/login")},x=p=>({dashboard:"dashboard",system:"system",user:"user",role:"role",menu:"list",setting:"setting"})[p||""]||"file";return(p,u)=>{var b;return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["sidebar",{"sidebar--collapsed":n.value}])},[e.createElementVNode("div",Je,[u[0]||(u[0]=e.createElementVNode("img",{src:Ne,alt:"Logo",class:"sidebar__logo-img"},null,-1)),e.withDirectives(e.createElementVNode("span",{class:"sidebar__logo-text"},e.toDisplayString(e.unref(r).appName),513),[[e.vShow,!n.value]])]),e.createVNode(e.unref(K.Menu),{"default-active":h.value,mode:"vertical",collapse:n.value,"collapse-transition":!1,"background-color":g.value,"text-color":N.value,"active-text-color":B.value,class:"sidebar__menu",onSelect:d},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(i).menuList,$=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:$.path},[$.children&&$.children.length>0?(e.openBlock(),e.createBlock(e.unref(K.SubMenu),{key:0,index:$.path},{title:e.withCtx(()=>[e.createVNode(e.unref(y.Icon),{name:x($.icon),size:16},null,8,["name"]),e.createElementVNode("span",null,e.toDisplayString($.title),1)]),default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList($.children,z=>(e.openBlock(),e.createBlock(e.unref(K.MenuItem),{key:z.path,index:z.path},{default:e.withCtx(()=>[e.createVNode(e.unref(y.Icon),{name:x(z.icon),size:16},null,8,["name"]),e.createElementVNode("span",null,e.toDisplayString(z.title),1)]),_:2},1032,["index"]))),128))]),_:2},1032,["index"])):(e.openBlock(),e.createBlock(e.unref(K.MenuItem),{key:1,index:$.path},{default:e.withCtx(()=>[e.createVNode(e.unref(y.Icon),{name:x($.icon),size:16},null,8,["name"]),e.createElementVNode("span",null,e.toDisplayString($.title),1)]),_:2},1032,["index"]))],64))),128))]),_:1},8,["default-active","collapse","background-color","text-color","active-text-color"]),n.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Qe,[e.createElementVNode("div",Ze,[e.createElementVNode("span",ve,e.toDisplayString(e.unref(c).nickname),1),e.createElementVNode("span",et,e.toDisplayString((b=e.unref(c).roles)==null?void 0:b.join(", ")),1)]),e.createVNode(e.unref(y.Button),{type:"text",size:"small",onClick:C},{default:e.withCtx(()=>[...u[1]||(u[1]=[e.createTextVNode("退出",-1)])]),_:1})]))],2)}}}),F=(t,l)=>{const o=t.__vccOpts||t;for(const[i,c]of l)o[i]=c;return o},Se=F(tt,[["__scopeId","data-v-a7668285"]]),nt={class:"header"},ot={class:"header__left"},lt={key:0,class:"header__breadcrumb"},at={key:0,class:"breadcrumb-separator"},rt={class:"header__right"},st=["title"],it={class:"header__avatar"},dt={class:"header__user-name"},ct={key:0,class:"header__dropdown"},mt={class:"header__dropdown-header"},pt={class:"header__dropdown-avatar"},ut={class:"header__dropdown-info"},ft={class:"header__dropdown-name"},ht={class:"header__dropdown-role"},Vt={class:"header__dropdown-menu"},Nt={class:"search-container"},gt={class:"search-input-wrapper"},_t={key:0,class:"search-results"},yt=["onClick"],Et={class:"search-result-info"},kt={class:"search-result-title"},Ct={key:0,class:"search-result-parent"},wt={key:1,class:"search-empty"},St={class:"settings-drawer"},xt={class:"settings-section"},Bt={class:"settings-layout-options"},bt=["onClick"],Tt={class:"layout-option__preview"},It={key:0,class:"layout-preview-sidebar"},Dt={key:1,class:"layout-preview-top"},Lt={key:2,class:"layout-preview-mix"},$t={class:"layout-option__label"},At={class:"settings-section"},Ut={class:"settings-color-options"},Mt=["title","onClick"],Rt={class:"settings-section"},zt={class:"settings-switch-list"},Ft={class:"settings-switch-item"},Pt={class:"settings-switch-item"},xe=F(e.defineComponent({__name:"Header",setup(t){const l=R.useRoute(),o=R.useRouter(),i=q(),c=P(),a=Q(),r=Y(),n=e.ref(!1),h=e.ref(!1),g=e.ref(null),N=e.ref(!1),B=e.ref(!1),d=e.ref(""),C=e.ref(null),x=e.ref(!1),p=[{value:"sidebar",label:"左侧菜单",icon:"sidebar-left"},{value:"top",label:"顶部菜单",icon:"menu"},{value:"mix",label:"混合菜单",icon:"grid"}],u=[{value:"#409eff",label:"默认蓝"},{value:"#1890ff",label:"科技蓝"},{value:"#52c41a",label:"极光绿"},{value:"#faad14",label:"日落橙"},{value:"#f5222d",label:"薄暮红"},{value:"#722ed1",label:"酱紫"}],b=e.computed(()=>l.matched.filter(_=>_.meta&&_.meta.title).map(_=>({title:_.meta.title,path:_.path}))),$=(D,_="")=>{const H=[];return D.forEach(w=>{w.children&&w.children.length>0?H.push(...$(w.children,w.title)):H.push({...w,parentTitle:_})}),H},z=e.computed(()=>d.value.trim()?$(r.menuList).filter(_=>_.title.toLowerCase().includes(d.value.toLowerCase())):[]),U=e.computed(()=>i.layout),f=()=>{i.toggleCollapse()},m=()=>{i.toggleTheme()},k=()=>{h.value=!0},O=D=>{i.setLayout(D)},ue=D=>{x.value=D;const _=document.documentElement;D?_.classList.add("grey-mode"):_.classList.remove("grey-mode")},fe=()=>{document.fullscreenElement?document.exitFullscreen():document.documentElement.requestFullscreen()},T=()=>{N.value=!!document.fullscreenElement},ne=()=>{n.value=!n.value},v=()=>{n.value=!1},Fe=()=>{B.value=!0},he=()=>{B.value=!1,d.value=""},Pe=D=>{o.push(D),he()},Bo=D=>{i.setPrimaryColor(D)},bo=()=>{v(),o.push("/profile")},To=()=>{v(),o.push("/change-password")},Io=()=>{v(),a.logout(),c.clearUserInfo(),r.clearMenu(),o.push("/login")},Oe=D=>{g.value&&!g.value.contains(D.target)&&v(),C.value&&!C.value.contains(D.target)&&he()},je=D=>{D.key==="Escape"&&(he(),v()),(D.ctrlKey||D.metaKey)&&D.key==="k"&&(D.preventDefault(),Fe())};return e.onMounted(()=>{document.addEventListener("click",Oe),document.addEventListener("fullscreenchange",T),document.addEventListener("keydown",je),i.initTheme(),x.value=document.documentElement.classList.contains("grey-mode")}),e.onUnmounted(()=>{document.removeEventListener("click",Oe),document.removeEventListener("fullscreenchange",T),document.removeEventListener("keydown",je)}),(D,_)=>{var H;return e.openBlock(),e.createElementBlock("div",nt,[e.createElementVNode("div",ot,[e.createElementVNode("div",{class:"header__collapse",onClick:f},[e.createVNode(e.unref(y.Icon),{name:e.unref(i).isCollapsed?"menu-unfold":"menu-fold",size:18},null,8,["name"])]),e.unref(i).showBreadcrumb?(e.openBlock(),e.createElementBlock("div",lt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(b.value,(w,j)=>(e.openBlock(),e.createElementBlock("span",{key:w.path},[j>0?(e.openBlock(),e.createElementBlock("span",at,"/")):e.createCommentVNode("",!0),e.createElementVNode("span",{class:e.normalizeClass({"is-current":j===b.value.length-1})},e.toDisplayString(w.title),3)]))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",rt,[e.createElementVNode("div",{class:"header__action",onClick:Fe,title:"搜索 (Ctrl+K)"},[e.createVNode(e.unref(y.Icon),{name:"search",size:16})]),e.createElementVNode("div",{class:"header__action",onClick:fe,title:N.value?"退出全屏":"全屏"},[e.createVNode(e.unref(y.Icon),{name:N.value?"fullscreen-exit":"fullscreen",size:16},null,8,["name"])],8,st),e.createElementVNode("div",{class:"header__action",onClick:k,title:"换肤设置"},[e.createVNode(e.unref(y.Icon),{name:"setting",size:16})]),e.createElementVNode("div",{class:"header__action",onClick:m,title:"切换主题"},[e.createVNode(e.unref(y.Icon),{name:e.unref(i).isDark?"sun":"moon",size:16},null,8,["name"])]),e.createElementVNode("div",{class:"header__user",ref_key:"dropdownRef",ref:g},[e.createElementVNode("div",{class:"header__user-trigger",onClick:e.withModifiers(ne,["stop"])},[e.createElementVNode("div",it,[e.createElementVNode("span",null,e.toDisplayString(((H=e.unref(c).nickname)==null?void 0:H.charAt(0))||"U"),1)]),e.createElementVNode("span",dt,e.toDisplayString(e.unref(c).nickname),1),e.createElementVNode("span",{class:e.normalizeClass(["header__user-arrow",{"is-active":n.value}])},"▼",2)]),e.createVNode(e.Transition,{name:"dropdown"},{default:e.withCtx(()=>{var w,j;return[n.value?(e.openBlock(),e.createElementBlock("div",ct,[e.createElementVNode("div",mt,[e.createElementVNode("div",pt,[e.createElementVNode("span",null,e.toDisplayString(((w=e.unref(c).nickname)==null?void 0:w.charAt(0))||"U"),1)]),e.createElementVNode("div",ut,[e.createElementVNode("div",ft,e.toDisplayString(e.unref(c).nickname),1),e.createElementVNode("div",ht,e.toDisplayString((j=e.unref(c).roles)==null?void 0:j.join(", ")),1)])]),_[8]||(_[8]=e.createElementVNode("div",{class:"header__dropdown-divider"},null,-1)),e.createElementVNode("div",Vt,[e.createElementVNode("div",{class:"header__dropdown-item",onClick:bo},[e.createVNode(e.unref(y.Icon),{name:"user",size:16}),_[4]||(_[4]=e.createElementVNode("span",null,"个人信息",-1))]),e.createElementVNode("div",{class:"header__dropdown-item",onClick:To},[e.createVNode(e.unref(y.Icon),{name:"lock",size:16}),_[5]||(_[5]=e.createElementVNode("span",null,"修改密码",-1))]),_[7]||(_[7]=e.createElementVNode("div",{class:"header__dropdown-divider"},null,-1)),e.createElementVNode("div",{class:"header__dropdown-item header__dropdown-item--danger",onClick:Io},[e.createVNode(e.unref(y.Icon),{name:"logout",size:16}),_[6]||(_[6]=e.createElementVNode("span",null,"退出登录",-1))])])])):e.createCommentVNode("",!0)]}),_:1})],512)]),e.createVNode(e.Transition,{name:"search"},{default:e.withCtx(()=>[B.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"header__search-modal",ref_key:"searchRef",ref:C},[e.createElementVNode("div",Nt,[e.createElementVNode("div",gt,[e.createVNode(e.unref(y.Icon),{class:"search-icon",name:"search",size:20}),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":_[0]||(_[0]=w=>d.value=w),type:"text",class:"search-input",placeholder:"搜索菜单...",autofocus:"",onKeyup:_[1]||(_[1]=e.withKeys(w=>z.value[0]&&Pe(z.value[0].path),["enter"]))},null,544),[[e.vModelText,d.value]]),_[9]||(_[9]=e.createElementVNode("span",{class:"search-shortcut"},"ESC 关闭",-1))]),z.value.length>0?(e.openBlock(),e.createElementBlock("div",_t,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(z.value,(w,j)=>(e.openBlock(),e.createElementBlock("div",{key:w.path,class:e.normalizeClass(["search-result-item",{"is-first":j===0}]),onClick:Ho=>Pe(w.path)},[e.createVNode(e.unref(y.Icon),{class:"search-result-icon",name:w.icon||"file",size:20},null,8,["name"]),e.createElementVNode("div",Et,[e.createElementVNode("span",kt,e.toDisplayString(w.title),1),w.parentTitle?(e.openBlock(),e.createElementBlock("span",Ct,e.toDisplayString(w.parentTitle),1)):e.createCommentVNode("",!0)])],10,yt))),128))])):d.value?(e.openBlock(),e.createElementBlock("div",wt," 未找到匹配的菜单 ")):e.createCommentVNode("",!0)])],512)):e.createCommentVNode("",!0)]),_:1}),e.createVNode(e.unref(A.Drawer),{modelValue:h.value,"onUpdate:modelValue":_[3]||(_[3]=w=>h.value=w),title:"换肤设置",direction:"rtl",size:"320px"},{default:e.withCtx(()=>[e.createElementVNode("div",St,[e.createElementVNode("div",xt,[_[13]||(_[13]=e.createElementVNode("div",{class:"settings-title"},"布局模式",-1)),e.createElementVNode("div",Bt,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(p,w=>e.createElementVNode("div",{key:w.value,class:e.normalizeClass(["layout-option",{"is-active":U.value===w.value}]),onClick:j=>O(w.value)},[e.createElementVNode("div",Tt,[w.value==="sidebar"?(e.openBlock(),e.createElementBlock("div",It,[..._[10]||(_[10]=[e.createElementVNode("div",{class:"preview-aside"},null,-1),e.createElementVNode("div",{class:"preview-main"},[e.createElementVNode("div",{class:"preview-header"}),e.createElementVNode("div",{class:"preview-content"})],-1)])])):w.value==="top"?(e.openBlock(),e.createElementBlock("div",Dt,[..._[11]||(_[11]=[e.createElementVNode("div",{class:"preview-header-full"},null,-1),e.createElementVNode("div",{class:"preview-content-full"},null,-1)])])):(e.openBlock(),e.createElementBlock("div",Lt,[..._[12]||(_[12]=[e.createElementVNode("div",{class:"preview-header-mix"},[e.createElementVNode("div",{class:"preview-mix-left"})],-1),e.createElementVNode("div",{class:"preview-mix-body"},[e.createElementVNode("div",{class:"preview-mix-aside"}),e.createElementVNode("div",{class:"preview-mix-content"})],-1)])]))]),e.createElementVNode("span",$t,e.toDisplayString(w.label),1)],10,bt)),64))])]),e.createElementVNode("div",At,[_[14]||(_[14]=e.createElementVNode("div",{class:"settings-title"},"主题色",-1)),e.createElementVNode("div",Ut,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(u,w=>e.createElementVNode("div",{key:w.value,class:e.normalizeClass(["color-option",{"is-active":e.unref(i).primaryColor===w.value}]),style:e.normalizeStyle({backgroundColor:w.value}),title:w.label,onClick:j=>Bo(w.value)},[e.unref(i).primaryColor===w.value?(e.openBlock(),e.createBlock(e.unref(y.Icon),{key:0,name:"check",size:12,color:"#fff"})):e.createCommentVNode("",!0)],14,Mt)),64))])]),e.createElementVNode("div",Rt,[_[19]||(_[19]=e.createElementVNode("div",{class:"settings-title"},"功能设置",-1)),e.createElementVNode("div",zt,[e.createElementVNode("div",Ft,[_[16]||(_[16]=e.createElementVNode("span",null,"灰色模式",-1)),e.createElementVNode("div",{class:e.normalizeClass(["switch-wrapper",{"is-checked":x.value}]),onClick:_[2]||(_[2]=w=>ue(!x.value))},[..._[15]||(_[15]=[e.createElementVNode("span",{class:"switch-core"},null,-1)])],2)]),e.createElementVNode("div",Pt,[_[18]||(_[18]=e.createElementVNode("span",null,"暗黑模式",-1)),e.createElementVNode("div",{class:e.normalizeClass(["switch-wrapper",{"is-checked":e.unref(i).isDark}]),onClick:m},[..._[17]||(_[17]=[e.createElementVNode("span",{class:"switch-core"},null,-1)])],2)])])])])]),_:1},8,["modelValue"])])}}}),[["__scopeId","data-v-015c45c9"]]),Ot={class:"layout"},jt={class:"layout__main"},qt={class:"layout__header"},Kt={class:"layout__content"},me=F(e.defineComponent({__name:"index",setup(t){const l=q(),o=e.computed(()=>l.isCollapsed?"64px":"210px");return(i,c)=>{const a=e.resolveComponent("router-view");return e.openBlock(),e.createElementBlock("div",Ot,[e.createElementVNode("aside",{class:"layout__aside",style:e.normalizeStyle({width:o.value})},[e.createVNode(Se)],4),e.createElementVNode("div",jt,[e.createElementVNode("header",qt,[e.createVNode(xe)]),e.createElementVNode("main",Kt,[e.createVNode(a)])])])}}}),[["__scopeId","data-v-a3110011"]]),Yt=Object.freeze(Object.defineProperty({__proto__:null,default:me},Symbol.toStringTag,{value:"Module"})),Ht={class:"tabs-wrapper"},Wt={class:"tab-label"},Xt=["onClick"],Gt=F(e.defineComponent({__name:"Tabs",setup(t){const l=R.useRoute(),o=R.useRouter(),i=e.computed(()=>{const n=[];return l.matched.forEach(h=>{var g;(g=h.meta)!=null&&g.affix&&n.push({name:h.name,title:h.meta.title,path:h.path,affix:!0})}),n}),c=e.computed(()=>l.path),a=n=>{o.push(n)},r=n=>{const h=i.value.find(g=>g.path===n);if(!(h!=null&&h.affix)&&n===c.value){const g=i.value.findIndex(B=>B.path===n),N=i.value[g-1]||i.value[g+1];N&&o.push(N.path)}};return(n,h)=>(e.openBlock(),e.createElementBlock("div",Ht,[e.createVNode(e.unref(K.Tabs),{modelValue:c.value,"onUpdate:modelValue":h[0]||(h[0]=g=>c.value=g),type:"card",onTabClick:a},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,g=>(e.openBlock(),e.createBlock(e.unref(K.TabPane),{key:g.path,name:g.path,label:g.title,closable:!g.affix},{label:e.withCtx(()=>[e.createElementVNode("span",Wt,[e.createTextVNode(e.toDisplayString(g.title)+" ",1),g.affix?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",{key:0,class:"tab-close",onClick:e.withModifiers(N=>r(g.path),["stop"])}," ✕ ",8,Xt))])]),_:2},1032,["name","label","closable"]))),128))]),_:1},8,["modelValue"])]))}}),[["__scopeId","data-v-9156d8cd"]]),Jt={},Qt={class:"footer"};function Zt(t,l){return e.openBlock(),e.createElementBlock("div",Qt,[...l[0]||(l[0]=[e.createElementVNode("span",null,"Copyright © 2024 Xto Demo. All Rights Reserved.",-1)])])}const vt=F(Jt,[["render",Zt],["__scopeId","data-v-4852826a"]]),en={class:"login"},tn={class:"login__container"},Be=F(e.defineComponent({__name:"index",setup(t){const l=R.useRouter(),o=Q(),i=P(),c=Y(),a=e.ref(!1),r=e.ref(!1),n=e.reactive({username:"admin",password:"123456"}),h={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"},{min:6,message:"密码长度至少6位",trigger:"blur"}]},g=e.ref(),N=async()=>{var B;try{await((B=g.value)==null?void 0:B.validate()),a.value=!0,setTimeout(()=>{o.login({token:"mock_token_"+Date.now(),refreshToken:"mock_refresh_token",expireTime:Date.now()+7*24*60*60*1e3}),i.setUserInfo({id:1,username:n.username,nickname:"管理员",avatar:"",email:"admin@example.com",phone:"13800138000",status:1,roles:["admin"],permissions:["*"],createTime:new Date().toISOString()}),c.setMenuList([{id:1,name:"Dashboard",path:"/dashboard",component:"dashboard/index",icon:"dashboard",title:"仪表盘",keepAlive:!0,affix:!0},{id:2,name:"System",path:"/system",redirect:"/system/user",icon:"setting",title:"系统管理",children:[{id:21,name:"SystemUser",path:"/system/user",component:"system/user/index",icon:"user",title:"用户管理",keepAlive:!0},{id:22,name:"SystemRole",path:"/system/role",component:"system/role/index",icon:"role",title:"角色管理",keepAlive:!0},{id:23,name:"SystemMenu",path:"/system/menu",component:"system/menu/index",icon:"menu",title:"菜单管理",keepAlive:!0}]}]),A.Message.success("登录成功"),l.push("/"),a.value=!1},1e3)}catch{a.value=!1}};return(B,d)=>(e.openBlock(),e.createElementBlock("div",en,[e.createElementVNode("div",tn,[d[5]||(d[5]=e.createElementVNode("div",{class:"login__header"},[e.createElementVNode("img",{src:Ne,alt:"Logo",class:"login__logo"}),e.createElementVNode("h1",{class:"login__title"},"Xto Demo"),e.createElementVNode("p",{class:"login__subtitle"},"后台管理系统")],-1)),e.createVNode(e.unref(V.Form),{ref_key:"formRef",ref:g,model:n,rules:h,class:"login__form","label-width":"0"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.FormItem),{prop:"username"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:n.username,"onUpdate:modelValue":d[0]||(d[0]=C=>n.username=C),placeholder:"用户名","prefix-icon":"👤",size:"large"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{prop:"password"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:n.password,"onUpdate:modelValue":d[1]||(d[1]=C=>n.password=C),type:"password",placeholder:"密码","prefix-icon":"🔒",size:"large","show-password":"",onKeyup:e.withKeys(N,["enter"])},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(V.Checkbox),{modelValue:r.value,"onUpdate:modelValue":d[2]||(d[2]=C=>r.value=C)},{default:e.withCtx(()=>[...d[3]||(d[3]=[e.createTextVNode("记住我",-1)])]),_:1},8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(y.Button),{type:"primary",size:"large",loading:a.value,class:"login__submit",onClick:N},{default:e.withCtx(()=>[...d[4]||(d[4]=[e.createTextVNode(" 登录 ",-1)])]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"]),d[6]||(d[6]=e.createElementVNode("div",{class:"login__footer"},[e.createElementVNode("p",null,"提示: 任意用户名密码即可登录 (Mock 模式)")],-1))])]))}}),[["__scopeId","data-v-40e9f7eb"]]),nn=Object.freeze(Object.defineProperty({__proto__:null,default:Be},Symbol.toStringTag,{value:"Module"})),on={class:"error-page"},ln={class:"error-page__content"},be=F(e.defineComponent({__name:"404",setup(t){const l=R.useRouter(),o=()=>{l.push("/")};return(i,c)=>(e.openBlock(),e.createElementBlock("div",on,[e.createElementVNode("div",ln,[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(y.Button),{type:"primary",onClick:o},{default:e.withCtx(()=>[...c[0]||(c[0]=[e.createTextVNode("返回首页",-1)])]),_:1})])]))}}),[["__scopeId","data-v-c3c12c24"]]),an=Object.freeze(Object.defineProperty({__proto__:null,default:be},Symbol.toStringTag,{value:"Module"})),rn={class:"error-page"},sn={class:"error-page__content"},Te=F(e.defineComponent({__name:"403",setup(t){const l=R.useRouter(),o=()=>{l.push("/")};return(i,c)=>(e.openBlock(),e.createElementBlock("div",rn,[e.createElementVNode("div",sn,[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(y.Button),{type:"primary",onClick:o},{default:e.withCtx(()=>[...c[0]||(c[0]=[e.createTextVNode("返回首页",-1)])]),_:1})])]))}}),[["__scopeId","data-v-dd5f2795"]]),dn=Object.freeze(Object.defineProperty({__proto__:null,default:Te},Symbol.toStringTag,{value:"Module"}));function cn(){const t=q(),l=P(),o=Q(),i=e.computed(()=>l.nickname||l.username||""),c=e.computed(()=>l.userInfo),a=e.computed(()=>t.appName),r=e.computed(()=>o.isLoggedIn),n=e.computed(()=>t.isDark),h=e.computed(()=>t.theme),g=e.computed(()=>t.isCollapsed),N=e.computed(()=>t.layout);return{userName:i,userInfo:c,appName:a,isLoggedIn:r,isDark:n,theme:h,isCollapsed:g,layout:N,toggleTheme:()=>{t.toggleTheme()},toggleCollapse:()=>{t.toggleCollapse()}}}function mn(){const t=P(),l=a=>{const r=t.permissions;return r.includes("*")?!0:Array.isArray(a)?a.some(n=>r.includes(n)):r.includes(a)},o=a=>{const r=t.roles;return r.includes("admin")?!0:Array.isArray(a)?a.some(n=>r.includes(n)):r.includes(a)},i=e.computed(()=>t.roles.includes("admin")),c=e.computed(()=>t.isLoggedIn);return{hasPermission:l,hasRole:o,isAdmin:i,isLoggedIn:c}}function pn(t,l={}){const{rules:o,onSubmit:i}=l,c=e.ref(),a=e.reactive({...t}),r=e.ref(!1),n=e.ref(!1),h=e.ref(!1),g=()=>{d(),h.value=!1,n.value=!0},N=x=>{Object.assign(a,x),h.value=!0,n.value=!0},B=()=>{n.value=!1,d()},d=()=>{var x;Object.keys(t).forEach(p=>{a[p]=t[p]}),(x=c.value)==null||x.resetFields()};return{formRef:c,formData:a,rules:o,loading:r,visible:n,isEdit:h,openAdd:g,openEdit:N,close:B,resetForm:d,handleSubmit:async()=>{var x;try{await((x=c.value)==null?void 0:x.validate()),r.value=!0,await(i==null?void 0:i(a)),B()}catch(p){console.error(p)}finally{r.value=!1}}}}function un(t){const{fetchData:l,defaultPageSize:o=10}=t,i=e.ref(!1),c=e.ref([]),a=e.ref(0),r=e.ref(1),n=e.ref(o),h=e.reactive({}),g=async()=>{i.value=!0;try{const u={...h,page:r.value,pageSize:n.value},b=await l(u);c.value=b.list,a.value=b.total}catch(u){console.error(u)}finally{i.value=!1}},N=()=>{r.value=1,g()},B=()=>{Object.keys(h).forEach(u=>{h[u]=void 0}),r.value=1,g()},d=u=>{r.value=u,g()},C=u=>{n.value=u,r.value=1,g()},x=()=>{g()},p=e.computed(()=>({current:r.value,pageSize:n.value,total:a.value}));return{loading:i,data:c,total:a,currentPage:r,pageSize:n,searchParams:h,pagination:p,getData:g,handleSearch:N,handleReset:B,handlePageChange:d,handleSizeChange:C,refresh:x}}function fn(t){const o=P().permissions;return Array.isArray(t)?t.some(i=>o.includes(i)):o.includes(t)}function Ie(t){const o=P().roles;return Array.isArray(t)?t.some(i=>o.includes(i)):o.includes(t)}function hn(){return Ie("admin")}const Z=(()=>{const t=qe.create({baseURL:void 0,timeout:3e4,headers:{"Content-Type":"application/json"}});return t.interceptors.request.use(l=>{const o=J();return o&&(l.headers.Authorization=`Bearer ${o}`),l},l=>Promise.reject(l)),t.interceptors.response.use(l=>{const{data:o}=l;return o.code===200||o.code===0?o.data:(A.Message.error(o.message||"请求失败"),Promise.reject(new Error(o.message||"请求失败")))},l=>{var i;const{response:o}=l;if(o)switch(o.status){case 401:A.Message.error("登录已过期,请重新登录"),de(),window.location.href="/login";break;case 403:A.Message.error("没有权限访问");break;case 404:A.Message.error("请求资源不存在");break;case 500:A.Message.error("服务器错误");break;default:A.Message.error(((i=o.data)==null?void 0:i.message)||"请求失败")}else A.Message.error("网络连接失败");return Promise.reject(l)}),t})(),I={get(t,l){return Z.get(t,l)},post(t,l,o){return Z.post(t,l,o)},put(t,l,o){return Z.put(t,l,o)},patch(t,l,o){return Z.patch(t,l,o)},delete(t,l){return Z.delete(t,l)}};function Vn(t,l={}){const o=l.indexPath||"/dashboard";return{path:"/",name:"Layout",component:me,redirect:o,children:t}}function Nn(t){return R.createRouter({history:R.createWebHistory(),routes:t,scrollBehavior:()=>({left:0,top:0})})}function gn(t){return I.post("/auth/login",t)}function _n(){return I.post("/auth/logout")}function De(){return I.get("/user/info")}function yn(t){return I.post("/auth/refresh",{refreshToken:t})}function En(t){return I.get("/role/list",{params:t})}function kn(t){return I.get(`/role/${t}`)}function Cn(t){return I.post("/role",t)}function wn(t,l){return I.put(`/role/${t}`,l)}function Sn(t){return I.delete(`/role/${t}`)}function xn(t,l){return I.patch(`/role/${t}/status`,{status:l})}function Bn(){return I.get("/menu/list")}function Le(){return I.get("/menu/tree")}function bn(t){return I.post("/menu",t)}function Tn(t,l){return I.put(`/menu/${t}`,l)}function In(t){return I.delete(`/menu/${t}`)}const Dn=["/login","/404","/403"];function Ln(t,l={}){const o=l.whiteList||Dn,i=l.loginPath||"/login",c=l.homePath||"/";t.beforeEach(async(a,r,n)=>{const h=q(),g=P(),N=Y();if(h.initTheme(),J())if(a.path===i)n({path:c});else if(g.isLoggedIn)a.name&&a.meta.keepAlive&&h.addCachedView(a.name),n();else try{if(l.fetchUserInfo){const d=await l.fetchUserInfo();g.setUserInfo(d)}else{const d=await De();g.setUserInfo(d)}if(l.fetchMenu){const d=await l.fetchMenu();N.setMenuList(d)}else{const d=await Le();N.setMenuList(d)}l.onLoginSuccess&&l.onLoginSuccess(),a.name&&a.meta.keepAlive&&h.addCachedView(a.name),n({...a,replace:!0})}catch(d){console.error("获取用户信息失败:",d),g.clearUserInfo(),N.clearMenu(),localStorage.removeItem("token"),localStorage.removeItem("refreshToken"),n({path:i,query:{redirect:a.fullPath}})}else o.includes(a.path)?n():n({path:i,query:{redirect:a.fullPath}})}),t.afterEach(()=>{})}function $n(t){return I.get("/user/list",{params:t})}function An(t){return I.get(`/user/${t}`)}function Un(t){return I.post("/user",t)}function Mn(t,l){return I.put(`/user/${t}`,l)}function Rn(t){return I.delete(`/user/${t}`)}function zn(t){return I.post("/user/batch-delete",{ids:t})}function Fn(t,l){return I.patch(`/user/${t}/status`,{status:l})}function Pn(t){return I.post(`/user/${t}/reset-password`)}var S=(t=>(t[t.ENABLED=1]="ENABLED",t[t.DISABLED=0]="DISABLED",t))(S||{}),$e=(t=>(t[t.UNKNOWN=0]="UNKNOWN",t[t.MALE=1]="MALE",t[t.FEMALE=2]="FEMALE",t))($e||{}),M=(t=>(t[t.DIRECTORY=0]="DIRECTORY",t[t.MENU=1]="MENU",t[t.BUTTON=2]="BUTTON",t))(M||{});const On={1:"启用",0:"禁用"},jn={0:"未知",1:"男",2:"女"},qn={0:"目录",1:"菜单",2:"按钮"},pe=[{label:"启用",value:1},{label:"禁用",value:0}],Kn=[{label:"未知",value:0},{label:"男",value:1},{label:"女",value:2}],Ae=[{label:"目录",value:0},{label:"菜单",value:1},{label:"按钮",value:2}],Yn={mounted(t,l){var r;const o=P(),{value:i}=l;if(!i)return;const c=o.permissions;let a=!1;Array.isArray(i)?a=i.some(n=>c.includes(n)||c.includes("*")):a=c.includes(i)||c.includes("*"),a||(r=t.parentNode)==null||r.removeChild(t)}},Hn={class:"dashboard"},Wn={class:"dashboard__stats"},Xn={class:"stat-card__content"},Gn={class:"stat-card__info"},Jn={class:"stat-card__title"},Qn={class:"dashboard__main"},Zn={class:"quick-links"},vn={class:"quick-link__icon"},eo={class:"quick-link__title"},to={class:"activity-list"},no={class:"activity-item__action"},oo={class:"activity-item__time"},lo={class:"system-info"},ao={class:"system-info__item"},ro={class:"system-info__item"},Ue=Object.freeze(Object.defineProperty({__proto__:null,default:F(e.defineComponent({__name:"index",setup(t){const l=e.ref([{title:"用户总数",value:1234,icon:"👥",color:"#409eff"},{title:"今日访问",value:567,icon:"👀",color:"#67c23a"},{title:"订单数量",value:890,icon:"📦",color:"#e6a23c"},{title:"销售金额",value:123456,icon:"💰",color:"#f56c6c"}]),o=e.ref([{user:"张三",action:"登录系统",time:"2分钟前",type:"success"},{user:"李四",action:"修改了用户信息",time:"5分钟前",type:"warning"},{user:"王五",action:"创建了新订单",time:"10分钟前",type:"info"},{user:"赵六",action:"删除了测试数据",time:"30分钟前",type:"danger"},{user:"钱七",action:"更新了系统配置",time:"1小时前",type:"primary"}]),i=e.ref([{title:"用户管理",path:"/system/user",icon:"👤"},{title:"角色管理",path:"/system/role",icon:"👥"},{title:"菜单管理",path:"/system/menu",icon:"📋"},{title:"系统设置",path:"/system",icon:"⚙️"}]);return(c,a)=>{const r=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock("div",Hn,[e.createElementVNode("div",Wn,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,n=>(e.openBlock(),e.createBlock(e.unref(L.Card),{key:n.title,class:"stat-card"},{default:e.withCtx(()=>[e.createElementVNode("div",Xn,[e.createElementVNode("div",{class:"stat-card__icon",style:e.normalizeStyle({backgroundColor:n.color+"20"})},e.toDisplayString(n.icon),5),e.createElementVNode("div",Gn,[e.createElementVNode("div",Jn,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",Qn,[e.createVNode(e.unref(L.Card),{class:"dashboard__quick"},{header:e.withCtx(()=>[...a[0]||(a[0]=[e.createElementVNode("span",{class:"card-title"},"快捷入口",-1)])]),default:e.withCtx(()=>[e.createElementVNode("div",Zn,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,n=>(e.openBlock(),e.createBlock(r,{key:n.path,to:n.path,class:"quick-link"},{default:e.withCtx(()=>[e.createElementVNode("span",vn,e.toDisplayString(n.icon),1),e.createElementVNode("span",eo,e.toDisplayString(n.title),1)]),_:2},1032,["to"]))),128))])]),_:1}),e.createVNode(e.unref(L.Card),{class:"dashboard__activity"},{header:e.withCtx(()=>[...a[1]||(a[1]=[e.createElementVNode("span",{class:"card-title"},"最近活动",-1)])]),default:e.withCtx(()=>[e.createElementVNode("div",to,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,(n,h)=>(e.openBlock(),e.createElementBlock("div",{key:h,class:"activity-item"},[e.createVNode(e.unref(L.Tag),{type:n.type,size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(n.user),1)]),_:2},1032,["type"]),e.createElementVNode("span",no,e.toDisplayString(n.action),1),e.createElementVNode("span",oo,e.toDisplayString(n.time),1)]))),128))])]),_:1})]),e.createVNode(e.unref(L.Card),{class:"dashboard__system"},{header:e.withCtx(()=>[...a[2]||(a[2]=[e.createElementVNode("span",{class:"card-title"},"系统信息",-1)])]),default:e.withCtx(()=>[e.createElementVNode("div",lo,[a[5]||(a[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)),a[6]||(a[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)),a[7]||(a[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)),a[8]||(a[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",ao,[a[3]||(a[3]=e.createElementVNode("span",{class:"system-info__label"},"服务器状态",-1)),e.createVNode(e.unref(L.Progress),{percentage:75,status:"success"})]),e.createElementVNode("div",ro,[a[4]||(a[4]=e.createElementVNode("span",{class:"system-info__label"},"内存使用",-1)),e.createVNode(e.unref(L.Progress),{percentage:45})])])]),_:1})])}}}),[["__scopeId","data-v-44648cb1"]])},Symbol.toStringTag,{value:"Module"})),so={class:"user-page"},io={class:"toolbar"},co={class:"data-table"},mo={key:0},po={key:1},uo={class:"pagination-wrapper"},Me=Object.freeze(Object.defineProperty({__proto__:null,default:F(e.defineComponent({__name:"index",setup(t){const l=[{id:1,username:"admin",nickname:"管理员",email:"admin@example.com",phone:"13800138001",status:S.ENABLED,roles:["admin"],createTime:"2024-01-01 10:00:00"},{id:2,username:"zhangsan",nickname:"张三",email:"zhangsan@example.com",phone:"13800138002",status:S.ENABLED,roles:["editor"],createTime:"2024-01-02 10:00:00"},{id:3,username:"lisi",nickname:"李四",email:"lisi@example.com",phone:"13800138003",status:S.DISABLED,roles:["viewer"],createTime:"2024-01-03 10:00:00"},{id:4,username:"wangwu",nickname:"王五",email:"wangwu@example.com",phone:"13800138004",status:S.ENABLED,roles:["editor"],createTime:"2024-01-04 10:00:00"},{id:5,username:"zhaoliu",nickname:"赵六",email:"zhaoliu@example.com",phone:"13800138005",status:S.ENABLED,roles:["viewer"],createTime:"2024-01-05 10:00:00"}],o=e.ref(!1),i=e.ref([]),c=e.ref(0),a=e.ref(1),r=e.ref(10),n=e.reactive({keyword:"",status:void 0}),h=e.ref(!1),g=e.computed(()=>N.id?"编辑用户":"新增用户"),N=e.reactive({id:0,username:"",nickname:"",email:"",phone:"",status:S.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"}]},d=e.ref(),C=()=>{o.value=!0,setTimeout(()=>{let f=[...l];n.keyword&&(f=f.filter(m=>m.username.includes(n.keyword)||m.nickname.includes(n.keyword))),n.status!==void 0&&(f=f.filter(m=>m.status===n.status)),c.value=f.length,i.value=f.slice((a.value-1)*r.value,a.value*r.value),o.value=!1},300)},x=()=>{a.value=1,C()},p=()=>{n.keyword="",n.status=void 0,a.value=1,C()},u=()=>{Object.assign(N,{id:0,username:"",nickname:"",email:"",phone:"",status:S.ENABLED,roles:[]}),h.value=!0},b=f=>{Object.assign(N,f),h.value=!0},$=f=>{A.Message.success("删除成功"),C()},z=async()=>{var f;try{await((f=d.value)==null?void 0:f.validate()),A.Message.success(N.id?"编辑成功":"新增成功"),h.value=!1,C()}catch(m){console.error(m)}},U=f=>{A.Message.success(`已${f.status===S.ENABLED?"启用":"禁用"}用户 ${f.username}`)};return e.onMounted(()=>{C()}),(f,m)=>(e.openBlock(),e.createElementBlock("div",so,[e.createVNode(e.unref(L.Card),{class:"search-card"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Form),{model:n,inline:""},{default:e.withCtx(()=>[e.createVNode(e.unref(V.FormItem),{label:"关键词"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:n.keyword,"onUpdate:modelValue":m[0]||(m[0]=k=>n.keyword=k),placeholder:"用户名/昵称",clearable:"",onKeyup:e.withKeys(x,["enter"])},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"状态"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Select),{modelValue:n.status,"onUpdate:modelValue":m[1]||(m[1]=k=>n.status=k),options:e.unref(pe),placeholder:"请选择",clearable:""},null,8,["modelValue","options"])]),_:1}),e.createVNode(e.unref(V.FormItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(y.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(y.Button),{type:"primary",onClick:x},{default:e.withCtx(()=>[...m[11]||(m[11]=[e.createTextVNode("搜索",-1)])]),_:1}),e.createVNode(e.unref(y.Button),{onClick:p},{default:e.withCtx(()=>[...m[12]||(m[12]=[e.createTextVNode("重置",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["model"])]),_:1}),e.createVNode(e.unref(L.Card),{class:"table-card"},{default:e.withCtx(()=>[e.createElementVNode("div",io,[e.createVNode(e.unref(y.Button),{type:"primary",onClick:u},{default:e.withCtx(()=>[...m[13]||(m[13]=[e.createTextVNode("新增用户",-1)])]),_:1})]),e.createElementVNode("table",co,[m[18]||(m[18]=e.createElementVNode("thead",null,[e.createElementVNode("tr",null,[e.createElementVNode("th",null,"ID"),e.createElementVNode("th",null,"用户名"),e.createElementVNode("th",null,"昵称"),e.createElementVNode("th",null,"邮箱"),e.createElementVNode("th",null,"手机号"),e.createElementVNode("th",null,"角色"),e.createElementVNode("th",null,"状态"),e.createElementVNode("th",null,"创建时间"),e.createElementVNode("th",null,"操作")])],-1)),e.createElementVNode("tbody",null,[o.value?(e.openBlock(),e.createElementBlock("tr",mo,[...m[14]||(m[14]=[e.createElementVNode("td",{colspan:"9",class:"loading-cell"},"加载中...",-1)])])):i.value.length===0?(e.openBlock(),e.createElementBlock("tr",po,[...m[15]||(m[15]=[e.createElementVNode("td",{colspan:"9",class:"empty-cell"},"暂无数据",-1)])])):(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:2},e.renderList(i.value,k=>(e.openBlock(),e.createElementBlock("tr",{key:k.id},[e.createElementVNode("td",null,e.toDisplayString(k.id),1),e.createElementVNode("td",null,e.toDisplayString(k.username),1),e.createElementVNode("td",null,e.toDisplayString(k.nickname),1),e.createElementVNode("td",null,e.toDisplayString(k.email),1),e.createElementVNode("td",null,e.toDisplayString(k.phone),1),e.createElementVNode("td",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(k.roles,O=>(e.openBlock(),e.createBlock(e.unref(L.Tag),{key:O,size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(O),1)]),_:2},1024))),128))]),e.createElementVNode("td",null,[e.createVNode(e.unref(V.Switch),{"model-value":k.status===e.unref(S).ENABLED,"onUpdate:modelValue":O=>{k.status=O?e.unref(S).ENABLED:e.unref(S).DISABLED,U(k)}},null,8,["model-value","onUpdate:modelValue"])]),e.createElementVNode("td",null,e.toDisplayString(k.createTime),1),e.createElementVNode("td",null,[e.createVNode(e.unref(y.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(y.Button),{type:"primary",link:"",size:"small",onClick:O=>b(k)},{default:e.withCtx(()=>[...m[16]||(m[16]=[e.createTextVNode("编辑",-1)])]),_:1},8,["onClick"]),e.createVNode(e.unref(A.Popconfirm),{title:"确定删除该用户吗?",onConfirm:O=>$(k.id)},{default:e.withCtx(()=>[e.createVNode(e.unref(y.Button),{type:"danger",link:"",size:"small"},{default:e.withCtx(()=>[...m[17]||(m[17]=[e.createTextVNode("删除",-1)])]),_:1})]),_:1},8,["onConfirm"])]),_:2},1024)])]))),128))])]),e.createElementVNode("div",uo,[e.createVNode(e.unref(L.Pagination),{"current-page":a.value,"onUpdate:currentPage":m[2]||(m[2]=k=>a.value=k),"page-size":r.value,"onUpdate:pageSize":m[3]||(m[3]=k=>r.value=k),total:c.value,"page-sizes":[10,20,50,100],layout:"total, sizes, prev, pager, next",onCurrentChange:C,onSizeChange:C},null,8,["current-page","page-size","total"])])]),_:1}),e.createVNode(e.unref(A.Modal),{modelValue:h.value,"onUpdate:modelValue":m[10]||(m[10]=k=>h.value=k),title:g.value,width:"500px"},{footer:e.withCtx(()=>[e.createVNode(e.unref(y.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(y.Button),{onClick:m[9]||(m[9]=k=>h.value=!1)},{default:e.withCtx(()=>[...m[19]||(m[19]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(e.unref(y.Button),{type:"primary",onClick:z},{default:e.withCtx(()=>[...m[20]||(m[20]=[e.createTextVNode("确定",-1)])]),_:1})]),_:1})]),default:e.withCtx(()=>[e.createVNode(e.unref(V.Form),{ref_key:"formRef",ref:d,model:N,rules:B,"label-width":"80px"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.FormItem),{label:"用户名",prop:"username"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:N.username,"onUpdate:modelValue":m[4]||(m[4]=k=>N.username=k),placeholder:"请输入用户名"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"昵称",prop:"nickname"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:N.nickname,"onUpdate:modelValue":m[5]||(m[5]=k=>N.nickname=k),placeholder:"请输入昵称"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"邮箱",prop:"email"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:N.email,"onUpdate:modelValue":m[6]||(m[6]=k=>N.email=k),placeholder:"请输入邮箱"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"手机号",prop:"phone"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:N.phone,"onUpdate:modelValue":m[7]||(m[7]=k=>N.phone=k),placeholder:"请输入手机号"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"状态"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Switch),{modelValue:N.status,"onUpdate:modelValue":m[8]||(m[8]=k=>N.status=k),"active-value":e.unref(S).ENABLED,"inactive-value":e.unref(S).DISABLED},null,8,["modelValue","active-value","inactive-value"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])]))}}),[["__scopeId","data-v-d2491ae0"]])},Symbol.toStringTag,{value:"Module"})),fo={class:"role-page"},ho={class:"toolbar"},Vo={class:"data-table"},No={key:0},go={key:1},_o={class:"pagination-wrapper"},Re=Object.freeze(Object.defineProperty({__proto__:null,default:F(e.defineComponent({__name:"index",setup(t){const l=[{id:1,name:"超级管理员",code:"admin",description:"拥有所有权限",status:S.ENABLED,permissions:["*"],createTime:"2024-01-01 10:00:00"},{id:2,name:"编辑",code:"editor",description:"内容编辑权限",status:S.ENABLED,permissions:["user:read","user:write"],createTime:"2024-01-02 10:00:00"},{id:3,name:"访客",code:"viewer",description:"只读权限",status:S.ENABLED,permissions:["user:read"],createTime:"2024-01-03 10:00:00"}],o=e.ref(!1),i=e.ref([]),c=e.ref(0),a=e.ref(1),r=e.ref(10),n=e.reactive({keyword:"",status:void 0}),h=e.ref(!1),g=e.computed(()=>N.id?"编辑角色":"新增角色"),N=e.reactive({id:0,name:"",code:"",description:"",status:S.ENABLED,permissions:[]}),B={name:[{required:!0,message:"请输入角色名称",trigger:"blur"}],code:[{required:!0,message:"请输入角色编码",trigger:"blur"}]},d=e.ref(),C=()=>{o.value=!0,setTimeout(()=>{let U=[...l];n.keyword&&(U=U.filter(f=>f.name.includes(n.keyword)||f.code.includes(n.keyword))),n.status!==void 0&&(U=U.filter(f=>f.status===n.status)),c.value=U.length,i.value=U.slice((a.value-1)*r.value,a.value*r.value),o.value=!1},300)},x=()=>{a.value=1,C()},p=()=>{n.keyword="",n.status=void 0,a.value=1,C()},u=()=>{Object.assign(N,{id:0,name:"",code:"",description:"",status:S.ENABLED,permissions:[]}),h.value=!0},b=U=>{Object.assign(N,U),h.value=!0},$=U=>{A.Message.success("删除成功"),C()},z=async()=>{var U;try{await((U=d.value)==null?void 0:U.validate()),A.Message.success(N.id?"编辑成功":"新增成功"),h.value=!1,C()}catch(f){console.error(f)}};return e.onMounted(()=>{C()}),(U,f)=>(e.openBlock(),e.createElementBlock("div",fo,[e.createVNode(e.unref(L.Card),{class:"search-card"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Form),{model:n,inline:""},{default:e.withCtx(()=>[e.createVNode(e.unref(V.FormItem),{label:"关键词"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:n.keyword,"onUpdate:modelValue":f[0]||(f[0]=m=>n.keyword=m),placeholder:"角色名称/编码",clearable:"",onKeyup:e.withKeys(x,["enter"])},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"状态"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Select),{modelValue:n.status,"onUpdate:modelValue":f[1]||(f[1]=m=>n.status=m),options:e.unref(pe),placeholder:"请选择",clearable:""},null,8,["modelValue","options"])]),_:1}),e.createVNode(e.unref(V.FormItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(y.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(y.Button),{type:"primary",onClick:x},{default:e.withCtx(()=>[...f[10]||(f[10]=[e.createTextVNode("搜索",-1)])]),_:1}),e.createVNode(e.unref(y.Button),{onClick:p},{default:e.withCtx(()=>[...f[11]||(f[11]=[e.createTextVNode("重置",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["model"])]),_:1}),e.createVNode(e.unref(L.Card),{class:"table-card"},{default:e.withCtx(()=>[e.createElementVNode("div",ho,[e.createVNode(e.unref(y.Button),{type:"primary",onClick:u},{default:e.withCtx(()=>[...f[12]||(f[12]=[e.createTextVNode("新增角色",-1)])]),_:1})]),e.createElementVNode("table",Vo,[f[17]||(f[17]=e.createElementVNode("thead",null,[e.createElementVNode("tr",null,[e.createElementVNode("th",null,"ID"),e.createElementVNode("th",null,"角色名称"),e.createElementVNode("th",null,"角色编码"),e.createElementVNode("th",null,"描述"),e.createElementVNode("th",null,"状态"),e.createElementVNode("th",null,"创建时间"),e.createElementVNode("th",null,"操作")])],-1)),e.createElementVNode("tbody",null,[o.value?(e.openBlock(),e.createElementBlock("tr",No,[...f[13]||(f[13]=[e.createElementVNode("td",{colspan:"7",class:"loading-cell"},"加载中...",-1)])])):i.value.length===0?(e.openBlock(),e.createElementBlock("tr",go,[...f[14]||(f[14]=[e.createElementVNode("td",{colspan:"7",class:"empty-cell"},"暂无数据",-1)])])):(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:2},e.renderList(i.value,m=>(e.openBlock(),e.createElementBlock("tr",{key:m.id},[e.createElementVNode("td",null,e.toDisplayString(m.id),1),e.createElementVNode("td",null,e.toDisplayString(m.name),1),e.createElementVNode("td",null,[e.createVNode(e.unref(L.Tag),{type:"primary",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(m.code),1)]),_:2},1024)]),e.createElementVNode("td",null,e.toDisplayString(m.description),1),e.createElementVNode("td",null,[e.createVNode(e.unref(L.Tag),{type:m.status===e.unref(S).ENABLED?"success":"danger",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(m.status===e.unref(S).ENABLED?"启用":"禁用"),1)]),_:2},1032,["type"])]),e.createElementVNode("td",null,e.toDisplayString(m.createTime),1),e.createElementVNode("td",null,[e.createVNode(e.unref(y.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(y.Button),{type:"primary",link:"",size:"small",onClick:k=>b(m)},{default:e.withCtx(()=>[...f[15]||(f[15]=[e.createTextVNode("编辑",-1)])]),_:1},8,["onClick"]),e.createVNode(e.unref(A.Popconfirm),{title:"确定删除该角色吗?",onConfirm:k=>$(m.id)},{default:e.withCtx(()=>[e.createVNode(e.unref(y.Button),{type:"danger",link:"",size:"small"},{default:e.withCtx(()=>[...f[16]||(f[16]=[e.createTextVNode("删除",-1)])]),_:1})]),_:1},8,["onConfirm"])]),_:2},1024)])]))),128))])]),e.createElementVNode("div",_o,[e.createVNode(e.unref(L.Pagination),{"current-page":a.value,"onUpdate:currentPage":f[2]||(f[2]=m=>a.value=m),"page-size":r.value,"onUpdate:pageSize":f[3]||(f[3]=m=>r.value=m),total:c.value,"page-sizes":[10,20,50,100],layout:"total, sizes, prev, pager, next",onCurrentChange:C,onSizeChange:C},null,8,["current-page","page-size","total"])])]),_:1}),e.createVNode(e.unref(A.Modal),{modelValue:h.value,"onUpdate:modelValue":f[9]||(f[9]=m=>h.value=m),title:g.value,width:"500px"},{footer:e.withCtx(()=>[e.createVNode(e.unref(y.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(y.Button),{onClick:f[8]||(f[8]=m=>h.value=!1)},{default:e.withCtx(()=>[...f[18]||(f[18]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(e.unref(y.Button),{type:"primary",onClick:z},{default:e.withCtx(()=>[...f[19]||(f[19]=[e.createTextVNode("确定",-1)])]),_:1})]),_:1})]),default:e.withCtx(()=>[e.createVNode(e.unref(V.Form),{ref_key:"formRef",ref:d,model:N,rules:B,"label-width":"80px"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.FormItem),{label:"角色名称",prop:"name"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:N.name,"onUpdate:modelValue":f[4]||(f[4]=m=>N.name=m),placeholder:"请输入角色名称"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"角色编码",prop:"code"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:N.code,"onUpdate:modelValue":f[5]||(f[5]=m=>N.code=m),placeholder:"请输入角色编码"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"描述"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:N.description,"onUpdate:modelValue":f[6]||(f[6]=m=>N.description=m),placeholder:"请输入描述"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"状态"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Switch),{modelValue:N.status,"onUpdate:modelValue":f[7]||(f[7]=m=>N.status=m),"active-value":e.unref(S).ENABLED,"inactive-value":e.unref(S).DISABLED},null,8,["modelValue","active-value","inactive-value"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])]))}}),[["__scopeId","data-v-8ad30bc6"]])},Symbol.toStringTag,{value:"Module"})),yo={class:"menu-page"},Eo={class:"toolbar"},ko={class:"menu-tree"},Co={class:"tree-table"},wo={class:"tree-row tree-row--level-0"},So=["onClick"],xo=["onClick"],ze=Object.freeze(Object.defineProperty({__proto__:null,default:F(e.defineComponent({__name:"index",setup(t){const l=[{id:1,parentId:null,name:"Dashboard",path:"/dashboard",component:"dashboard/index",redirect:"",icon:"dashboard",title:"仪表盘",type:M.MENU,sort:1,status:S.ENABLED,hidden:!1,keepAlive:!0},{id:2,parentId:null,name:"System",path:"/system",component:"",redirect:"/system/user",icon:"setting",title:"系统管理",type:M.DIRECTORY,sort:2,status:S.ENABLED,hidden:!1,keepAlive:!1,children:[{id:21,parentId:2,name:"SystemUser",path:"/system/user",component:"system/user/index",redirect:"",icon:"user",title:"用户管理",type:M.MENU,sort:1,status:S.ENABLED,hidden:!1,keepAlive:!0},{id:22,parentId:2,name:"SystemRole",path:"/system/role",component:"system/role/index",redirect:"",icon:"role",title:"角色管理",type:M.MENU,sort:2,status:S.ENABLED,hidden:!1,keepAlive:!0},{id:23,parentId:2,name:"SystemMenu",path:"/system/menu",component:"system/menu/index",redirect:"",icon:"menu",title:"菜单管理",type:M.MENU,sort:3,status:S.ENABLED,hidden:!1,keepAlive:!0}]}],o=e.ref(!1),i=e.ref([]),c=e.ref(!1),a=e.computed(()=>r.id?"编辑菜单":"新增菜单"),r=e.reactive({id:0,parentId:null,name:"",path:"",component:"",redirect:"",icon:"",title:"",type:M.MENU,sort:0,status:S.ENABLED,hidden:!1,keepAlive:!0}),n={name:[{required:!0,message:"请输入菜单名称",trigger:"blur"}],path:[{required:!0,message:"请输入路由路径",trigger:"blur"}],title:[{required:!0,message:"请输入菜单标题",trigger:"blur"}]},h=e.ref(),g=()=>{o.value=!0,setTimeout(()=>{i.value=l,o.value=!1},300)},N=(x=null)=>{Object.assign(r,{id:0,parentId:x,name:"",path:"",component:"",redirect:"",icon:"",title:"",type:M.MENU,sort:0,status:S.ENABLED,hidden:!1,keepAlive:!0}),c.value=!0},B=x=>{Object.assign(r,x),c.value=!0},d=async()=>{var x;try{await((x=h.value)==null?void 0:x.validate()),A.Message.success(r.id?"编辑成功":"新增成功"),c.value=!1,g()}catch(p){console.error(p)}},C=x=>({dashboard:"📊",system:"⚙️",user:"👤",role:"👥",menu:"📋",setting:"🔧"})[x||""]||"📄";return e.onMounted(()=>{g()}),(x,p)=>(e.openBlock(),e.createElementBlock("div",yo,[e.createVNode(e.unref(L.Card),{class:"menu-card"},{default:e.withCtx(()=>[e.createElementVNode("div",Eo,[e.createVNode(e.unref(y.Button),{type:"primary",onClick:p[0]||(p[0]=u=>N())},{default:e.withCtx(()=>[...p[14]||(p[14]=[e.createTextVNode("新增菜单",-1)])]),_:1})]),e.createElementVNode("div",ko,[e.createElementVNode("table",Co,[p[19]||(p[19]=e.createElementVNode("thead",null,[e.createElementVNode("tr",null,[e.createElementVNode("th",null,"菜单名称"),e.createElementVNode("th",null,"图标"),e.createElementVNode("th",null,"路由路径"),e.createElementVNode("th",null,"类型"),e.createElementVNode("th",null,"排序"),e.createElementVNode("th",null,"状态"),e.createElementVNode("th",null,"操作")])],-1)),e.createElementVNode("tbody",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,u=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:u.id},[e.createElementVNode("tr",wo,[e.createElementVNode("td",null,[e.createElementVNode("span",{class:"menu-name",onClick:b=>B(u)},e.toDisplayString(u.title),9,So)]),e.createElementVNode("td",null,e.toDisplayString(C(u.icon)),1),e.createElementVNode("td",null,e.toDisplayString(u.path),1),e.createElementVNode("td",null,[e.createVNode(e.unref(L.Tag),{type:u.type===e.unref(M).DIRECTORY?"primary":u.type===e.unref(M).MENU?"success":"warning",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(u.type===e.unref(M).DIRECTORY?"目录":u.type===e.unref(M).MENU?"菜单":"按钮"),1)]),_:2},1032,["type"])]),e.createElementVNode("td",null,e.toDisplayString(u.sort),1),e.createElementVNode("td",null,[e.createVNode(e.unref(L.Tag),{type:u.status===e.unref(S).ENABLED?"success":"danger",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(u.status===e.unref(S).ENABLED?"启用":"禁用"),1)]),_:2},1032,["type"])]),e.createElementVNode("td",null,[e.createVNode(e.unref(y.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(y.Button),{type:"primary",link:"",size:"small",onClick:b=>N(u.id)},{default:e.withCtx(()=>[...p[15]||(p[15]=[e.createTextVNode("新增",-1)])]),_:1},8,["onClick"]),e.createVNode(e.unref(y.Button),{type:"primary",link:"",size:"small",onClick:b=>B(u)},{default:e.withCtx(()=>[...p[16]||(p[16]=[e.createTextVNode("编辑",-1)])]),_:1},8,["onClick"])]),_:2},1024)])]),u.children?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(u.children,b=>(e.openBlock(),e.createElementBlock("tr",{key:b.id,class:"tree-row tree-row--level-1"},[e.createElementVNode("td",null,[p[17]||(p[17]=e.createElementVNode("span",{class:"tree-indent"},null,-1)),e.createElementVNode("span",{class:"menu-name",onClick:$=>B(b)},e.toDisplayString(b.title),9,xo)]),e.createElementVNode("td",null,e.toDisplayString(C(b.icon)),1),e.createElementVNode("td",null,e.toDisplayString(b.path),1),e.createElementVNode("td",null,[e.createVNode(e.unref(L.Tag),{type:b.type===e.unref(M).DIRECTORY?"primary":b.type===e.unref(M).MENU?"success":"warning",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(b.type===e.unref(M).DIRECTORY?"目录":b.type===e.unref(M).MENU?"菜单":"按钮"),1)]),_:2},1032,["type"])]),e.createElementVNode("td",null,e.toDisplayString(b.sort),1),e.createElementVNode("td",null,[e.createVNode(e.unref(L.Tag),{type:b.status===e.unref(S).ENABLED?"success":"danger",size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(b.status===e.unref(S).ENABLED?"启用":"禁用"),1)]),_:2},1032,["type"])]),e.createElementVNode("td",null,[e.createVNode(e.unref(y.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(y.Button),{type:"primary",link:"",size:"small",onClick:$=>B(b)},{default:e.withCtx(()=>[...p[18]||(p[18]=[e.createTextVNode("编辑",-1)])]),_:1},8,["onClick"])]),_:2},1024)])]))),128)):e.createCommentVNode("",!0)],64))),128))])])])]),_:1}),e.createVNode(e.unref(A.Modal),{modelValue:c.value,"onUpdate:modelValue":p[13]||(p[13]=u=>c.value=u),title:a.value,width:"600px"},{footer:e.withCtx(()=>[e.createVNode(e.unref(y.Space),null,{default:e.withCtx(()=>[e.createVNode(e.unref(y.Button),{onClick:p[12]||(p[12]=u=>c.value=!1)},{default:e.withCtx(()=>[...p[20]||(p[20]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(e.unref(y.Button),{type:"primary",onClick:d},{default:e.withCtx(()=>[...p[21]||(p[21]=[e.createTextVNode("确定",-1)])]),_:1})]),_:1})]),default:e.withCtx(()=>[e.createVNode(e.unref(V.Form),{ref_key:"formRef",ref:h,model:r,rules:n,"label-width":"80px"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.FormItem),{label:"上级菜单"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:r.parentId,"onUpdate:modelValue":p[1]||(p[1]=u=>r.parentId=u),placeholder:"上级菜单ID",disabled:""},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"菜单类型"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Select),{modelValue:r.type,"onUpdate:modelValue":p[2]||(p[2]=u=>r.type=u),options:e.unref(Ae)},null,8,["modelValue","options"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"菜单名称",prop:"name"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:r.name,"onUpdate:modelValue":p[3]||(p[3]=u=>r.name=u),placeholder:"请输入菜单名称(路由name)"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"菜单标题",prop:"title"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:r.title,"onUpdate:modelValue":p[4]||(p[4]=u=>r.title=u),placeholder:"请输入菜单标题"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"路由路径",prop:"path"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:r.path,"onUpdate:modelValue":p[5]||(p[5]=u=>r.path=u),placeholder:"请输入路由路径"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"组件路径"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:r.component,"onUpdate:modelValue":p[6]||(p[6]=u=>r.component=u),placeholder:"请输入组件路径"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"图标"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Input),{modelValue:r.icon,"onUpdate:modelValue":p[7]||(p[7]=u=>r.icon=u),placeholder:"请输入图标名称"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"排序"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.InputNumber),{modelValue:r.sort,"onUpdate:modelValue":p[8]||(p[8]=u=>r.sort=u),min:0},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"状态"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Switch),{modelValue:r.status,"onUpdate:modelValue":p[9]||(p[9]=u=>r.status=u),"active-value":e.unref(S).ENABLED,"inactive-value":e.unref(S).DISABLED},null,8,["modelValue","active-value","inactive-value"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"隐藏"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Switch),{modelValue:r.hidden,"onUpdate:modelValue":p[10]||(p[10]=u=>r.hidden=u)},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(V.FormItem),{label:"缓存"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Switch),{modelValue:r.keepAlive,"onUpdate:modelValue":p[11]||(p[11]=u=>r.keepAlive=u)},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])]))}}),[["__scopeId","data-v-2a272a68"]])},Symbol.toStringTag,{value:"Module"}));s.Footer=vt,s.Forbidden=Te,s.Gender=$e,s.GenderOptions=Kn,s.GenderText=jn,s.Header=xe,s.Layout=me,s.Login=Be,s.MenuType=M,s.MenuTypeOptions=Ae,s.MenuTypeText=qn,s.NotFound=be,s.Sidebar=Se,s.Status=S,s.StatusOptions=pe,s.StatusText=On,s.Tabs=Gt,s.batchDeleteUsers=zn,s.clearToken=de,s.createLayoutRoute=Vn,s.createMenu=bn,s.createRole=Cn,s.createRouter=Nn,s.createUser=Un,s.defaultDynamicRoutes=He,s.deleteMenu=In,s.deleteRole=Sn,s.deleteUser=Rn,s.errorRoute=le,s.getMenuList=Bn,s.getMenuTree=Le,s.getRefreshToken=We,s.getRoleDetail=kn,s.getRoleList=En,s.getToken=J,s.getTokenExpire=Ee,s.getUserDetail=An,s.getUserInfo=De,s.getUserList=$n,s.hasPermission=fn,s.hasRole=Ie,s.hasToken=ce,s.http=I,s.isAdmin=hn,s.isTokenExpired=we,s.layoutRoute=ae,s.local=E,s.localStorageUtil=X,s.login=gn,s.logout=_n,s.mockMenuData=ge,s.permissionDirective=Yn,s.refreshToken=yn,s.resetPassword=Pn,s.resetRouter=Ge,s.router=te,s.session=Ke,s.sessionStorageUtil=G,s.setRefreshToken=ye,s.setToken=_e,s.setTokenExpire=ke,s.setTokenInfo=Ce,s.setupRouterGuards=Ln,s.staticRoutes=oe,s.updateMenu=Tn,s.updateRole=wn,s.updateRoleStatus=xn,s.updateUser=Mn,s.updateUserStatus=Fn,s.useApp=cn,s.useAppStore=q,s.useAuth=mn,s.useAuthStore=Q,s.useForm=pn,s.useMenuStore=Y,s.useTable=un,s.useUserStore=P,Object.defineProperty(s,Symbol.toStringTag,{value:"Module"})});
@@ -0,0 +1,16 @@
1
+ import { Router } from 'vue-router';
2
+ interface RouterGuardOptions {
3
+ whiteList?: string[];
4
+ loginPath?: string;
5
+ homePath?: string;
6
+ fetchUserInfo?: () => Promise<any>;
7
+ fetchMenu?: () => Promise<any>;
8
+ onLoginSuccess?: () => void;
9
+ }
10
+ /**
11
+ * 设置路由守卫
12
+ * @param router 路由实例
13
+ * @param options 配置选项
14
+ */
15
+ export declare function setupRouterGuards(router: Router, options?: RouterGuardOptions): void;
16
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xto-fronted",
3
- "version": "0.3.6",
3
+ "version": "0.3.7",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "XTO 前端应用框架",
package/src/index.ts CHANGED
@@ -33,6 +33,7 @@ export { default as router, resetRouter } from './router'
33
33
  export * from './router/staticRoutes'
34
34
  export * from './router/dynamicRoutes'
35
35
  export { createLayoutRoute, createRouter } from './router/layoutRoute'
36
+ export { setupRouterGuards } from './router/guards'
36
37
 
37
38
  // API
38
39
  export * from './api/auth'