xto-fronted 0.2.2 → 0.2.4
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/components/Layout/Breadcrumb.vue.d.ts +2 -0
- package/dist/index.es.js +622 -575
- package/dist/index.umd.js +7 -7
- package/dist/router/dynamicRoutes.d.ts +2 -0
- package/dist/router/index.d.ts +2 -1
- package/dist/router/staticRoutes.d.ts +2 -0
- package/dist/style.css +1 -1
- package/dist/utils/request.d.ts +5 -0
- package/package.json +5 -5
package/dist/index.umd.js
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
(function(a,z){typeof exports=="object"&&typeof module<"u"?z(exports,require("axios"),require("@xto/feedback"),require("vue"),require("pinia"),require("vue-router"),require("@xto/navigation"),require("@xto/base"),require("@xto/form")):typeof define=="function"&&define.amd?define(["exports","axios","@xto/feedback","vue","pinia","vue-router","@xto/navigation","@xto/base","@xto/form"],z):(a=typeof globalThis<"u"?globalThis:a||self,z(a.XtoFronted={},a.axios,a.feedback,a.Vue,a.Pinia,a.VueRouter,a.navigation,a.base,a.form))})(this,function(a,z,I,e,W,b,x,$,M){"use strict";let G={...{appName:"XTO App",baseUrl:"",appId:"",clientId:"",indexPath:"/dashboard",loginPath:"/login"}};function se(t){G={...G,...t}}function S(){return G}function we(t){return G[t]}const Y=()=>`tooyu-cloud:${S().appId}:`,re=t=>({get(o){const n=Y(),s=t.getItem(n+o);if(!s)return null;try{return JSON.parse(s)}catch{return s}},set(o,n){const s=Y();if(n==null){t.removeItem(s+o);return}const r=typeof n=="string"?n:JSON.stringify(n);t.setItem(s+o,r)},remove(o){const n=Y();t.removeItem(n+o)},clear(){const o=Y();Object.keys(t).forEach(s=>{s.startsWith(o)&&t.removeItem(s)})}}),q=re(window.localStorage),H=re(window.sessionStorage),k={get:q.get,set:q.set,remove:q.remove,clear:q.clear},Ne={get:H.get,set:H.set,remove:H.remove,clear:H.clear},J="login_info",Ee="user_info",A=()=>k.get(J),ae=t=>{const o={accessToken:t.access_token,refreshToken:t.refresh_token,expiresTime:t.expires_time,refreshTime:t.refresh_time,tokenType:t.token_type,code:t.code};k.set(J,o)},Q=()=>{const t=A();return(t==null?void 0:t.accessToken)||null},le=()=>{const t=A();return(t==null?void 0:t.tokenType)||"Bearer"},Ce=()=>{const t=A();return(t==null?void 0:t.code)||null},Z=()=>{k.remove(J),k.remove(Ee)},v=()=>!!Q(),Ve=()=>{const t=S(),o=z.create({baseURL:t.baseUrl,timeout:15e3,headers:{"Content-Type":"application/json"}});return o.interceptors.request.use(n=>{const s=Q();if(s){const r=le();n.headers.Authorization=`${r} ${s}`}return n},n=>Promise.reject(n)),o.interceptors.response.use(n=>{const{data:s}=n;return s.code===200||s.code===0?n:(I.Message.error(s.message||"请求失败"),Promise.reject(new Error(s.message||"请求失败")))},n=>{var r;const{response:s}=n;if(s)switch(s.status){case 401:case 403:I.Message.error("登录已过期,请重新登录"),Z(),window.location.href="/login";break;case 404:I.Message.error("请求资源不存在");break;case 500:I.Message.error("服务器错误");break;default:I.Message.error(((r=s.data)==null?void 0:r.message)||"请求失败")}else I.Message.error("网络连接失败");return Promise.reject(n)}),o};let X=null;function U(){return X||(X=Ve()),X}function ce(){X=null}new Proxy({},{get(t,o){return U()[o]}});const R={get(t,o){return U().get(t,o).then(n=>n.data)},post(t,o,n){return U().post(t,o,n).then(s=>s.data)},put(t,o,n){return U().put(t,o,n).then(s=>s.data)},patch(t,o,n){return U().patch(t,o,n).then(s=>s.data)},delete(t,o){return U().delete(t,o).then(n=>n.data)}},ie="/vite.svg",O=W.defineStore("app",()=>{const t=e.ref(k.get("isDark")||!1),o=e.ref(k.get("theme")||"light"),n=e.ref(k.get("layout")||"sidebar"),s=e.ref(k.get("isCollapsed")||!1),r=e.ref(k.get("showTabs")??!0),h=e.ref(k.get("showFooter")??!0),c=e.ref(k.get("showBreadcrumb")??!0),l=e.ref(k.get("primaryColor")||"#409eff"),d=e.ref(k.get("isGrayscale")||!1),u=e.ref([]),f=e.computed(()=>t.value?"dark":"light"),_=()=>{t.value=!t.value,o.value=t.value?"dark":"light",m()},p=N=>{o.value=N,t.value=N==="dark",m()},m=()=>{const N=document.documentElement;t.value?N.classList.add("dark"):N.classList.remove("dark"),k.set("isDark",t.value),k.set("theme",o.value)},i=()=>{s.value=!s.value,k.set("isCollapsed",s.value)},y=N=>{n.value=N,k.set("layout",N)},g=()=>{r.value=!r.value,k.set("showTabs",r.value)},w=()=>{h.value=!h.value,k.set("showFooter",h.value)},C=()=>{c.value=!c.value,k.set("showBreadcrumb",c.value)},B=N=>{l.value=N,document.documentElement.style.setProperty("--color-primary",N),k.set("primaryColor",N)},D=N=>{d.value=N;const j=document.documentElement;N?j.classList.add("grayscale"):j.classList.remove("grayscale"),k.set("isGrayscale",N)},F=N=>{u.value.includes(N)||u.value.push(N)},L=N=>{const j=u.value.indexOf(N);j>-1&&u.value.splice(j,1)},E=()=>{u.value=[]},V=()=>{m(),l.value!=="#409eff"&&document.documentElement.style.setProperty("--color-primary",l.value),d.value&&document.documentElement.classList.add("grayscale")};return e.watch(t,m),{isDark:t,theme:o,layout:n,isCollapsed:s,showTabs:r,showFooter:h,showBreadcrumb:c,primaryColor:l,isGrayscale:d,cachedViews:u,themeClass:f,toggleTheme:_,toggleCollapse:i,setTheme:p,setLayout:y,toggleTabs:g,toggleFooter:w,toggleBreadcrumb:C,setPrimaryColor:B,setGrayscale:D,addCachedView:F,removeCachedView:L,clearCachedViews:E,initTheme:V}}),ee=W.defineStore("auth",()=>{const t=e.ref(A()),o=e.computed(()=>v()),n=l=>{ae(l),t.value=A()},s=()=>{t.value=null,Z()},r=e.computed(()=>{var l;return((l=t.value)==null?void 0:l.accessToken)||null}),h=e.computed(()=>{var l;return((l=t.value)==null?void 0:l.tokenType)||"Bearer"}),c=e.computed(()=>{var l;return((l=t.value)==null?void 0:l.code)||null});return{loginInfo:t,isLoggedIn:o,accessToken:r,tokenType:h,code:c,login:n,logout:s}}),te=W.defineStore("user",()=>{const t=e.ref(k.get("user_info")),o=e.computed(()=>!!t.value),n=e.computed(()=>{var l;return((l=t.value)==null?void 0:l.userName)||""}),s=e.computed(()=>{var l;return((l=t.value)==null?void 0:l.avatar)||""}),r=e.computed(()=>{var l;return(l=t.value)==null?void 0:l.userId});return{userInfo:t,isLoggedIn:o,userName:n,avatar:s,userId:r,setUserInfo:l=>{t.value=l,k.set("user_info",l)},clearUserInfo:()=>{t.value=null,k.remove("user_info")}}}),P=W.defineStore("menu",()=>{const t="menu_list",o="menu_btn_list",n=e.ref(k.get(t)||[]),s=e.ref(k.get(o)||{}),r=e.computed(()=>n.value.length>0),h=e.computed(()=>{const _=S();function p(i){if(i&&i.length>0)for(let y=0;y<i.length;y++){const g=i[y];if(g.default)return g.path;{const w=p(g.children||[]);if(w)return w}}return null}return p(n.value)||_.indexPath||"/dashboard"}),c=(_,p)=>{const m=[];return!_||_.length<=0||_.forEach(i=>{if(i.type===1){const y={code:i.menuCode,name:i.menuName,path:"",title:i.menuName},g=p||"";let w=s.value[g]||[];w.push(y),s.value[g]=w}else{const y=[];let g=i.menuUrl,w=i.isOut||!1;!w&&i.menuUrl&&(i.menuUrl.startsWith("http")?g="/iframe/"+encodeURIComponent(g):i.menuUrl.startsWith("keep-alive:")&&(g="/iframe/keep-alive/"+encodeURIComponent(g.split("keep-alive:")[1])));const C={code:i.menuCode,name:i.menuName,path:g,icon:"grid",closable:i.closable,default:i.isDefault,out:w,children:y,title:i.menuName};if(m.push(C),i.children&&i.children.length>0){const B=c(i.children,i.menuUrl);C.children=B}}}),m},l=_=>{n.value=_,k.set(t,_)},d=_=>{const p=n.value.findIndex(m=>m.code==="home");p>-1&&n.value.splice(p,1),n.value.unshift({..._,code:"home",name:"首页"}),k.set(t,n.value)},u=(_,p)=>{if(f(),!(p!=null&&p.skipIndexMenu)){const i=S();n.value.push({code:"home",name:"首页",icon:"grid",closable:!1,default:!1,out:!1,path:i.indexPath||"/dashboard",title:"首页"})}const m=c(_);n.value.push(...m),k.set(t,n.value),k.set(o,s.value)},f=()=>{n.value=[],s.value={},k.remove(t),k.remove(o)};return{menuList:n,menuBtnListMap:s,hasMenu:r,index:h,setMenuList:l,setIndexMenu:d,setMenuFromRemote:u,clearMenu:f}});function de(t){const o=S();return R.post("/user/v1.0/login/by-domain",{appId:o.appId,clientId:o.clientId,uid:t.uid,password:t.password,code:!0})}function ue(){return R.put("/user/v1.0/user/logout")}function Be(t,o){return R.get(`/user/v1.0/login/by-code?appId=${t}&code=${o}`)}function me(){return R.get("/user/v1.0/user/get-me")}function he(){const t=S();return R.get(`/user/v1.0/menu/get-menu?appId=${t.appId}`)}function K(){const t=b.useRouter(),o=b.useRoute(),n=ee(),s=te(),r=P(),h=e.ref(!1),c=e.computed(()=>n.isLoggedIn),l=e.computed(()=>s.userInfo),d=e.computed(()=>s.userName||""),u=e.computed(()=>r.menuList),f=e.computed(()=>r.index),_=async(w,C)=>{h.value=!0;try{g();const D=(await de({uid:w,password:C})).data;n.login(D),await m(),await i();const F=o.query.redirectUrl;if(F){const L=decodeURIComponent(F);if(L.startsWith("http")){const E=D.code;location.href=L.includes("?")?`${L}&code=${E}`:`${L}?code=${E}`}else await t.replace(L)}else await t.replace(f.value||"/");return I.Message.success("登录成功"),{success:!0,data:D}}catch(B){return I.Message.error((B==null?void 0:B.message)||"登录失败"),{success:!1,error:B}}finally{h.value=!1}},p=async(w=!0)=>{const C=S();try{await ue()}catch(B){console.error("退出登录接口失败",B)}finally{g(),t.push(C.loginPath||"/login"),w&&I.Message.success("退出登录成功")}},m=async()=>{const w=await me();return s.setUserInfo(w.data),w.data},i=async()=>{const w=await he();return r.setMenuFromRemote(w.data),r.menuList},y=async()=>{if(!n.isLoggedIn)return!1;try{return s.userInfo||await m(),r.hasMenu||await i(),!0}catch(w){return console.error("初始化应用失败",w),g(),!1}},g=()=>{n.logout(),s.clearUserInfo(),r.clearMenu()};return{loading:h,isLoggedIn:c,userInfo:l,userName:d,menuList:u,indexPath:f,login:_,logout:p,loadUserInfo:m,loadMenu:i,initApp:y,clearAllState:g}}function Se(){const t=P(),o=ee(),n=te(),s=e.computed(()=>o.isLoggedIn),r=e.computed(()=>n.userName),h=e.computed(()=>n.userInfo),c=f=>{const _=window.location.pathname,m=(t.menuBtnListMap[_]||[]).map(i=>i.code);return Array.isArray(f)?f.some(i=>m.includes(i)):m.includes(f)};return{isLoggedIn:s,userName:r,userInfo:h,hasPermission:c,hasAnyPermission:f=>f.some(_=>c(_)),hasAllPermissions:f=>f.every(_=>c(_)),getCurrentPagePermissions:()=>{const f=window.location.pathname;return(t.menuBtnListMap[f]||[]).map(p=>p.code)}}}function ne(){const t=b.useRoute(),o=b.useRouter(),n=P(),s=O(),r=e.ref(""),h=e.computed(()=>t.path),c=e.computed(()=>s.isCollapsed),l=e.computed(()=>n.menuList),d=e.computed(()=>n.hasMenu),u=(y,g="")=>{const w=[];return y.forEach(C=>{C.children&&C.children.length>0?w.push(...u(C.children,C.title)):w.push({...C,parentTitle:g})}),w},f=e.computed(()=>r.value.trim()?u(l.value).filter(g=>g.title.toLowerCase().includes(r.value.toLowerCase())):[]),_=e.computed(()=>r.value.trim()?l.value.map(y=>{if(y.children&&y.children.length>0){const g=y.children.filter(w=>w.title.toLowerCase().includes(r.value.toLowerCase()));return g.length>0?{...y,children:g}:null}return y.title.toLowerCase().includes(r.value.toLowerCase())?y:null}).filter(Boolean):l.value);return{searchKeyword:r,activeMenu:h,isCollapsed:c,menuList:l,hasMenu:d,searchResults:f,filteredMenuList:_,flattenMenus:u,handleMenuSelect:y=>{y&&y!==t.path&&(o.push(y),r.value="")},handleSearchItemClick:y=>{o.push(y),r.value=""},clearSearch:()=>{r.value=""}}}function be(t,o={}){const{rules:n,onSubmit:s}=o,r=e.ref(),h=e.reactive({...t}),c=e.ref(!1),l=e.ref(!1),d=e.ref(!1),u=()=>{p(),d.value=!1,l.value=!0},f=i=>{Object.assign(h,i),d.value=!0,l.value=!0},_=()=>{l.value=!1,p()},p=()=>{var i;Object.keys(t).forEach(y=>{h[y]=t[y]}),(i=r.value)==null||i.resetFields()};return{formRef:r,formData:h,rules:n,loading:c,visible:l,isEdit:d,openAdd:u,openEdit:f,close:_,resetForm:p,handleSubmit:async()=>{var i;try{await((i=r.value)==null?void 0:i.validate()),c.value=!0,await(s==null?void 0:s(h)),_()}catch(y){console.error(y)}finally{c.value=!1}}}}function Ie(t){const{fetchData:o,defaultPageSize:n=10}=t,s=e.ref(!1),r=e.ref([]),h=e.ref(0),c=e.ref(1),l=e.ref(n),d=e.reactive({}),u=async()=>{s.value=!0;try{const g={...d,page:c.value,pageSize:l.value},w=await o(g);r.value=w.list,h.value=w.total}catch(g){console.error(g)}finally{s.value=!1}},f=()=>{c.value=1,u()},_=()=>{Object.keys(d).forEach(g=>{d[g]=void 0}),c.value=1,u()},p=g=>{c.value=g,u()},m=g=>{l.value=g,c.value=1,u()},i=()=>{u()},y=e.computed(()=>({current:c.value,pageSize:l.value,total:h.value}));return{loading:s,data:r,total:h,currentPage:c,pageSize:l,searchParams:d,pagination:y,getData:u,handleSearch:f,handleReset:_,handlePageChange:p,handleSizeChange:m,refresh:i}}const Le={class:"sidebar"},Te={class:"sidebar__logo"},$e={key:1},xe={key:0,class:"sidebar__user"},Me={class:"sidebar__user-info"},Ue={class:"sidebar__user-name"},Pe={class:"sidebar__user-role"},De=e.defineComponent({__name:"Sidebar",setup(t){const{logout:o,userName:n,userInfo:s}=K(),r=S(),{activeMenu:h,isCollapsed:c,filteredMenuList:l,handleMenuSelect:d}=ne();return(u,f)=>{var _;return e.openBlock(),e.createElementBlock("div",Le,[e.createElementVNode("div",Te,[f[0]||(f[0]=e.createElementVNode("img",{src:ie,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,!e.unref(c)]])]),e.createVNode(e.unref(x.Menu),{"default-active":e.unref(h),collapse:e.unref(c),"collapse-transition":!1,class:"sidebar__menu",onSelect:e.unref(d)},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(l),p=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:p.path},[p.children&&p.children.length>0?(e.openBlock(),e.createBlock(e.unref(x.SubMenu),{key:0,index:p.path,icon:"grid"},{title:e.withCtx(()=>[e.withDirectives(e.createElementVNode("span",null,e.toDisplayString(p.title),513),[[e.vShow,!e.unref(c)]])]),default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.children,m=>(e.openBlock(),e.createBlock(e.unref(x.MenuItem),{key:m.path,index:m.path,icon:"grid"},{default:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(m.title),1)]),_:2},1032,["index"]))),128))]),_:2},1032,["index"])):(e.openBlock(),e.createBlock(e.unref(x.MenuItem),{key:1,index:p.path,icon:"grid"},{default:e.withCtx(()=>[e.unref(c)?(e.openBlock(),e.createBlock(e.unref(I.Tooltip),{key:0,content:p.title,placement:"right"},{default:e.withCtx(()=>[...f[1]||(f[1]=[e.createElementVNode("span",null,null,-1)])]),_:1},8,["content"])):(e.openBlock(),e.createElementBlock("span",$e,e.toDisplayString(p.title),1))]),_:2},1032,["index"]))],64))),128))]),_:1},8,["default-active","collapse","onSelect"]),e.unref(c)?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",xe,[e.createElementVNode("div",Me,[e.createElementVNode("span",Ue,e.toDisplayString(e.unref(n)||"用户"),1),e.createElementVNode("span",Pe,e.toDisplayString(((_=e.unref(s))==null?void 0:_.departmentName)||""),1)]),e.createVNode(e.unref($.Button),{type:"text",size:"small",onClick:e.unref(o)},{default:e.withCtx(()=>[...f[2]||(f[2]=[e.createTextVNode("退出",-1)])]),_:1},8,["onClick"])]))])}}}),T=(t,o)=>{const n=t.__vccOpts||t;for(const[s,r]of o)n[s]=r;return n},fe=T(De,[["__scopeId","data-v-363654cb"]]),Fe=`<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2">
|
|
1
|
+
(function(l,z){typeof exports=="object"&&typeof module<"u"?z(exports,require("axios"),require("@xto/feedback"),require("vue"),require("pinia"),require("vue-router"),require("@xto/navigation"),require("@xto/base"),require("@xto/form")):typeof define=="function"&&define.amd?define(["exports","axios","@xto/feedback","vue","pinia","vue-router","@xto/navigation","@xto/base","@xto/form"],z):(l=typeof globalThis<"u"?globalThis:l||self,z(l.XtoFronted={},l.axios,l.feedback,l.Vue,l.Pinia,l.VueRouter,l.navigation,l.base,l.form))})(this,function(l,z,S,e,W,B,M,$,x){"use strict";let G={...{appName:"XTO App",baseUrl:"",appId:"",clientId:"",indexPath:"/dashboard",loginPath:"/login"}};function se(t){G={...G,...t}}function L(){return G}function we(t){return G[t]}const Y=()=>`tooyu-cloud:${L().appId}:`,re=t=>({get(o){const n=Y(),s=t.getItem(n+o);if(!s)return null;try{return JSON.parse(s)}catch{return s}},set(o,n){const s=Y();if(n==null){t.removeItem(s+o);return}const r=typeof n=="string"?n:JSON.stringify(n);t.setItem(s+o,r)},remove(o){const n=Y();t.removeItem(n+o)},clear(){const o=Y();Object.keys(t).forEach(s=>{s.startsWith(o)&&t.removeItem(s)})}}),q=re(window.localStorage),H=re(window.sessionStorage),k={get:q.get,set:q.set,remove:q.remove,clear:q.clear},Ne={get:H.get,set:H.set,remove:H.remove,clear:H.clear},J="login_info",Ee="user_info",R=()=>k.get(J),ae=t=>{const o={accessToken:t.access_token,refreshToken:t.refresh_token,expiresTime:t.expires_time,refreshTime:t.refresh_time,tokenType:t.token_type,code:t.code};k.set(J,o)},Q=()=>{const t=R();return(t==null?void 0:t.accessToken)||null},le=()=>{const t=R();return(t==null?void 0:t.tokenType)||"Bearer"},Ce=()=>{const t=R();return(t==null?void 0:t.code)||null},Z=()=>{k.remove(J),k.remove(Ee)},v=()=>!!Q(),Ve=()=>{const t=L(),o=z.create({baseURL:t.baseUrl,timeout:15e3,headers:{"Content-Type":"application/json"}});return o.interceptors.request.use(n=>{const s=Q();if(s){const r=le();n.headers.Authorization=`${r} ${s}`}return n},n=>Promise.reject(n)),o.interceptors.response.use(n=>{if(n.config.responseType==="blob")return n;const{data:s}=n;return s.code===200||s.code===0?n:(S.Message.error(s.message||"请求失败"),Promise.reject(new Error(s.message||"请求失败")))},n=>{var r;const{response:s}=n;if(s)switch(s.status){case 401:case 403:S.Message.error("登录已过期,请重新登录"),Z(),window.location.href="/login";break;case 404:S.Message.error("请求资源不存在");break;case 500:S.Message.error("服务器错误");break;default:S.Message.error(((r=s.data)==null?void 0:r.message)||"请求失败")}else S.Message.error("网络连接失败");return Promise.reject(n)}),o};let X=null;function U(){return X||(X=Ve()),X}function ce(){X=null}new Proxy({},{get(t,o){return U()[o]}});const A={get(t,o){return U().get(t,o).then(n=>n.data)},post(t,o,n){return U().post(t,o,n).then(s=>s.data)},put(t,o,n){return U().put(t,o,n).then(s=>s.data)},patch(t,o,n){return U().patch(t,o,n).then(s=>s.data)},delete(t,o){return U().delete(t,o).then(n=>n.data)},download(t,o){return U().get(t,{...o,responseType:"blob"}).then(n=>(n.headers["content-type"]||"").includes("application/json")?n.data.text().then(r=>{try{const m=JSON.parse(r);return S.Message.error(m.message||"请求失败"),Promise.reject(new Error(m.message||"请求失败"))}catch{return S.Message.error("请求失败"),Promise.reject(new Error("请求失败"))}}):n.data)}},ie="/vite.svg",O=W.defineStore("app",()=>{const t=e.ref(k.get("isDark")||!1),o=e.ref(k.get("theme")||"light"),n=e.ref(k.get("layout")||"sidebar"),s=e.ref(k.get("isCollapsed")||!1),r=e.ref(k.get("showTabs")??!0),m=e.ref(k.get("showFooter")??!0),c=e.ref(k.get("showBreadcrumb")??!0),a=e.ref(k.get("primaryColor")||"#409eff"),d=e.ref(k.get("isGrayscale")||!1),u=e.ref([]),h=e.computed(()=>t.value?"dark":"light"),_=()=>{t.value=!t.value,o.value=t.value?"dark":"light",p()},f=N=>{o.value=N,t.value=N==="dark",p()},p=()=>{const N=document.documentElement;t.value?N.classList.add("dark"):N.classList.remove("dark"),k.set("isDark",t.value),k.set("theme",o.value)},i=()=>{s.value=!s.value,k.set("isCollapsed",s.value)},y=N=>{n.value=N,k.set("layout",N)},g=()=>{r.value=!r.value,k.set("showTabs",r.value)},w=()=>{m.value=!m.value,k.set("showFooter",m.value)},C=()=>{c.value=!c.value,k.set("showBreadcrumb",c.value)},b=N=>{a.value=N,document.documentElement.style.setProperty("--color-primary",N),k.set("primaryColor",N)},D=N=>{d.value=N;const K=document.documentElement;N?K.classList.add("grayscale"):K.classList.remove("grayscale"),k.set("isGrayscale",N)},F=N=>{u.value.includes(N)||u.value.push(N)},T=N=>{const K=u.value.indexOf(N);K>-1&&u.value.splice(K,1)},E=()=>{u.value=[]},V=()=>{p(),a.value!=="#409eff"&&document.documentElement.style.setProperty("--color-primary",a.value),d.value&&document.documentElement.classList.add("grayscale")};return e.watch(t,p),{isDark:t,theme:o,layout:n,isCollapsed:s,showTabs:r,showFooter:m,showBreadcrumb:c,primaryColor:a,isGrayscale:d,cachedViews:u,themeClass:h,toggleTheme:_,toggleCollapse:i,setTheme:f,setLayout:y,toggleTabs:g,toggleFooter:w,toggleBreadcrumb:C,setPrimaryColor:b,setGrayscale:D,addCachedView:F,removeCachedView:T,clearCachedViews:E,initTheme:V}}),ee=W.defineStore("auth",()=>{const t=e.ref(R()),o=e.computed(()=>v()),n=a=>{ae(a),t.value=R()},s=()=>{t.value=null,Z()},r=e.computed(()=>{var a;return((a=t.value)==null?void 0:a.accessToken)||null}),m=e.computed(()=>{var a;return((a=t.value)==null?void 0:a.tokenType)||"Bearer"}),c=e.computed(()=>{var a;return((a=t.value)==null?void 0:a.code)||null});return{loginInfo:t,isLoggedIn:o,accessToken:r,tokenType:m,code:c,login:n,logout:s}}),te=W.defineStore("user",()=>{const t=e.ref(k.get("user_info")),o=e.computed(()=>!!t.value),n=e.computed(()=>{var a;return((a=t.value)==null?void 0:a.userName)||""}),s=e.computed(()=>{var a;return((a=t.value)==null?void 0:a.avatar)||""}),r=e.computed(()=>{var a;return(a=t.value)==null?void 0:a.userId});return{userInfo:t,isLoggedIn:o,userName:n,avatar:s,userId:r,setUserInfo:a=>{t.value=a,k.set("user_info",a)},clearUserInfo:()=>{t.value=null,k.remove("user_info")}}}),P=W.defineStore("menu",()=>{const t="menu_list",o="menu_btn_list",n=e.ref(k.get(t)||[]),s=e.ref(k.get(o)||{}),r=e.computed(()=>n.value.length>0),m=e.computed(()=>{const _=L();function f(i){if(i&&i.length>0)for(let y=0;y<i.length;y++){const g=i[y];if(g.default)return g.path;{const w=f(g.children||[]);if(w)return w}}return null}return f(n.value)||_.indexPath||"/dashboard"}),c=(_,f)=>{const p=[];return!_||_.length<=0||_.forEach(i=>{if(i.type===1){const y={code:i.menuCode,name:i.menuName,path:"",title:i.menuName},g=f||"";let w=s.value[g]||[];w.push(y),s.value[g]=w}else{const y=[];let g=i.menuUrl,w=i.isOut||!1;!w&&i.menuUrl&&(i.menuUrl.startsWith("http")?g="/iframe/"+encodeURIComponent(g):i.menuUrl.startsWith("keep-alive:")&&(g="/iframe/keep-alive/"+encodeURIComponent(g.split("keep-alive:")[1])));const C={code:i.menuCode,name:i.menuName,path:g,icon:"grid",closable:i.closable,default:i.isDefault,out:w,children:y,title:i.menuName};if(p.push(C),i.children&&i.children.length>0){const b=c(i.children,i.menuUrl);C.children=b}}}),p},a=_=>{n.value=_,k.set(t,_)},d=_=>{const f=n.value.findIndex(p=>p.code==="home");f>-1&&n.value.splice(f,1),n.value.unshift({..._,code:"home",name:"首页"}),k.set(t,n.value)},u=(_,f)=>{if(h(),!(f!=null&&f.skipIndexMenu)){const i=L();n.value.push({code:"home",name:"首页",icon:"grid",closable:!1,default:!1,out:!1,path:i.indexPath||"/dashboard",title:"首页"})}const p=c(_);n.value.push(...p),k.set(t,n.value),k.set(o,s.value)},h=()=>{n.value=[],s.value={},k.remove(t),k.remove(o)};return{menuList:n,menuBtnListMap:s,hasMenu:r,index:m,setMenuList:a,setIndexMenu:d,setMenuFromRemote:u,clearMenu:h}});function de(t){const o=L();return A.post("/user/v1.0/login/by-domain",{appId:o.appId,clientId:o.clientId,uid:t.uid,password:t.password,code:!0})}function ue(){return A.put("/user/v1.0/user/logout")}function Be(t,o){return A.get(`/user/v1.0/login/by-code?appId=${t}&code=${o}`)}function me(){return A.get("/user/v1.0/user/get-me")}function he(){const t=L();return A.get(`/user/v1.0/menu/get-menu?appId=${t.appId}`)}function j(){const t=B.useRouter(),o=B.useRoute(),n=ee(),s=te(),r=P(),m=e.ref(!1),c=e.computed(()=>n.isLoggedIn),a=e.computed(()=>s.userInfo),d=e.computed(()=>s.userName||""),u=e.computed(()=>r.menuList),h=e.computed(()=>r.index),_=async(w,C)=>{m.value=!0;try{g();const D=(await de({uid:w,password:C})).data;n.login(D),await p(),await i();const F=o.query.redirectUrl;if(F){const T=decodeURIComponent(F);if(T.startsWith("http")){const E=D.code;location.href=T.includes("?")?`${T}&code=${E}`:`${T}?code=${E}`}else await t.replace(T)}else await t.replace(h.value||"/");return S.Message.success("登录成功"),{success:!0,data:D}}catch(b){return S.Message.error((b==null?void 0:b.message)||"登录失败"),{success:!1,error:b}}finally{m.value=!1}},f=async(w=!0)=>{const C=L();try{await ue()}catch(b){console.error("退出登录接口失败",b)}finally{g(),t.push(C.loginPath||"/login"),w&&S.Message.success("退出登录成功")}},p=async()=>{const w=await me();return s.setUserInfo(w.data),w.data},i=async()=>{const w=await he();return r.setMenuFromRemote(w.data),r.menuList},y=async()=>{if(!n.isLoggedIn)return!1;try{return s.userInfo||await p(),r.hasMenu||await i(),!0}catch(w){return console.error("初始化应用失败",w),g(),!1}},g=()=>{n.logout(),s.clearUserInfo(),r.clearMenu()};return{loading:m,isLoggedIn:c,userInfo:a,userName:d,menuList:u,indexPath:h,login:_,logout:f,loadUserInfo:p,loadMenu:i,initApp:y,clearAllState:g}}function be(){const t=P(),o=ee(),n=te(),s=e.computed(()=>o.isLoggedIn),r=e.computed(()=>n.userName),m=e.computed(()=>n.userInfo),c=h=>{const _=window.location.pathname,p=(t.menuBtnListMap[_]||[]).map(i=>i.code);return Array.isArray(h)?h.some(i=>p.includes(i)):p.includes(h)};return{isLoggedIn:s,userName:r,userInfo:m,hasPermission:c,hasAnyPermission:h=>h.some(_=>c(_)),hasAllPermissions:h=>h.every(_=>c(_)),getCurrentPagePermissions:()=>{const h=window.location.pathname;return(t.menuBtnListMap[h]||[]).map(f=>f.code)}}}function ne(){const t=B.useRoute(),o=B.useRouter(),n=P(),s=O(),r=e.ref(""),m=e.computed(()=>t.path),c=e.computed(()=>s.isCollapsed),a=e.computed(()=>n.menuList),d=e.computed(()=>n.hasMenu),u=(y,g="")=>{const w=[];return y.forEach(C=>{C.children&&C.children.length>0?w.push(...u(C.children,C.title)):w.push({...C,parentTitle:g})}),w},h=e.computed(()=>r.value.trim()?u(a.value).filter(g=>g.title.toLowerCase().includes(r.value.toLowerCase())):[]),_=e.computed(()=>r.value.trim()?a.value.map(y=>{if(y.children&&y.children.length>0){const g=y.children.filter(w=>w.title.toLowerCase().includes(r.value.toLowerCase()));return g.length>0?{...y,children:g}:null}return y.title.toLowerCase().includes(r.value.toLowerCase())?y:null}).filter(Boolean):a.value);return{searchKeyword:r,activeMenu:m,isCollapsed:c,menuList:a,hasMenu:d,searchResults:h,filteredMenuList:_,flattenMenus:u,handleMenuSelect:y=>{y&&y!==t.path&&(o.push(y),r.value="")},handleSearchItemClick:y=>{o.push(y),r.value=""},clearSearch:()=>{r.value=""}}}function Se(t,o={}){const{rules:n,onSubmit:s}=o,r=e.ref(),m=e.reactive({...t}),c=e.ref(!1),a=e.ref(!1),d=e.ref(!1),u=()=>{f(),d.value=!1,a.value=!0},h=i=>{Object.assign(m,i),d.value=!0,a.value=!0},_=()=>{a.value=!1,f()},f=()=>{var i;Object.keys(t).forEach(y=>{m[y]=t[y]}),(i=r.value)==null||i.resetFields()};return{formRef:r,formData:m,rules:n,loading:c,visible:a,isEdit:d,openAdd:u,openEdit:h,close:_,resetForm:f,handleSubmit:async()=>{var i;try{await((i=r.value)==null?void 0:i.validate()),c.value=!0,await(s==null?void 0:s(m)),_()}catch(y){console.error(y)}finally{c.value=!1}}}}function Le(t){const{fetchData:o,defaultPageSize:n=10}=t,s=e.ref(!1),r=e.ref([]),m=e.ref(0),c=e.ref(1),a=e.ref(n),d=e.reactive({}),u=async()=>{s.value=!0;try{const g={...d,page:c.value,pageSize:a.value},w=await o(g);r.value=w.list,m.value=w.total}catch(g){console.error(g)}finally{s.value=!1}},h=()=>{c.value=1,u()},_=()=>{Object.keys(d).forEach(g=>{d[g]=void 0}),c.value=1,u()},f=g=>{c.value=g,u()},p=g=>{a.value=g,c.value=1,u()},i=()=>{u()},y=e.computed(()=>({current:c.value,pageSize:a.value,total:m.value}));return{loading:s,data:r,total:m,currentPage:c,pageSize:a,searchParams:d,pagination:y,getData:u,handleSearch:h,handleReset:_,handlePageChange:f,handleSizeChange:p,refresh:i}}const Ie={class:"sidebar"},Te={class:"sidebar__logo"},$e={key:1},xe={key:0,class:"sidebar__user"},Me={class:"sidebar__user-info"},Ue={class:"sidebar__user-name"},Pe={class:"sidebar__user-role"},De=e.defineComponent({__name:"Sidebar",setup(t){const{logout:o,userName:n,userInfo:s}=j(),r=L(),{activeMenu:m,isCollapsed:c,filteredMenuList:a,handleMenuSelect:d}=ne();return(u,h)=>{var _;return e.openBlock(),e.createElementBlock("div",Ie,[e.createElementVNode("div",Te,[h[1]||(h[1]=e.createElementVNode("img",{src:ie,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,!e.unref(c)]])]),e.createVNode(e.unref(M.Menu),{modelValue:e.unref(m),"onUpdate:modelValue":h[0]||(h[0]=f=>e.isRef(m)?m.value=f:null),collapse:e.unref(c),"collapse-transition":!1,class:"sidebar__menu",onSelect:e.unref(d)},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(a),f=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:f.path},[f.children&&f.children.length>0?(e.openBlock(),e.createBlock(e.unref(M.SubMenu),{key:0,index:f.path,icon:"grid"},{title:e.withCtx(()=>[e.withDirectives(e.createElementVNode("span",null,e.toDisplayString(f.title),513),[[e.vShow,!e.unref(c)]])]),default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.children,p=>(e.openBlock(),e.createBlock(e.unref(M.MenuItem),{key:p.path,index:p.path,icon:"grid"},{default:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(p.title),1)]),_:2},1032,["index"]))),128))]),_:2},1032,["index"])):(e.openBlock(),e.createBlock(e.unref(M.MenuItem),{key:1,index:f.path,icon:"grid"},{default:e.withCtx(()=>[e.unref(c)?(e.openBlock(),e.createBlock(e.unref(S.Tooltip),{key:0,content:f.title,placement:"right"},{default:e.withCtx(()=>[...h[2]||(h[2]=[e.createElementVNode("span",null,null,-1)])]),_:1},8,["content"])):(e.openBlock(),e.createElementBlock("span",$e,e.toDisplayString(f.title),1))]),_:2},1032,["index"]))],64))),128))]),_:1},8,["modelValue","collapse","onSelect"]),e.unref(c)?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",xe,[e.createElementVNode("div",Me,[e.createElementVNode("span",Ue,e.toDisplayString(e.unref(n)||"用户"),1),e.createElementVNode("span",Pe,e.toDisplayString(((_=e.unref(s))==null?void 0:_.departmentName)||""),1)]),e.createVNode(e.unref($.Button),{type:"text",size:"small",onClick:e.unref(o)},{default:e.withCtx(()=>[...h[3]||(h[3]=[e.createTextVNode("退出",-1)])]),_:1},8,["onClick"])]))])}}}),I=(t,o)=>{const n=t.__vccOpts||t;for(const[s,r]of o)n[s]=r;return n},pe=I(De,[["__scopeId","data-v-d6c5528d"]]),Fe=`<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2">
|
|
2
2
|
<rect x="3" y="3" width="18" height="4" rx="1"/>
|
|
3
3
|
<rect x="3" y="9" width="6" height="12" rx="1"/>
|
|
4
4
|
<rect x="11" y="9" width="10" height="12" rx="1"/>
|
|
5
|
-
</svg>`,
|
|
5
|
+
</svg>`,Re=`<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2">
|
|
6
6
|
<rect x="3" y="3" width="18" height="4" rx="1"/>
|
|
7
7
|
<rect x="3" y="9" width="18" height="12" rx="1"/>
|
|
8
|
-
</svg>`,Re={class:"setting-drawer"},Oe={class:"setting-section"},ze={class:"setting-section__content"},qe={class:"layout-options"},He=["onClick"],Ke=["innerHTML"],je={class:"layout-option__label"},We={class:"setting-section"},Ge={class:"setting-section__content"},Ye={class:"setting-item"},pe=T(e.defineComponent({inheritAttrs:!1,__name:"index",props:{visible:{type:Boolean}},emits:["update:visible"],setup(t,{emit:o}){const n=O(),s={navLeft:Fe,navTop:Ae},r=[{value:"sidebar",label:"左侧导航",icon:"navLeft"},{value:"top",label:"顶部导航",icon:"navTop"}],h=e.computed({get:()=>n.layout,set:d=>n.setLayout(d)}),c=o,l=()=>{c("update:visible",!1)};return(d,u)=>(e.openBlock(),e.createBlock(e.unref(I.Drawer),{"model-value":t.visible,title:"皮肤设置",direction:"rtl",size:280,"onUpdate:modelValue":l},{default:e.withCtx(()=>[e.createElementVNode("div",Re,[e.createElementVNode("div",Oe,[u[0]||(u[0]=e.createElementVNode("h4",{class:"setting-section__title"},"导航模式",-1)),e.createElementVNode("div",ze,[e.createElementVNode("div",qe,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(r,f=>e.createElementVNode("div",{key:f.value,class:e.normalizeClass(["layout-option",{"is-active":h.value===f.value}]),onClick:_=>h.value=f.value},[e.createElementVNode("div",{class:"layout-option__preview",innerHTML:s[f.icon]},null,8,Ke),e.createElementVNode("span",je,e.toDisplayString(f.label),1)],10,He)),64))])])]),e.createElementVNode("div",We,[u[2]||(u[2]=e.createElementVNode("h4",{class:"setting-section__title"},"界面设置",-1)),e.createElementVNode("div",Ge,[e.createElementVNode("div",Ye,[u[1]||(u[1]=e.createElementVNode("span",{class:"setting-item__label"},"灰度模式",-1)),e.createVNode(e.unref(M.Switch),{"model-value":e.unref(n).isGrayscale,"onUpdate:modelValue":e.unref(n).setGrayscale},null,8,["model-value","onUpdate:modelValue"])])])])])]),_:1},8,["model-value"]))}}),[["__scopeId","data-v-14d31c8c"]]),Xe={class:"header"},Je={class:"header__left"},Qe={class:"header__right"},Ze={key:0,class:"header__search-results"},ve=["onClick"],et={class:"header__search-info"},tt={class:"header__search-title"},nt={key:0,class:"header__search-parent"},ot=["title"],st={class:"header__avatar"},rt={class:"header__user-name"},at={key:0,class:"header__dropdown"},lt={class:"header__dropdown-header"},ct={class:"header__dropdown-avatar"},it={class:"header__dropdown-info"},dt={class:"header__dropdown-name"},ut={class:"header__dropdown-role"},mt={class:"header__dropdown-menu"},oe=T(e.defineComponent({__name:"Header",props:{showCollapse:{type:Boolean}},setup(t){const o=O(),{logout:n,userName:s,userInfo:r}=K(),{searchKeyword:h,searchResults:c,handleSearchItemClick:l}=ne(),d=e.ref(!1),u=e.ref(null),f=e.ref(null),_=e.ref(!1),p=e.ref(!1),m=e.computed(()=>s.value||"用户"),i=()=>{o.toggleCollapse()},y=()=>{o.toggleTheme()},g=()=>{document.fullscreenElement?document.exitFullscreen():document.documentElement.requestFullscreen()},w=()=>{_.value=!!document.fullscreenElement},C=()=>{d.value=!d.value},B=()=>{d.value=!1},D=async()=>{B(),await n()},F=L=>{u.value&&!u.value.contains(L.target)&&B(),f.value&&!f.value.contains(L.target)&&(h.value="")};return e.onMounted(()=>{document.addEventListener("click",F),document.addEventListener("fullscreenchange",w)}),e.onUnmounted(()=>{document.removeEventListener("click",F),document.removeEventListener("fullscreenchange",w)}),(L,E)=>(e.openBlock(),e.createElementBlock("div",Xe,[e.createElementVNode("div",Je,[t.showCollapse?(e.openBlock(),e.createElementBlock("div",{key:0,class:"header__collapse",onClick:i},[...E[3]||(E[3]=[e.createElementVNode("span",null,"☰",-1)])])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Qe,[e.createElementVNode("div",{class:"header__search",ref_key:"searchRef",ref:f},[e.createVNode(e.unref(M.Input),{modelValue:e.unref(h),"onUpdate:modelValue":E[0]||(E[0]=V=>e.isRef(h)?h.value=V:null),placeholder:"搜索菜单...",size:"small",clearable:""},null,8,["modelValue"]),e.unref(c).length>0?(e.openBlock(),e.createElementBlock("div",Ze,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(c),V=>(e.openBlock(),e.createElementBlock("div",{key:V.path,class:"header__search-item",onClick:N=>e.unref(l)(V.path)},[e.createVNode(e.unref($.Icon),{name:"grid",size:16,class:"header__search-icon"}),e.createElementVNode("div",et,[e.createElementVNode("span",tt,e.toDisplayString(V.title),1),V.parentTitle?(e.openBlock(),e.createElementBlock("span",nt,e.toDisplayString(V.parentTitle),1)):e.createCommentVNode("",!0)])],8,ve))),128))])):e.createCommentVNode("",!0)],512),e.createElementVNode("div",{class:"header__action",onClick:g,title:_.value?"退出全屏":"全屏"},[e.createVNode(e.unref($.Icon),{name:_.value?"fullscreen-exit":"fullscreen",size:16},null,8,["name"])],8,ot),e.createElementVNode("div",{class:"header__action",onClick:y,title:"切换主题"},[e.createVNode(e.unref($.Icon),{name:e.unref(o).isDark?"sun":"moon",size:16},null,8,["name"])]),e.createElementVNode("div",{class:"header__action",onClick:E[1]||(E[1]=V=>p.value=!0),title:"皮肤设置"},[e.createVNode(e.unref($.Icon),{name:"skin",size:16})]),e.createElementVNode("div",{class:"header__user",ref_key:"dropdownRef",ref:u},[e.createElementVNode("div",{class:"header__user-trigger",onClick:e.withModifiers(C,["stop"])},[e.createElementVNode("div",st,[e.createElementVNode("span",null,e.toDisplayString(m.value.charAt(0)),1)]),e.createElementVNode("span",rt,e.toDisplayString(m.value),1),e.createElementVNode("span",{class:e.normalizeClass(["header__user-arrow",{"is-active":d.value}])},"▼",2)]),e.createVNode(e.Transition,{name:"dropdown"},{default:e.withCtx(()=>{var V;return[d.value?(e.openBlock(),e.createElementBlock("div",at,[e.createElementVNode("div",lt,[e.createElementVNode("div",ct,[e.createElementVNode("span",null,e.toDisplayString(m.value.charAt(0)),1)]),e.createElementVNode("div",it,[e.createElementVNode("div",dt,e.toDisplayString(m.value),1),e.createElementVNode("div",ut,e.toDisplayString(((V=e.unref(r))==null?void 0:V.departmentName)||""),1)])]),E[5]||(E[5]=e.createElementVNode("div",{class:"header__dropdown-divider"},null,-1)),e.createElementVNode("div",mt,[e.createElementVNode("div",{class:"header__dropdown-item header__dropdown-item--danger",onClick:D},[e.createVNode(e.unref($.Icon),{name:"logout",size:16}),E[4]||(E[4]=e.createElementVNode("span",null,"退出登录",-1))])])])):e.createCommentVNode("",!0)]}),_:1})],512)]),e.createVNode(pe,{visible:p.value,"onUpdate:visible":E[2]||(E[2]=V=>p.value=V)},null,8,["visible"])]))}}),[["__scopeId","data-v-175c2432"]]),ht={class:"top-menu"},ft=T(e.defineComponent({__name:"TopMenu",setup(t){const o=b.useRoute(),n=b.useRouter(),s=P(),r=e.computed(()=>o.path),h=c=>{n.push(c)};return(c,l)=>(e.openBlock(),e.createElementBlock("div",ht,[e.createVNode(e.unref(x.Menu),{"default-active":r.value,mode:"horizontal",class:"top-menu__inner",onSelect:h},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(s).menuList,d=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:d.path},[d.children&&d.children.length>0?(e.openBlock(),e.createBlock(e.unref(x.SubMenu),{key:0,index:d.path,icon:"grid"},{title:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(d.title),1)]),default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.children,u=>(e.openBlock(),e.createBlock(e.unref(x.MenuItem),{key:u.path,index:u.path,icon:"grid"},{default:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(u.title),1)]),_:2},1032,["index"]))),128))]),_:2},1032,["index"])):(e.openBlock(),e.createBlock(e.unref(x.MenuItem),{key:1,index:d.path,icon:"grid"},{default:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(d.title),1)]),_:2},1032,["index"]))],64))),128))]),_:1},8,["default-active"])]))}}),[["__scopeId","data-v-f9b502d8"]]),pt={class:"layout__main"},_t={class:"layout__content"},gt={class:"layout__top"},yt={class:"layout__content"},_e=T(e.defineComponent({__name:"index",setup(t){const o=O(),n=e.computed(()=>o.isCollapsed?"64px":"210px"),s=e.computed(()=>o.layout),r=e.computed(()=>s.value==="sidebar"),h=e.computed(()=>s.value==="sidebar");return(c,l)=>{const d=e.resolveComponent("router-view");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["layout",`layout--${s.value}`])},[r.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createElementVNode("aside",{class:"layout__aside",style:e.normalizeStyle({width:n.value})},[e.createVNode(fe)],4),e.createElementVNode("div",pt,[e.createVNode(oe,{class:"layout__header","show-collapse":h.value},null,8,["show-collapse"]),e.createElementVNode("main",_t,[e.createVNode(d)])])],64)):s.value==="top"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createElementVNode("div",gt,[l[0]||(l[0]=e.createElementVNode("div",{class:"layout__logo"},[e.createElementVNode("img",{src:ie,alt:"Logo",class:"layout__logo-img"})],-1)),e.createVNode(ft),e.createVNode(oe,{class:"layout__header--top","show-collapse":!1})]),e.createElementVNode("main",yt,[e.createVNode(d)])],64)):e.createCommentVNode("",!0)],2)}}}),[["__scopeId","data-v-a2789d75"]]),kt={},wt={class:"tabs-wrapper"};function Nt(t,o){return e.openBlock(),e.createElementBlock("div",wt)}const Et=T(kt,[["render",Nt],["__scopeId","data-v-3b1e382a"]]),Ct={},Vt={class:"footer"};function Bt(t,o){return e.openBlock(),e.createElementBlock("div",Vt,[...o[0]||(o[0]=[e.createElementVNode("span",null,"Copyright © 2024 Xto Demo. All Rights Reserved.",-1)])])}const St=T(Ct,[["render",Bt],["__scopeId","data-v-317ae311"]]),bt=`<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2">
|
|
8
|
+
</svg>`,Ae={class:"setting-drawer"},Oe={class:"setting-section"},ze={class:"setting-section__content"},qe={class:"layout-options"},He=["onClick"],je=["innerHTML"],Ke={class:"layout-option__label"},We={class:"setting-section"},Ge={class:"setting-section__content"},Ye={class:"setting-item"},Xe={class:"setting-item"},fe=I(e.defineComponent({inheritAttrs:!1,__name:"index",props:{visible:{type:Boolean}},emits:["update:visible"],setup(t,{emit:o}){const n=O(),s={navLeft:Fe,navTop:Re},r=[{value:"sidebar",label:"左侧导航",icon:"navLeft"},{value:"top",label:"顶部导航",icon:"navTop"}],m=e.computed({get:()=>n.layout,set:d=>n.setLayout(d)}),c=o,a=()=>{c("update:visible",!1)};return(d,u)=>(e.openBlock(),e.createBlock(e.unref(S.Drawer),{"model-value":t.visible,title:"皮肤设置",direction:"rtl",size:280,"onUpdate:modelValue":a},{default:e.withCtx(()=>[e.createElementVNode("div",Ae,[e.createElementVNode("div",Oe,[u[0]||(u[0]=e.createElementVNode("h4",{class:"setting-section__title"},"导航模式",-1)),e.createElementVNode("div",ze,[e.createElementVNode("div",qe,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(r,h=>e.createElementVNode("div",{key:h.value,class:e.normalizeClass(["layout-option",{"is-active":m.value===h.value}]),onClick:_=>m.value=h.value},[e.createElementVNode("div",{class:"layout-option__preview",innerHTML:s[h.icon]},null,8,je),e.createElementVNode("span",Ke,e.toDisplayString(h.label),1)],10,He)),64))])])]),e.createElementVNode("div",We,[u[3]||(u[3]=e.createElementVNode("h4",{class:"setting-section__title"},"界面设置",-1)),e.createElementVNode("div",Ge,[e.createElementVNode("div",Ye,[u[1]||(u[1]=e.createElementVNode("span",{class:"setting-item__label"},"显示面包屑",-1)),e.createVNode(e.unref(x.Switch),{"model-value":e.unref(n).showBreadcrumb,"onUpdate:modelValue":e.unref(n).toggleBreadcrumb},null,8,["model-value","onUpdate:modelValue"])]),e.createElementVNode("div",Xe,[u[2]||(u[2]=e.createElementVNode("span",{class:"setting-item__label"},"灰度模式",-1)),e.createVNode(e.unref(x.Switch),{"model-value":e.unref(n).isGrayscale,"onUpdate:modelValue":e.unref(n).setGrayscale},null,8,["model-value","onUpdate:modelValue"])])])])])]),_:1},8,["model-value"]))}}),[["__scopeId","data-v-3a74bfd0"]]),Je={key:0,class:"breadcrumb"},Qe=["onClick"],Ze=I(e.defineComponent({__name:"Breadcrumb",setup(t){const o=B.useRoute(),n=B.useRouter(),s=P(),r=e.computed(()=>{var h;const c=o.path,a=s.menuList,d=(_,f,p=[])=>{for(const i of _){const y={title:i.title,path:i.path,isLast:!1};if(i.path===f)return y.isLast=!0,[...p,y];if(i.children&&i.children.length>0){const g=d(i.children,f,[...p,y]);if(g)return g}}return null},u=d(a,c);return u&&u.length>0?u:(h=o.meta)!=null&&h.title?[{title:o.meta.title,path:c,isLast:!0}]:[]}),m=c=>{!c.isLast&&c.path&&n.push(c.path)};return(c,a)=>r.value.length>0?(e.openBlock(),e.createElementBlock("div",Je,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,(d,u)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:d.path},[e.createElementVNode("span",{class:e.normalizeClass(["breadcrumb__item",{"breadcrumb__item--link":!d.isLast}]),onClick:h=>m(d)},e.toDisplayString(d.title),11,Qe),u<r.value.length-1?(e.openBlock(),e.createBlock(e.unref($.Icon),{key:0,name:"arrow-right",size:12,class:"breadcrumb__separator"})):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-31468670"]]),ve={class:"header"},et={class:"header__left"},tt={class:"header__right"},nt={key:0,class:"header__search-results"},ot=["onClick"],st={class:"header__search-info"},rt={class:"header__search-title"},at={key:0,class:"header__search-parent"},lt=["title"],ct={class:"header__avatar"},it={class:"header__user-name"},dt={key:0,class:"header__dropdown"},ut={class:"header__dropdown-header"},mt={class:"header__dropdown-avatar"},ht={class:"header__dropdown-info"},pt={class:"header__dropdown-name"},ft={class:"header__dropdown-role"},_t={class:"header__dropdown-menu"},oe=I(e.defineComponent({__name:"Header",props:{showCollapse:{type:Boolean}},setup(t){const o=O(),{logout:n,userName:s,userInfo:r}=j(),{searchKeyword:m,searchResults:c,handleSearchItemClick:a}=ne(),d=e.ref(!1),u=e.ref(null),h=e.ref(null),_=e.ref(!1),f=e.ref(!1),p=e.computed(()=>s.value||"用户"),i=()=>{o.toggleCollapse()},y=()=>{o.toggleTheme()},g=()=>{document.fullscreenElement?document.exitFullscreen():document.documentElement.requestFullscreen()},w=()=>{_.value=!!document.fullscreenElement},C=()=>{d.value=!d.value},b=()=>{d.value=!1},D=async()=>{b(),await n()},F=T=>{u.value&&!u.value.contains(T.target)&&b(),h.value&&!h.value.contains(T.target)&&(m.value="")};return e.onMounted(()=>{document.addEventListener("click",F),document.addEventListener("fullscreenchange",w)}),e.onUnmounted(()=>{document.removeEventListener("click",F),document.removeEventListener("fullscreenchange",w)}),(T,E)=>(e.openBlock(),e.createElementBlock("div",ve,[e.createElementVNode("div",et,[t.showCollapse?(e.openBlock(),e.createElementBlock("div",{key:0,class:"header__collapse",onClick:i},[...E[3]||(E[3]=[e.createElementVNode("span",null,"☰",-1)])])):e.createCommentVNode("",!0),e.unref(o).showBreadcrumb?(e.openBlock(),e.createBlock(Ze,{key:1})):e.createCommentVNode("",!0)]),e.createElementVNode("div",tt,[e.createElementVNode("div",{class:"header__search",ref_key:"searchRef",ref:h},[e.createVNode(e.unref(x.Input),{modelValue:e.unref(m),"onUpdate:modelValue":E[0]||(E[0]=V=>e.isRef(m)?m.value=V:null),placeholder:"搜索菜单...",size:"small",clearable:""},null,8,["modelValue"]),e.unref(c).length>0?(e.openBlock(),e.createElementBlock("div",nt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(c),V=>(e.openBlock(),e.createElementBlock("div",{key:V.path,class:"header__search-item",onClick:N=>e.unref(a)(V.path)},[e.createVNode(e.unref($.Icon),{name:"grid",size:16,class:"header__search-icon"}),e.createElementVNode("div",st,[e.createElementVNode("span",rt,e.toDisplayString(V.title),1),V.parentTitle?(e.openBlock(),e.createElementBlock("span",at,e.toDisplayString(V.parentTitle),1)):e.createCommentVNode("",!0)])],8,ot))),128))])):e.createCommentVNode("",!0)],512),e.createElementVNode("div",{class:"header__action",onClick:g,title:_.value?"退出全屏":"全屏"},[e.createVNode(e.unref($.Icon),{name:_.value?"fullscreen-exit":"fullscreen",size:16},null,8,["name"])],8,lt),e.createElementVNode("div",{class:"header__action",onClick:y,title:"切换主题"},[e.createVNode(e.unref($.Icon),{name:e.unref(o).isDark?"sun":"moon",size:16},null,8,["name"])]),e.createElementVNode("div",{class:"header__action",onClick:E[1]||(E[1]=V=>f.value=!0),title:"皮肤设置"},[e.createVNode(e.unref($.Icon),{name:"skin",size:16})]),e.createElementVNode("div",{class:"header__user",ref_key:"dropdownRef",ref:u},[e.createElementVNode("div",{class:"header__user-trigger",onClick:e.withModifiers(C,["stop"])},[e.createElementVNode("div",ct,[e.createElementVNode("span",null,e.toDisplayString(p.value.charAt(0)),1)]),e.createElementVNode("span",it,e.toDisplayString(p.value),1),e.createElementVNode("span",{class:e.normalizeClass(["header__user-arrow",{"is-active":d.value}])},"▼",2)]),e.createVNode(e.Transition,{name:"dropdown"},{default:e.withCtx(()=>{var V;return[d.value?(e.openBlock(),e.createElementBlock("div",dt,[e.createElementVNode("div",ut,[e.createElementVNode("div",mt,[e.createElementVNode("span",null,e.toDisplayString(p.value.charAt(0)),1)]),e.createElementVNode("div",ht,[e.createElementVNode("div",pt,e.toDisplayString(p.value),1),e.createElementVNode("div",ft,e.toDisplayString(((V=e.unref(r))==null?void 0:V.departmentName)||""),1)])]),E[5]||(E[5]=e.createElementVNode("div",{class:"header__dropdown-divider"},null,-1)),e.createElementVNode("div",_t,[e.createElementVNode("div",{class:"header__dropdown-item header__dropdown-item--danger",onClick:D},[e.createVNode(e.unref($.Icon),{name:"logout",size:16}),E[4]||(E[4]=e.createElementVNode("span",null,"退出登录",-1))])])])):e.createCommentVNode("",!0)]}),_:1})],512)]),e.createVNode(fe,{visible:f.value,"onUpdate:visible":E[2]||(E[2]=V=>f.value=V)},null,8,["visible"])]))}}),[["__scopeId","data-v-b15434d8"]]),gt={class:"top-menu"},yt=I(e.defineComponent({__name:"TopMenu",setup(t){const o=B.useRoute(),n=B.useRouter(),s=P(),r=e.computed(()=>o.path),m=c=>{n.push(c)};return(c,a)=>(e.openBlock(),e.createElementBlock("div",gt,[e.createVNode(e.unref(M.Menu),{"default-active":r.value,mode:"horizontal",class:"top-menu__inner",onSelect:m},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(s).menuList,d=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:d.path},[d.children&&d.children.length>0?(e.openBlock(),e.createBlock(e.unref(M.SubMenu),{key:0,index:d.path,icon:"grid"},{title:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(d.title),1)]),default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.children,u=>(e.openBlock(),e.createBlock(e.unref(M.MenuItem),{key:u.path,index:u.path,icon:"grid"},{default:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(u.title),1)]),_:2},1032,["index"]))),128))]),_:2},1032,["index"])):(e.openBlock(),e.createBlock(e.unref(M.MenuItem),{key:1,index:d.path,icon:"grid"},{default:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(d.title),1)]),_:2},1032,["index"]))],64))),128))]),_:1},8,["default-active"])]))}}),[["__scopeId","data-v-f9b502d8"]]),kt={class:"layout__main"},wt={class:"layout__content"},Nt={class:"layout__top"},Et={class:"layout__content"},_e=I(e.defineComponent({__name:"index",setup(t){const o=O(),n=e.computed(()=>o.isCollapsed?"64px":"210px"),s=e.computed(()=>o.layout),r=e.computed(()=>s.value==="sidebar"),m=e.computed(()=>s.value==="sidebar");return(c,a)=>{const d=e.resolveComponent("router-view");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["layout",`layout--${s.value}`])},[r.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createElementVNode("aside",{class:"layout__aside",style:e.normalizeStyle({width:n.value})},[e.createVNode(pe)],4),e.createElementVNode("div",kt,[e.createVNode(oe,{class:"layout__header","show-collapse":m.value},null,8,["show-collapse"]),e.createElementVNode("main",wt,[e.createVNode(d)])])],64)):s.value==="top"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createElementVNode("div",Nt,[a[0]||(a[0]=e.createElementVNode("div",{class:"layout__logo"},[e.createElementVNode("img",{src:ie,alt:"Logo",class:"layout__logo-img"})],-1)),e.createVNode(yt),e.createVNode(oe,{class:"layout__header--top","show-collapse":!1})]),e.createElementVNode("main",Et,[e.createVNode(d)])],64)):e.createCommentVNode("",!0)],2)}}}),[["__scopeId","data-v-a2789d75"]]),Ct={},Vt={class:"tabs-wrapper"};function Bt(t,o){return e.openBlock(),e.createElementBlock("div",Vt)}const bt=I(Ct,[["render",Bt],["__scopeId","data-v-3b1e382a"]]),St={},Lt={class:"footer"};function It(t,o){return e.openBlock(),e.createElementBlock("div",Lt,[...o[0]||(o[0]=[e.createElementVNode("span",null,"Copyright © 2024 Xto Demo. All Rights Reserved.",-1)])])}const Tt=I(St,[["render",It],["__scopeId","data-v-317ae311"]]),$t=`<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2">
|
|
9
9
|
<circle cx="12" cy="8" r="4"/>
|
|
10
10
|
<path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/>
|
|
11
|
-
</svg>`,
|
|
11
|
+
</svg>`,xt=`<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2">
|
|
12
12
|
<rect x="3" y="11" width="18" height="11" rx="2" ry="2"/>
|
|
13
13
|
<path d="M7 11V7a5 5 0 0 1 10 0v4"/>
|
|
14
|
-
</svg>`,
|
|
14
|
+
</svg>`,Mt=`<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2">
|
|
15
15
|
<path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"/>
|
|
16
16
|
<circle cx="12" cy="12" r="3"/>
|
|
17
|
-
</svg>`,
|
|
17
|
+
</svg>`,Ut=`<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2">
|
|
18
18
|
<path d="M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"/>
|
|
19
19
|
<line x1="1" y1="1" x2="23" y2="23"/>
|
|
20
|
-
</svg
|
|
20
|
+
</svg>`,Pt={class:"login"},Dt={class:"login__container"},Ft={class:"login__header"},Rt=["src"],At={class:"login__title"},Ot={class:"login__subtitle"},zt=["innerHTML"],qt=["innerHTML"],Ht=["innerHTML"],jt=I(e.defineComponent({__name:"index",props:{logo:{},title:{},subtitle:{}},emits:["success","error"],setup(t,{emit:o}){const n=o,{login:s,loading:r}=j(),m=L(),c=e.reactive({uid:"",password:""}),a=e.ref(!1),d={uid:[{required:!0,message:"请输入账号",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]},u=e.ref(),h={user:$t,lock:xt,eye:Mt,eyeOff:Ut},_=async()=>{var f;try{await((f=u.value)==null?void 0:f.validate());const p=await s(c.uid,c.password);p.success?n("success",p.data):n("error",p.error)}catch(p){console.error("登录失败",p),n("error",p)}};return(f,p)=>(e.openBlock(),e.createElementBlock("div",Pt,[e.createElementVNode("div",Dt,[e.createElementVNode("div",Ft,[e.createElementVNode("img",{src:t.logo||"/vite.svg",alt:"Logo",class:"login__logo"},null,8,Rt),e.createElementVNode("h1",At,e.toDisplayString(t.title||e.unref(m).appName),1),e.createElementVNode("p",Ot,e.toDisplayString(t.subtitle||"后台管理系统"),1)]),e.createVNode(e.unref(x.Form),{ref_key:"formRef",ref:u,model:c,rules:d,class:"login__form","label-width":"0"},{default:e.withCtx(()=>[e.createVNode(e.unref(x.FormItem),{prop:"uid"},{default:e.withCtx(()=>[e.createVNode(e.unref(x.Input),{modelValue:c.uid,"onUpdate:modelValue":p[0]||(p[0]=i=>c.uid=i),placeholder:"请输入账号",size:"large"},{prefix:e.withCtx(()=>[e.createElementVNode("span",{class:"login__input-icon",innerHTML:h.user},null,8,zt)]),_:1},8,["modelValue"])]),_:1}),e.createVNode(e.unref(x.FormItem),{prop:"password"},{default:e.withCtx(()=>[e.createVNode(e.unref(x.Input),{modelValue:c.password,"onUpdate:modelValue":p[2]||(p[2]=i=>c.password=i),type:a.value?"text":"password",placeholder:"请输入密码",size:"large",onKeyup:e.withKeys(_,["enter"])},{prefix:e.withCtx(()=>[e.createElementVNode("span",{class:"login__input-icon",innerHTML:h.lock},null,8,qt)]),suffix:e.withCtx(()=>[e.createElementVNode("span",{class:"login__input-icon login__input-icon--clickable",onClick:p[1]||(p[1]=i=>a.value=!a.value),innerHTML:a.value?h.eyeOff:h.eye},null,8,Ht)]),_:1},8,["modelValue","type"])]),_:1}),e.createVNode(e.unref(x.FormItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref($.Button),{type:"primary",size:"large",loading:e.unref(r),class:"login__submit",onClick:_},{default:e.withCtx(()=>[...p[3]||(p[3]=[e.createTextVNode(" 登录 ",-1)])]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"])])]))}}),[["__scopeId","data-v-a48f4a52"]]),Kt={class:"error-page"},Wt={class:"error-page__content"},Gt=I(e.defineComponent({__name:"404",setup(t){const o=B.useRouter(),n=()=>{o.push("/")};return(s,r)=>(e.openBlock(),e.createElementBlock("div",Kt,[e.createElementVNode("div",Wt,[r[1]||(r[1]=e.createElementVNode("div",{class:"error-page__code"},"404",-1)),r[2]||(r[2]=e.createElementVNode("div",{class:"error-page__title"},"页面不存在",-1)),r[3]||(r[3]=e.createElementVNode("div",{class:"error-page__desc"},"抱歉,您访问的页面不存在或已被删除",-1)),e.createVNode(e.unref($.Button),{type:"primary",onClick:n},{default:e.withCtx(()=>[...r[0]||(r[0]=[e.createTextVNode("返回首页",-1)])]),_:1})])]))}}),[["__scopeId","data-v-25c06185"]]),Yt={class:"error-page"},Xt={class:"error-page__content"},Jt=I(e.defineComponent({__name:"403",setup(t){const o=B.useRouter(),n=()=>{o.push("/")};return(s,r)=>(e.openBlock(),e.createElementBlock("div",Yt,[e.createElementVNode("div",Xt,[r[1]||(r[1]=e.createElementVNode("div",{class:"error-page__code"},"403",-1)),r[2]||(r[2]=e.createElementVNode("div",{class:"error-page__title"},"无访问权限",-1)),r[3]||(r[3]=e.createElementVNode("div",{class:"error-page__desc"},"抱歉,您没有权限访问此页面",-1)),e.createVNode(e.unref($.Button),{type:"primary",onClick:n},{default:e.withCtx(()=>[...r[0]||(r[0]=[e.createTextVNode("返回首页",-1)])]),_:1})])]))}}),[["__scopeId","data-v-42d7e36e"]]);function Qt(t){const o=P(),n=window.location.pathname,r=(o.menuBtnListMap[n]||[]).map(m=>m.code);return Array.isArray(t)?t.some(m=>r.includes(m)):r.includes(t)}const Zt=["/login","/404","/403"];function vt(t,o){const n=L(),s=B.createRouter({history:B.createWebHistory((o==null?void 0:o.base)||""),routes:t,scrollBehavior:(o==null?void 0:o.scrollBehavior)||(()=>({left:0,top:0}))});return s.beforeEach(async(r,m,c)=>{const a=O();if(a.initTheme(),v())if(r.path===n.loginPath)c({path:n.indexPath||"/"});else{const{initApp:d,isLoggedIn:u}=j();if(!u.value&&!await d()){c(n.loginPath||"/login");return}r.name&&r.meta.keepAlive&&a.addCachedView(r.name),c()}else Zt.includes(r.path)?c():c({path:n.loginPath||"/login",query:{redirectUrl:encodeURIComponent(r.fullPath)}})}),s}function en(t,o){const n=B.createRouter({history:B.createWebHistory(),routes:o});t.matcher=n.matcher}function tn(t){const o=L();return[{path:(t==null?void 0:t.loginPath)||o.loginPath||"/login",name:"Login",component:t==null?void 0:t.loginComponent,meta:{title:"登录",hidden:!0}},{path:"/403",name:"Forbidden",component:t==null?void 0:t.forbiddenComponent,meta:{title:"403",hidden:!0}}]}function nn(t,o={}){const n=o.indexPath||"/dashboard",s=[...t];return o.notFoundComponent&&s.push({path:"/:pathMatch(.*)*",name:"LayoutNotFound",component:o.notFoundComponent,meta:{title:"404",hidden:!0}}),{path:"/",name:"Layout",component:o.layoutComponent||_e,redirect:n,children:s}}function on(t={}){return[{path:"/403",name:"Forbidden",component:t.forbiddenComponent,meta:{title:"403",hidden:!0}}]}var ge=(t=>(t[t.ENABLED=1]="ENABLED",t[t.DISABLED=0]="DISABLED",t))(ge||{}),ye=(t=>(t[t.UNKNOWN=0]="UNKNOWN",t[t.MALE=1]="MALE",t[t.FEMALE=2]="FEMALE",t))(ye||{}),ke=(t=>(t[t.DIRECTORY=0]="DIRECTORY",t[t.MENU=1]="MENU",t[t.BUTTON=2]="BUTTON",t))(ke||{});const sn={1:"启用",0:"禁用"},rn={0:"未知",1:"男",2:"女"},an={0:"目录",1:"菜单",2:"按钮"},ln=[{label:"启用",value:1},{label:"禁用",value:0}],cn=[{label:"未知",value:0},{label:"男",value:1},{label:"女",value:2}],dn=[{label:"目录",value:0},{label:"菜单",value:1},{label:"按钮",value:2}],un={mounted(t,o){var d;const n=P(),{value:s}=o;if(!s)return;const r=window.location.pathname,c=(n.menuBtnListMap[r]||[]).map(u=>u.code);let a=!1;Array.isArray(s)?a=s.some(u=>c.includes(u)):a=c.includes(s),a||(d=t.parentNode)==null||d.removeChild(t)}};function mn(t){return se(t),ce(),{config:L()}}l.Footer=Tt,l.Forbidden=Jt,l.Gender=ye,l.GenderOptions=cn,l.GenderText=rn,l.Header=oe,l.Layout=_e,l.Login=jt,l.MenuType=ke,l.MenuTypeOptions=dn,l.MenuTypeText=an,l.NotFound=Gt,l.SettingDrawer=fe,l.Sidebar=pe,l.Status=ge,l.StatusOptions=ln,l.StatusText=sn,l.Tabs=bt,l.clearToken=Z,l.createErrorRoutes=on,l.createLayoutRoute=nn,l.createRouter=vt,l.createStaticRoutes=tn,l.createXtoApp=mn,l.getCode=Ce,l.getConfig=L,l.getConfigValue=we,l.getCurrentUser=me,l.getLoginInfo=R,l.getRequest=U,l.getToken=Q,l.getTokenType=le,l.getUserMenu=he,l.hasPermission=Qt,l.hasToken=v,l.http=A,l.local=k,l.localStorageUtil=q,l.login=de,l.loginByCode=Be,l.logout=ue,l.permissionDirective=un,l.resetRequest=ce,l.resetRouter=en,l.session=Ne,l.sessionStorageUtil=H,l.setConfig=se,l.setLoginInfo=ae,l.useApp=j,l.useAppStore=O,l.useAuth=be,l.useAuthStore=ee,l.useForm=Se,l.useMenu=ne,l.useMenuStore=P,l.useTable=Le,l.useUserStore=te,Object.defineProperty(l,Symbol.toStringTag,{value:"Module"})});
|
package/dist/router/index.d.ts
CHANGED
|
@@ -16,12 +16,13 @@ export declare function createRouter(routes: RouteRecordRaw[], options?: {
|
|
|
16
16
|
export declare function resetRouter(router: Router, routes: RouteRecordRaw[]): void;
|
|
17
17
|
/**
|
|
18
18
|
* 创建静态路由配置
|
|
19
|
+
* 注意:404 路由应在 createLayoutRoute 中通过 notFoundComponent 参数配置,
|
|
20
|
+
* 以确保 404 页面在布局内显示(保留菜单导航)
|
|
19
21
|
*/
|
|
20
22
|
export declare function createStaticRoutes(options?: {
|
|
21
23
|
loginPath?: string;
|
|
22
24
|
loginComponent?: any;
|
|
23
25
|
layoutComponent?: any;
|
|
24
|
-
notFoundComponent?: any;
|
|
25
26
|
forbiddenComponent?: any;
|
|
26
27
|
}): RouteRecordRaw[];
|
|
27
28
|
export { type RouteRecordRaw } from 'vue-router';
|
|
@@ -12,6 +12,8 @@ export interface StaticRouteOptions {
|
|
|
12
12
|
}
|
|
13
13
|
/**
|
|
14
14
|
* 创建错误路由
|
|
15
|
+
* 注意:如果使用 createLayoutRoute 并传入 notFoundComponent,
|
|
16
|
+
* 404 页面将在布局内显示(保留菜单导航),此时无需单独创建 404 路由
|
|
15
17
|
*/
|
|
16
18
|
export declare function createErrorRoutes(options?: StaticRouteOptions): RouteRecordRaw[];
|
|
17
19
|
export { type RouteRecordRaw } from 'vue-router';
|
package/dist/style.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--color-primary: #409eff;--color-primary-light-3: #79bbff;--color-primary-light-5: #a0cfff;--color-primary-light-7: #c6e2ff;--color-primary-light-8: #d9ecff;--color-primary-light-9: #ecf5ff;--color-primary-dark-2: #337ecc;--color-success: #67c23a;--color-success-light: #e1f3d8;--color-success-dark: #529b2e;--color-warning: #e6a23c;--color-warning-light: #fdf6ec;--color-warning-dark: #b88230;--color-danger: #f56c6c;--color-danger-light: #fde2e2;--color-danger-dark: #c45656;--color-info: #909399;--color-info-light: #f4f4f5;--color-info-dark: #73767a;--color-text-primary: #303133;--color-text-regular: #606266;--color-text-secondary: #909399;--color-text-placeholder: #a8abb2;--color-text-disabled: #c0c4cc;--color-border: #dcdfe6;--color-border-light: #e4e7ed;--color-border-lighter: #ebeef5;--color-border-extra-light: #f2f6fc;--color-border-dark: #d4d7de;--color-fill: #f5f7fa;--color-fill-light: #fafafa;--color-fill-lighter: #fafcff;--color-fill-blank: #ffffff;--bg-color: #ffffff;--bg-color-page: #f2f3f5;--bg-color-overlay: #ffffff;--box-shadow: 0 2px 12px 0 rgba(0, 0, 0, .1);--box-shadow-light: 0 2px 8px 0 rgba(0, 0, 0, .06);--box-shadow-lighter: 0 1px 4px 0 rgba(0, 0, 0, .04);--box-shadow-dark: 0 4px 16px 0 rgba(0, 0, 0, .12);--font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-size-base: 14px;--font-size-small: 12px;--font-size-large: 16px;--font-size-extra-large: 18px;--border-radius-base: 4px;--border-radius-small: 2px;--border-radius-large: 8px;--border-radius-round: 20px;--border-radius-circle: 50%;--spacing-xs: 4px;--spacing-sm: 8px;--spacing-md: 16px;--spacing-lg: 24px;--spacing-xl: 32px;--component-size-large: 40px;--component-size-default: 32px;--component-size-small: 24px;--transition-duration: .3s;--transition-duration-fast: .2s;--transition-duration-slow: .5s;--z-index-dropdown: 1000;--z-index-sticky: 1020;--z-index-fixed: 1030;--z-index-modal-backdrop: 1040;--z-index-modal: 1050;--z-index-popover: 1060;--z-index-tooltip: 1070;--sidebar-width: 210px;--sidebar-collapsed-width: 64px;--header-height: 50px;--tabs-height: 40px;--footer-height: 30px}.dark{--color-text-primary: #e5eaf3;--color-text-regular: #cfd3dc;--color-text-secondary: #a3a6ad;--color-text-placeholder: #8d9095;--color-text-disabled: #6c6e72;--color-border: #4c4d4f;--color-border-light: #414243;--color-border-lighter: #363637;--color-border-extra-light: #2b2b2c;--color-border-dark: #58585b;--color-fill: #303030;--color-fill-light: #262727;--color-fill-lighter: #1d1d1d;--color-fill-blank: #141414;--bg-color: #1d1e1f;--bg-color-page: #0a0a0a;--bg-color-overlay: #1d1e1f;--box-shadow: 0 2px 12px 0 rgba(0, 0, 0, .3);--box-shadow-light: 0 2px 8px 0 rgba(0, 0, 0, .24);--box-shadow-lighter: 0 1px 4px 0 rgba(0, 0, 0, .2);--box-shadow-dark: 0 4px 16px 0 rgba(0, 0, 0, .36)}.grayscale{--color-primary: #909399;--color-primary-light-3: #a6a9ad;--color-primary-light-5: #bcbec1;--color-primary-light-7: #d2d4d6;--color-primary-light-8: #e0e1e2;--color-primary-light-9: #eeefef;--color-primary-dark-2: #73767a;--color-success: #909399;--color-success-light: #f4f4f5;--color-success-dark: #73767a;--color-warning: #909399;--color-warning-light: #f4f4f5;--color-warning-dark: #73767a;--color-danger: #909399;--color-danger-light: #f4f4f5;--color-danger-dark: #73767a;--color-info: #909399;--color-info-light: #f4f4f5;--color-info-dark: #73767a;--color-text-primary: #5a5e66;--color-text-regular: #8a8e99;--color-text-secondary: #a8abb2;--color-text-placeholder: #c0c4cc;--color-text-disabled: #d3d4d6;--color-border: #d3d4d6;--color-border-light: #e0e1e2;--color-border-lighter: #ebedef;--color-border-extra-light: #f2f3f5;--color-border-dark: #c0c4cc;--color-fill: #f5f6f7;--color-fill-light: #fafbfb;--color-fill-lighter: #fcfcfc;--color-fill-blank: #ffffff;--bg-color: #ffffff;--bg-color-page: #f5f6f7;--bg-color-overlay: #ffffff}.grayscale img,.grayscale svg,.grayscale .xto-icon{filter:grayscale(100%)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{width:100%;height:100%;font-size:var(--font-size-base);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{width:100%;height:100%;font-family:var(--font-family);font-size:var(--font-size-base);line-height:1.5;color:var(--color-text-primary);background-color:var(--bg-color-page)}#app{width:100%;height:100%}a{color:var(--color-primary);text-decoration:none;cursor:pointer;transition:color var(--transition-duration-fast)}a:hover{color:var(--color-primary-light-3)}ul,ol{list-style:none}img{max-width:100%;height:auto;vertical-align:middle}button{cursor:pointer;font-family:inherit;font-size:inherit;border:none;background:none;outline:none}button:disabled{cursor:not-allowed}input,textarea,select{font-family:inherit;font-size:inherit;outline:none}table{border-collapse:collapse;border-spacing:0}h1,h2,h3,h4,h5,h6{margin:0;font-weight:500;color:var(--color-text-primary)}p{margin:0}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background-color:var(--color-fill-light);border-radius:3px}::-webkit-scrollbar-thumb{background-color:var(--color-border);border-radius:3px}::-webkit-scrollbar-thumb:hover{background-color:var(--color-text-secondary)}::selection{background-color:var(--color-primary-light-8);color:var(--color-primary)}.fade-enter-active,.fade-leave-active{transition:opacity var(--transition-duration)}.fade-enter-from,.fade-leave-to{opacity:0}.fade-scale-enter-active,.fade-scale-leave-active{transition:all var(--transition-duration)}.fade-scale-enter-from,.fade-scale-leave-to{opacity:0;transform:scale(.9)}.fade-transform-enter-active,.fade-transform-leave-active{transition:all var(--transition-duration-fast)}.fade-transform-enter-from{opacity:0;transform:translate(-10px)}.fade-transform-leave-to{opacity:0;transform:translate(10px)}.slide-down-enter-active,.slide-down-leave-active{transition:all var(--transition-duration)}.slide-down-enter-from,.slide-down-leave-to{opacity:0;transform:translateY(-20px)}.slide-up-enter-active,.slide-up-leave-active{transition:all var(--transition-duration)}.slide-up-enter-from,.slide-up-leave-to{opacity:0;transform:translateY(20px)}.slide-left-enter-active,.slide-left-leave-active{transition:all var(--transition-duration)}.slide-left-enter-from,.slide-left-leave-to{opacity:0;transform:translate(20px)}.slide-right-enter-active,.slide-right-leave-active{transition:all var(--transition-duration)}.slide-right-enter-from,.slide-right-leave-to{opacity:0;transform:translate(-20px)}.zoom-enter-active,.zoom-leave-active{transition:all var(--transition-duration)}.zoom-enter-from,.zoom-leave-to{opacity:0;transform:scale(.5)}.list-enter-active,.list-leave-active{transition:all var(--transition-duration)}.list-enter-from,.list-leave-to{opacity:0;transform:translateY(30px)}.collapse-transition{transition:width var(--transition-duration),padding var(--transition-duration)}.dark .sidebar,.dark .layout__aside{background-color:#1d1e1f}.dark .sidebar{border-right:1px solid #363637}.dark .sidebar__search-results{background-color:#1d1e1f;border-color:#363637}.dark .sidebar__search-item:hover{background-color:#262727}.dark .sidebar__search-item-title{color:#cfd3dc}.dark .sidebar__search-item-parent{color:#a3a6ad}.dark .sidebar__logo{border-bottom-color:#363637}.dark .sidebar__user{border-top-color:#363637}.dark .sidebar__user-name{color:#cfd3dc}.dark .sidebar__user-role{color:#a3a6ad}.dark .x-menu{background-color:#1d1e1f!important;border-color:#363637;color:#cfd3dc}.dark .x-menu.x-menu--vertical{border-right-color:#363637}.dark .x-menu.x-menu--horizontal{border-bottom-color:#363637}.dark .x-menu-item{color:#cfd3dc!important}.dark .x-menu-item:hover{background-color:#262727!important}.dark .x-menu-item.is-active{background-color:#262727!important;color:#cfd3dc!important}.dark .x-sub-menu__title{color:#cfd3dc!important}.dark .x-sub-menu__title:hover{background-color:#262727!important}.dark .x-sub-menu__menu{background-color:#1d1e1f!important;border:1px solid #363637;box-shadow:0 2px 12px #00000080}.dark .x-sub-menu__arrow{color:#a3a6ad}.dark .x-sub-menu.is-opened>.x-sub-menu__title{background-color:#262727!important}.dark .header{background-color:#1d1e1f;border-bottom-color:#363637}.dark .header__collapse{color:#cfd3dc}.dark .header__breadcrumb{color:#a3a6ad}.dark .header__user-name{color:#cfd3dc}.dark .header__user-arrow{color:#a3a6ad}.dark .header__action:hover,.dark .header__user-trigger:hover{background-color:#262727}.dark .header__dropdown{background-color:#1d1e1f;border:1px solid #363637;box-shadow:0 2px 12px #00000080}.dark .header__dropdown-name{color:#e5eaf3}.dark .header__dropdown-role{color:#a3a6ad}.dark .header__dropdown-divider{background-color:#363637}.dark .header__dropdown-item{color:#cfd3dc}.dark .header__dropdown-item:hover{background-color:#262727;color:#e5eaf3}.dark .x-button.x-button--default{background-color:#1d1e1f;border-color:#4c4d4f;color:#cfd3dc}.dark .x-button.x-button--default:hover{border-color:var(--color-primary);color:var(--color-primary)}.dark .x-button.x-button--text{color:var(--color-primary)}.dark .x-form-item__label{color:#cfd3dc}.dark .x-form-item__error{color:#f56c6c}.dark .x-input{background-color:#1d1e1f;border-color:#4c4d4f}.dark .x-input.is-focus{border-color:var(--color-primary)}.dark .x-input .x-input__inner{background-color:transparent;color:#e5eaf3}.dark .x-input .x-input__inner::placeholder{color:#6c6e72}.dark .x-input .x-input__suffix,.dark .x-input .x-input__prefix{color:#a3a6ad}.dark .x-select{background-color:#1d1e1f;border-color:#4c4d4f}.dark .x-card{background-color:#1d1e1f;border-color:#363637}.dark .x-card__header{border-bottom-color:#363637;color:#e5eaf3}.dark .data-table th{background-color:#262727;color:#cfd3dc;border-bottom-color:#363637}.dark .data-table td{border-bottom-color:#363637;color:#cfd3dc}.dark .data-table tr:hover td{background-color:#262727}.dark .x-modal__wrapper{background-color:#000000b3}.dark .x-modal__container{background-color:#1d1e1f;border:1px solid #363637}.dark .x-modal__header{border-bottom-color:#363637;color:#e5eaf3}.dark .x-modal__footer{border-top-color:#363637}.dark .x-message{background-color:#1d1e1f;border:1px solid #363637}.dark .x-tag.x-tag--primary{background-color:#409eff33;color:#79bbff;border-color:#409eff4d}.dark .x-tag.x-tag--success{background-color:#67c23a33;color:#95d475;border-color:#67c23a4d}.dark .x-tag.x-tag--warning{background-color:#e6a23c33;color:#eebe77;border-color:#e6a23c4d}.dark .x-tag.x-tag--danger{background-color:#f56c6c33;color:#fab6b6;border-color:#f56c6c4d}.dark .x-tag.x-tag--info{background-color:#90939933;color:#c0c4cc;border-color:#9093994d}.dark .x-switch{background-color:#4c4d4f}.dark .x-switch.is-checked{background-color:var(--color-primary)}.dark .x-pagination{color:#cfd3dc}.dark .x-pagination__item{background-color:#1d1e1f;border-color:#4c4d4f;color:#cfd3dc}.dark .x-pagination__item:hover{color:var(--color-primary)}.dark .x-pagination__item.is-active{background-color:var(--color-primary);border-color:var(--color-primary);color:#fff}.dark .login{background:linear-gradient(135deg,#1a1a2e,#16213e)}.dark .login__container{background-color:#1d1e1f;border:1px solid #363637}.dark .login__title{color:var(--color-primary)}.dark .login__subtitle{color:#a3a6ad}.dark .login__footer{color:#6c6e72}.dark .stat-card__title{color:#a3a6ad}.dark .quick-link{background-color:#262727}.dark .quick-link:hover{background-color:#409eff1a}.dark .quick-link__title{color:#cfd3dc}.dark .activity-item{border-bottom-color:#363637}.dark .activity-item__action{color:#cfd3dc}.dark .search-card,.dark .table-card,.dark .x-popconfirm{background-color:#1d1e1f;border:1px solid #363637}.grayscale .sidebar__logo-text{color:var(--color-primary)}.grayscale .x-menu-item.is-active{background-color:var(--color-fill)!important;color:var(--color-text-primary)!important}.grayscale .x-sub-menu.is-active .x-sub-menu__title{color:var(--color-text-primary)!important}.grayscale .x-button--default:hover{border-color:var(--color-primary);color:var(--color-primary)}.grayscale .x-button--text{color:var(--color-primary)}.grayscale .x-input.is-focus{border-color:var(--color-primary)}.grayscale .x-switch.is-checked{background-color:var(--color-primary)}.grayscale .x-pagination__item:hover{color:var(--color-primary)}.grayscale .x-pagination__item.is-active{background-color:var(--color-primary);border-color:var(--color-primary)}.grayscale .login__title{color:var(--color-primary)}.text-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-ellipsis-2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.flex{display:flex}.flex-center{display:flex;align-items:center;justify-content:center}.flex-between{display:flex;align-items:center;justify-content:space-between}.flex-wrap{flex-wrap:wrap}.flex-1{flex:1}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-primary{color:var(--color-primary)}.text-success{color:var(--color-success)}.text-warning{color:var(--color-warning)}.text-danger{color:var(--color-danger)}.text-info{color:var(--color-info)}.bg-primary{background-color:var(--color-primary)}.bg-success{background-color:var(--color-success)}.bg-warning{background-color:var(--color-warning)}.bg-danger{background-color:var(--color-danger)}.mt-10{margin-top:10px}.mt-20{margin-top:20px}.mb-10{margin-bottom:10px}.mb-20{margin-bottom:20px}.ml-10{margin-left:10px}.mr-10{margin-right:10px}.p-10{padding:10px}.p-20{padding:20px}.card{background-color:var(--bg-color);border-radius:var(--border-radius-base);box-shadow:var(--box-shadow-light);padding:var(--spacing-md)}.page-container{padding:var(--spacing-md);min-height:100%}.search-bar{display:flex;flex-wrap:wrap;gap:var(--spacing-sm);margin-bottom:var(--spacing-md)}.toolbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--spacing-md)}.table-container{background-color:var(--bg-color);border-radius:var(--border-radius-base);padding:var(--spacing-md)}.pagination-container{display:flex;justify-content:flex-end;margin-top:var(--spacing-md)}.sidebar[data-v-363654cb]{height:100%;display:flex;flex-direction:column;background-color:var(--bg-color)}.sidebar__logo[data-v-363654cb]{height:50px;display:flex;align-items:center;justify-content:center;gap:10px;border-bottom:1px solid var(--color-border-lighter)}.sidebar__logo-img[data-v-363654cb]{width:32px;height:32px}.sidebar__logo-text[data-v-363654cb]{font-size:16px;font-weight:600;color:var(--color-primary);white-space:nowrap}.sidebar__menu[data-v-363654cb]{flex:1;border-right:none;overflow-y:auto;overflow-x:visible;background-color:transparent!important}.sidebar__menu[data-v-363654cb] .x-menu{background-color:transparent;border-right:none}.sidebar__menu[data-v-363654cb] .x-menu-item{height:46px;line-height:46px}.sidebar__menu[data-v-363654cb] .x-menu-item:hover{background-color:var(--color-fill)}.sidebar__menu[data-v-363654cb] .x-menu-item.is-active{background-color:var(--color-fill);color:var(--color-text-primary)!important}.sidebar__menu[data-v-363654cb] .x-sub-menu__title{height:46px;line-height:46px}.sidebar__menu[data-v-363654cb] .x-sub-menu__title:hover{background-color:var(--color-fill)}.sidebar__menu[data-v-363654cb] .x-sub-menu.is-active .x-sub-menu__title{color:var(--color-text-primary)!important}.sidebar__menu[data-v-363654cb] .x-sub-menu .x-menu{background-color:#00000005}.sidebar__menu[data-v-363654cb] .x-sub-menu .x-menu-item{padding-left:50px!important}.sidebar__user[data-v-363654cb]{padding:12px 16px;border-top:1px solid var(--color-border-lighter);display:flex;align-items:center;justify-content:space-between;background-color:#fff}.sidebar__user-info[data-v-363654cb]{display:flex;flex-direction:column;gap:2px}.sidebar__user-name[data-v-363654cb]{font-size:14px;font-weight:500;color:var(--color-text-primary)}.sidebar__user-role[data-v-363654cb]{font-size:12px;color:var(--color-text-secondary)}.setting-drawer[data-v-14d31c8c]{padding:0 4px}.setting-section[data-v-14d31c8c]{margin-bottom:24px}.setting-section__title[data-v-14d31c8c]{font-size:14px;font-weight:500;color:var(--color-text-primary);margin:0 0 12px}.layout-options[data-v-14d31c8c]{display:flex;gap:12px}.layout-option[data-v-14d31c8c]{flex:1;display:flex;flex-direction:column;align-items:center;gap:8px;padding:12px 8px;border:2px solid var(--color-border);border-radius:4px;cursor:pointer;transition:all .2s}.layout-option[data-v-14d31c8c]:hover{border-color:var(--color-primary-light-5)}.layout-option.is-active[data-v-14d31c8c]{border-color:var(--color-primary);background-color:#409eff0d}.layout-option__preview[data-v-14d31c8c]{width:40px;height:40px;display:flex;align-items:center;justify-content:center}.layout-option__preview[data-v-14d31c8c] svg{width:100%;height:100%;color:var(--color-text-regular)}.layout-option__label[data-v-14d31c8c]{font-size:12px;color:var(--color-text-secondary)}.layout-option.is-active .layout-option__label[data-v-14d31c8c]{color:var(--color-primary)}.setting-item[data-v-14d31c8c]{display:flex;align-items:center;justify-content:space-between;padding:12px 0}.setting-item__label[data-v-14d31c8c]{font-size:14px;color:var(--color-text-primary)}.header[data-v-175c2432]{display:flex;align-items:center;justify-content:space-between;padding:0 20px;height:100%}.header__left[data-v-175c2432]{display:flex;align-items:center;gap:15px}.header__collapse[data-v-175c2432]{width:32px;height:32px;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:20px;color:var(--color-text-regular);border-radius:4px;transition:all .2s}.header__collapse[data-v-175c2432]:hover{color:var(--color-primary);background-color:var(--color-fill)}.header__right[data-v-175c2432]{display:flex;align-items:center;gap:12px}.header__search[data-v-175c2432]{position:relative;width:120px}.header__search-results[data-v-175c2432]{position:absolute;top:calc(100% + 8px);left:0;right:0;background-color:var(--bg-color);border:1px solid var(--color-border-lighter);border-radius:4px;box-shadow:0 2px 12px #00000026;max-height:300px;overflow-y:auto;z-index:100}.header__search-item[data-v-175c2432]{display:flex;align-items:center;gap:10px;padding:10px 12px;cursor:pointer;transition:background-color .2s}.header__search-item[data-v-175c2432]:hover{background-color:var(--color-fill)}.header__search-icon[data-v-175c2432]{width:20px;display:flex;align-items:center;justify-content:center;color:var(--color-text-secondary)}.header__search-info[data-v-175c2432]{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}.header__search-title[data-v-175c2432]{font-size:14px;color:var(--color-text-primary)}.header__search-parent[data-v-175c2432]{font-size:12px;color:var(--color-text-secondary)}.header__action[data-v-175c2432]{width:32px;height:32px;display:flex;align-items:center;justify-content:center;cursor:pointer;border-radius:4px;transition:all .2s;color:var(--color-text-regular)}.header__action[data-v-175c2432]:hover{background-color:var(--color-fill)}.header__user[data-v-175c2432]{position:relative}.header__user-trigger[data-v-175c2432]{display:flex;align-items:center;gap:10px;cursor:pointer;padding:6px 12px;border-radius:4px;transition:background-color .2s}.header__user-trigger[data-v-175c2432]:hover{background-color:var(--color-fill)}.header__user-name[data-v-175c2432]{font-size:14px;color:var(--color-text-primary)}.header__user-arrow[data-v-175c2432]{font-size:10px;color:var(--color-text-secondary);transition:transform .2s}.header__user-arrow.is-active[data-v-175c2432]{transform:rotate(180deg)}.header__avatar[data-v-175c2432]{width:30px;height:30px;border-radius:50%;background:linear-gradient(135deg,#409eff,#66b1ff);display:flex;align-items:center;justify-content:center;color:#fff;font-size:14px;font-weight:500}.header__dropdown[data-v-175c2432]{position:absolute;top:calc(100% + 8px);right:0;min-width:200px;background-color:var(--bg-color);border-radius:4px;box-shadow:0 2px 12px #00000026;overflow:hidden;z-index:100}.header__dropdown-header[data-v-175c2432]{display:flex;align-items:center;gap:12px;padding:16px;background-color:var(--color-fill)}.header__dropdown-avatar[data-v-175c2432]{width:40px;height:40px;border-radius:50%;background:linear-gradient(135deg,#409eff,#66b1ff);display:flex;align-items:center;justify-content:center;color:#fff;font-size:16px;font-weight:500}.header__dropdown-info[data-v-175c2432]{flex:1}.header__dropdown-name[data-v-175c2432]{font-size:14px;font-weight:500;color:var(--color-text-primary)}.header__dropdown-role[data-v-175c2432]{font-size:12px;color:var(--color-text-secondary);margin-top:2px}.header__dropdown-divider[data-v-175c2432]{height:1px;background-color:var(--color-border-lighter)}.header__dropdown-menu[data-v-175c2432]{padding:8px 0}.header__dropdown-item[data-v-175c2432]{display:flex;align-items:center;gap:10px;padding:10px 16px;cursor:pointer;font-size:14px;color:var(--color-text-regular);transition:all .2s}.header__dropdown-item[data-v-175c2432]:hover{background-color:var(--color-fill);color:var(--color-text-primary)}.header__dropdown-item--danger[data-v-175c2432]{color:var(--color-danger)}.header__dropdown-item--danger[data-v-175c2432]:hover{background-color:#f56c6c1a;color:var(--color-danger)}.dropdown-enter-active[data-v-175c2432],.dropdown-leave-active[data-v-175c2432]{transition:all .2s ease}.dropdown-enter-from[data-v-175c2432],.dropdown-leave-to[data-v-175c2432]{opacity:0;transform:translateY(-10px)}.top-menu[data-v-f9b502d8]{flex:1;display:flex;align-items:center;padding-left:20px}.top-menu__inner[data-v-f9b502d8]{border-bottom:none!important;background-color:transparent!important}.top-menu[data-v-f9b502d8] .x-menu-item{height:50px;line-height:50px;border-bottom:2px solid transparent!important}.top-menu[data-v-f9b502d8] .x-menu-item:hover{background-color:var(--color-fill)}.top-menu[data-v-f9b502d8] .x-menu-item.is-active{border-bottom-color:transparent!important}.top-menu[data-v-f9b502d8] .x-sub-menu__title{height:50px;line-height:50px;border-bottom:2px solid transparent!important}.top-menu[data-v-f9b502d8] .x-sub-menu__title:hover{background-color:var(--color-fill)}.top-menu[data-v-f9b502d8] .x-sub-menu.is-active .x-sub-menu__title{border-bottom-color:transparent!important}.layout[data-v-a2789d75]{display:flex;width:100%;height:100%}.layout__aside[data-v-a2789d75]{transition:width .3s;overflow:visible;flex-shrink:0;height:100%}.layout__main[data-v-a2789d75]{flex:1;display:flex;flex-direction:column;overflow:hidden;height:100%}.layout__top[data-v-a2789d75]{display:flex;align-items:center;height:50px;background-color:var(--bg-color);border-bottom:1px solid var(--color-border-lighter);flex-shrink:0}.layout__logo[data-v-a2789d75]{width:60px;height:50px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.layout__logo-img[data-v-a2789d75]{width:32px;height:32px}.layout__header[data-v-a2789d75]{height:50px;background-color:var(--bg-color);border-bottom:1px solid var(--color-border-lighter);flex-shrink:0}.layout__header--top[data-v-a2789d75]{border-bottom:none}.layout__content[data-v-a2789d75]{flex:1;overflow:auto;background-color:var(--bg-color-page)}.layout--top[data-v-a2789d75]{flex-direction:column}.tabs-wrapper[data-v-3b1e382a]{width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:var(--color-text-secondary);font-size:12px}.footer[data-v-317ae311]{width:100%;text-align:center;font-size:12px;color:var(--color-text-secondary)}.login[data-v-a48f4a52]{width:100%;min-height:100vh;display:flex;align-items:center;justify-content:flex-end;padding-right:15%;background:linear-gradient(135deg,var(--color-primary-light-9) 0%,var(--color-primary-light-7) 100%)}.login__container[data-v-a48f4a52]{width:400px;padding:40px;background-color:var(--bg-color);border-radius:var(--border-radius-large);box-shadow:var(--box-shadow-dark)}.login__header[data-v-a48f4a52]{text-align:center;margin-bottom:30px}.login__logo[data-v-a48f4a52]{width:60px;height:60px}.login__title[data-v-a48f4a52]{font-size:28px;font-weight:600;color:var(--color-primary);margin:15px 0 5px}.login__subtitle[data-v-a48f4a52]{font-size:14px;color:var(--color-text-secondary)}.login__form[data-v-a48f4a52] .t-form-item{margin-bottom:20px}.login__submit[data-v-a48f4a52]{width:100%}.login__input-icon[data-v-a48f4a52]{display:inline-flex;align-items:center;justify-content:center}.login__input-icon[data-v-a48f4a52] svg{width:16px;height:16px;color:var(--color-text-secondary)}.login__input-icon--clickable[data-v-a48f4a52]{cursor:pointer}.login__input-icon--clickable[data-v-a48f4a52]:hover svg{color:var(--color-primary)}.error-page[data-v-6fc8a81b]{width:100%;height:100vh;display:flex;align-items:center;justify-content:center;background-color:var(--bg-color-page)}.error-page__content[data-v-6fc8a81b]{text-align:center}.error-page__code[data-v-6fc8a81b]{font-size:120px;font-weight:600;color:var(--color-primary);line-height:1;margin-bottom:20px}.error-page__title[data-v-6fc8a81b]{font-size:24px;font-weight:500;color:var(--color-text-primary);margin-bottom:10px}.error-page__desc[data-v-6fc8a81b]{font-size:14px;color:var(--color-text-secondary);margin-bottom:30px}.error-page[data-v-f9466667]{width:100%;height:100vh;display:flex;align-items:center;justify-content:center;background-color:var(--bg-color-page)}.error-page__content[data-v-f9466667]{text-align:center}.error-page__code[data-v-f9466667]{font-size:120px;font-weight:600;color:var(--color-warning);line-height:1;margin-bottom:20px}.error-page__title[data-v-f9466667]{font-size:24px;font-weight:500;color:var(--color-text-primary);margin-bottom:10px}.error-page__desc[data-v-f9466667]{font-size:14px;color:var(--color-text-secondary);margin-bottom:30px}
|
|
1
|
+
:root{--color-primary: #409eff;--color-primary-light-3: #79bbff;--color-primary-light-5: #a0cfff;--color-primary-light-7: #c6e2ff;--color-primary-light-8: #d9ecff;--color-primary-light-9: #ecf5ff;--color-primary-dark-2: #337ecc;--color-success: #67c23a;--color-success-light: #e1f3d8;--color-success-dark: #529b2e;--color-warning: #e6a23c;--color-warning-light: #fdf6ec;--color-warning-dark: #b88230;--color-danger: #f56c6c;--color-danger-light: #fde2e2;--color-danger-dark: #c45656;--color-info: #909399;--color-info-light: #f4f4f5;--color-info-dark: #73767a;--color-text-primary: #303133;--color-text-regular: #606266;--color-text-secondary: #909399;--color-text-placeholder: #a8abb2;--color-text-disabled: #c0c4cc;--color-border: #dcdfe6;--color-border-light: #e4e7ed;--color-border-lighter: #ebeef5;--color-border-extra-light: #f2f6fc;--color-border-dark: #d4d7de;--color-fill: #f5f7fa;--color-fill-light: #fafafa;--color-fill-lighter: #fafcff;--color-fill-blank: #ffffff;--bg-color: #ffffff;--bg-color-page: #f2f3f5;--bg-color-overlay: #ffffff;--box-shadow: 0 2px 12px 0 rgba(0, 0, 0, .1);--box-shadow-light: 0 2px 8px 0 rgba(0, 0, 0, .06);--box-shadow-lighter: 0 1px 4px 0 rgba(0, 0, 0, .04);--box-shadow-dark: 0 4px 16px 0 rgba(0, 0, 0, .12);--font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-size-base: 14px;--font-size-small: 12px;--font-size-large: 16px;--font-size-extra-large: 18px;--border-radius-base: 4px;--border-radius-small: 2px;--border-radius-large: 8px;--border-radius-round: 20px;--border-radius-circle: 50%;--spacing-xs: 4px;--spacing-sm: 8px;--spacing-md: 16px;--spacing-lg: 24px;--spacing-xl: 32px;--component-size-large: 40px;--component-size-default: 32px;--component-size-small: 24px;--transition-duration: .3s;--transition-duration-fast: .2s;--transition-duration-slow: .5s;--z-index-dropdown: 1000;--z-index-sticky: 1020;--z-index-fixed: 1030;--z-index-modal-backdrop: 1040;--z-index-modal: 1050;--z-index-popover: 1060;--z-index-tooltip: 1070;--sidebar-width: 210px;--sidebar-collapsed-width: 64px;--header-height: 50px;--tabs-height: 40px;--footer-height: 30px}.dark{--color-text-primary: #e5eaf3;--color-text-regular: #cfd3dc;--color-text-secondary: #a3a6ad;--color-text-placeholder: #8d9095;--color-text-disabled: #6c6e72;--color-border: #4c4d4f;--color-border-light: #414243;--color-border-lighter: #363637;--color-border-extra-light: #2b2b2c;--color-border-dark: #58585b;--color-fill: #303030;--color-fill-light: #262727;--color-fill-lighter: #1d1d1d;--color-fill-blank: #141414;--bg-color: #1d1e1f;--bg-color-page: #0a0a0a;--bg-color-overlay: #1d1e1f;--box-shadow: 0 2px 12px 0 rgba(0, 0, 0, .3);--box-shadow-light: 0 2px 8px 0 rgba(0, 0, 0, .24);--box-shadow-lighter: 0 1px 4px 0 rgba(0, 0, 0, .2);--box-shadow-dark: 0 4px 16px 0 rgba(0, 0, 0, .36)}.grayscale{--color-primary: #909399;--color-primary-light-3: #a6a9ad;--color-primary-light-5: #bcbec1;--color-primary-light-7: #d2d4d6;--color-primary-light-8: #e0e1e2;--color-primary-light-9: #eeefef;--color-primary-dark-2: #73767a;--color-success: #909399;--color-success-light: #f4f4f5;--color-success-dark: #73767a;--color-warning: #909399;--color-warning-light: #f4f4f5;--color-warning-dark: #73767a;--color-danger: #909399;--color-danger-light: #f4f4f5;--color-danger-dark: #73767a;--color-info: #909399;--color-info-light: #f4f4f5;--color-info-dark: #73767a;--color-text-primary: #5a5e66;--color-text-regular: #8a8e99;--color-text-secondary: #a8abb2;--color-text-placeholder: #c0c4cc;--color-text-disabled: #d3d4d6;--color-border: #d3d4d6;--color-border-light: #e0e1e2;--color-border-lighter: #ebedef;--color-border-extra-light: #f2f3f5;--color-border-dark: #c0c4cc;--color-fill: #f5f6f7;--color-fill-light: #fafbfb;--color-fill-lighter: #fcfcfc;--color-fill-blank: #ffffff;--bg-color: #ffffff;--bg-color-page: #f5f6f7;--bg-color-overlay: #ffffff}.grayscale img,.grayscale svg,.grayscale .xto-icon{filter:grayscale(100%)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{width:100%;height:100%;font-size:var(--font-size-base);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{width:100%;height:100%;font-family:var(--font-family);font-size:var(--font-size-base);line-height:1.5;color:var(--color-text-primary);background-color:var(--bg-color-page)}#app{width:100%;height:100%}a{color:var(--color-primary);text-decoration:none;cursor:pointer;transition:color var(--transition-duration-fast)}a:hover{color:var(--color-primary-light-3)}ul,ol{list-style:none}img{max-width:100%;height:auto;vertical-align:middle}button{cursor:pointer;font-family:inherit;font-size:inherit;border:none;background:none;outline:none}button:disabled{cursor:not-allowed}input,textarea,select{font-family:inherit;font-size:inherit;outline:none}table{border-collapse:collapse;border-spacing:0}h1,h2,h3,h4,h5,h6{margin:0;font-weight:500;color:var(--color-text-primary)}p{margin:0}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background-color:var(--color-fill-light);border-radius:3px}::-webkit-scrollbar-thumb{background-color:var(--color-border);border-radius:3px}::-webkit-scrollbar-thumb:hover{background-color:var(--color-text-secondary)}::selection{background-color:var(--color-primary-light-8);color:var(--color-primary)}.fade-enter-active,.fade-leave-active{transition:opacity var(--transition-duration)}.fade-enter-from,.fade-leave-to{opacity:0}.fade-scale-enter-active,.fade-scale-leave-active{transition:all var(--transition-duration)}.fade-scale-enter-from,.fade-scale-leave-to{opacity:0;transform:scale(.9)}.fade-transform-enter-active,.fade-transform-leave-active{transition:all var(--transition-duration-fast)}.fade-transform-enter-from{opacity:0;transform:translate(-10px)}.fade-transform-leave-to{opacity:0;transform:translate(10px)}.slide-down-enter-active,.slide-down-leave-active{transition:all var(--transition-duration)}.slide-down-enter-from,.slide-down-leave-to{opacity:0;transform:translateY(-20px)}.slide-up-enter-active,.slide-up-leave-active{transition:all var(--transition-duration)}.slide-up-enter-from,.slide-up-leave-to{opacity:0;transform:translateY(20px)}.slide-left-enter-active,.slide-left-leave-active{transition:all var(--transition-duration)}.slide-left-enter-from,.slide-left-leave-to{opacity:0;transform:translate(20px)}.slide-right-enter-active,.slide-right-leave-active{transition:all var(--transition-duration)}.slide-right-enter-from,.slide-right-leave-to{opacity:0;transform:translate(-20px)}.zoom-enter-active,.zoom-leave-active{transition:all var(--transition-duration)}.zoom-enter-from,.zoom-leave-to{opacity:0;transform:scale(.5)}.list-enter-active,.list-leave-active{transition:all var(--transition-duration)}.list-enter-from,.list-leave-to{opacity:0;transform:translateY(30px)}.collapse-transition{transition:width var(--transition-duration),padding var(--transition-duration)}.dark .sidebar,.dark .layout__aside{background-color:#1d1e1f}.dark .sidebar{border-right:1px solid #363637}.dark .sidebar__search-results{background-color:#1d1e1f;border-color:#363637}.dark .sidebar__search-item:hover{background-color:#262727}.dark .sidebar__search-item-title{color:#cfd3dc}.dark .sidebar__search-item-parent{color:#a3a6ad}.dark .sidebar__logo{border-bottom-color:#363637}.dark .sidebar__user{border-top-color:#363637}.dark .sidebar__user-name{color:#cfd3dc}.dark .sidebar__user-role{color:#a3a6ad}.dark .x-menu{background-color:#1d1e1f!important;border-color:#363637;color:#cfd3dc}.dark .x-menu.x-menu--vertical{border-right-color:#363637}.dark .x-menu.x-menu--horizontal{border-bottom-color:#363637}.dark .x-menu-item{color:#cfd3dc!important}.dark .x-menu-item:hover{background-color:#262727!important}.dark .x-menu-item.is-active{background-color:#262727!important;color:#cfd3dc!important}.dark .x-sub-menu__title{color:#cfd3dc!important}.dark .x-sub-menu__title:hover{background-color:#262727!important}.dark .x-sub-menu__menu{background-color:#1d1e1f!important;border:1px solid #363637;box-shadow:0 2px 12px #00000080}.dark .x-sub-menu__arrow{color:#a3a6ad}.dark .x-sub-menu.is-opened>.x-sub-menu__title{background-color:#262727!important}.dark .header{background-color:#1d1e1f;border-bottom-color:#363637}.dark .header__collapse{color:#cfd3dc}.dark .header__breadcrumb{color:#a3a6ad}.dark .header__user-name{color:#cfd3dc}.dark .header__user-arrow{color:#a3a6ad}.dark .header__action:hover,.dark .header__user-trigger:hover{background-color:#262727}.dark .header__dropdown{background-color:#1d1e1f;border:1px solid #363637;box-shadow:0 2px 12px #00000080}.dark .header__dropdown-name{color:#e5eaf3}.dark .header__dropdown-role{color:#a3a6ad}.dark .header__dropdown-divider{background-color:#363637}.dark .header__dropdown-item{color:#cfd3dc}.dark .header__dropdown-item:hover{background-color:#262727;color:#e5eaf3}.dark .x-button.x-button--default{background-color:#1d1e1f;border-color:#4c4d4f;color:#cfd3dc}.dark .x-button.x-button--default:hover{border-color:var(--color-primary);color:var(--color-primary)}.dark .x-button.x-button--text{color:var(--color-primary)}.dark .x-form-item__label{color:#cfd3dc}.dark .x-form-item__error{color:#f56c6c}.dark .x-input{background-color:#1d1e1f;border-color:#4c4d4f}.dark .x-input.is-focus{border-color:var(--color-primary)}.dark .x-input .x-input__inner{background-color:transparent;color:#e5eaf3}.dark .x-input .x-input__inner::placeholder{color:#6c6e72}.dark .x-input .x-input__suffix,.dark .x-input .x-input__prefix{color:#a3a6ad}.dark .x-select{background-color:#1d1e1f;border-color:#4c4d4f}.dark .x-card{background-color:#1d1e1f;border-color:#363637}.dark .x-card__header{border-bottom-color:#363637;color:#e5eaf3}.dark .data-table th{background-color:#262727;color:#cfd3dc;border-bottom-color:#363637}.dark .data-table td{border-bottom-color:#363637;color:#cfd3dc}.dark .data-table tr:hover td{background-color:#262727}.dark .x-modal__wrapper{background-color:#000000b3}.dark .x-modal__container{background-color:#1d1e1f;border:1px solid #363637}.dark .x-modal__header{border-bottom-color:#363637;color:#e5eaf3}.dark .x-modal__footer{border-top-color:#363637}.dark .x-message{background-color:#1d1e1f;border:1px solid #363637}.dark .x-tag.x-tag--primary{background-color:#409eff33;color:#79bbff;border-color:#409eff4d}.dark .x-tag.x-tag--success{background-color:#67c23a33;color:#95d475;border-color:#67c23a4d}.dark .x-tag.x-tag--warning{background-color:#e6a23c33;color:#eebe77;border-color:#e6a23c4d}.dark .x-tag.x-tag--danger{background-color:#f56c6c33;color:#fab6b6;border-color:#f56c6c4d}.dark .x-tag.x-tag--info{background-color:#90939933;color:#c0c4cc;border-color:#9093994d}.dark .x-switch{background-color:#4c4d4f}.dark .x-switch.is-checked{background-color:var(--color-primary)}.dark .x-pagination{color:#cfd3dc}.dark .x-pagination__item{background-color:#1d1e1f;border-color:#4c4d4f;color:#cfd3dc}.dark .x-pagination__item:hover{color:var(--color-primary)}.dark .x-pagination__item.is-active{background-color:var(--color-primary);border-color:var(--color-primary);color:#fff}.dark .login{background:linear-gradient(135deg,#1a1a2e,#16213e)}.dark .login__container{background-color:#1d1e1f;border:1px solid #363637}.dark .login__title{color:var(--color-primary)}.dark .login__subtitle{color:#a3a6ad}.dark .login__footer{color:#6c6e72}.dark .stat-card__title{color:#a3a6ad}.dark .quick-link{background-color:#262727}.dark .quick-link:hover{background-color:#409eff1a}.dark .quick-link__title{color:#cfd3dc}.dark .activity-item{border-bottom-color:#363637}.dark .activity-item__action{color:#cfd3dc}.dark .search-card,.dark .table-card,.dark .x-popconfirm{background-color:#1d1e1f;border:1px solid #363637}.grayscale .sidebar__logo-text{color:var(--color-primary)}.grayscale .x-menu-item.is-active{background-color:var(--color-fill)!important;color:var(--color-text-primary)!important}.grayscale .x-sub-menu.is-active .x-sub-menu__title{color:var(--color-text-primary)!important}.grayscale .x-button--default:hover{border-color:var(--color-primary);color:var(--color-primary)}.grayscale .x-button--text{color:var(--color-primary)}.grayscale .x-input.is-focus{border-color:var(--color-primary)}.grayscale .x-switch.is-checked{background-color:var(--color-primary)}.grayscale .x-pagination__item:hover{color:var(--color-primary)}.grayscale .x-pagination__item.is-active{background-color:var(--color-primary);border-color:var(--color-primary)}.grayscale .login__title{color:var(--color-primary)}.text-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-ellipsis-2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.flex{display:flex}.flex-center{display:flex;align-items:center;justify-content:center}.flex-between{display:flex;align-items:center;justify-content:space-between}.flex-wrap{flex-wrap:wrap}.flex-1{flex:1}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-primary{color:var(--color-primary)}.text-success{color:var(--color-success)}.text-warning{color:var(--color-warning)}.text-danger{color:var(--color-danger)}.text-info{color:var(--color-info)}.bg-primary{background-color:var(--color-primary)}.bg-success{background-color:var(--color-success)}.bg-warning{background-color:var(--color-warning)}.bg-danger{background-color:var(--color-danger)}.mt-10{margin-top:10px}.mt-20{margin-top:20px}.mb-10{margin-bottom:10px}.mb-20{margin-bottom:20px}.ml-10{margin-left:10px}.mr-10{margin-right:10px}.p-10{padding:10px}.p-20{padding:20px}.card{background-color:var(--bg-color);border-radius:var(--border-radius-base);box-shadow:var(--box-shadow-light);padding:var(--spacing-md)}.page-container{padding:var(--spacing-md);min-height:100%}.search-bar{display:flex;flex-wrap:wrap;gap:var(--spacing-sm);margin-bottom:var(--spacing-md)}.toolbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--spacing-md)}.table-container{background-color:var(--bg-color);border-radius:var(--border-radius-base);padding:var(--spacing-md)}.pagination-container{display:flex;justify-content:flex-end;margin-top:var(--spacing-md)}.sidebar[data-v-d6c5528d]{height:100%;display:flex;flex-direction:column;background-color:var(--bg-color)}.sidebar__logo[data-v-d6c5528d]{height:50px;display:flex;align-items:center;justify-content:center;gap:10px;border-bottom:1px solid var(--color-border-lighter)}.sidebar__logo-img[data-v-d6c5528d]{width:32px;height:32px}.sidebar__logo-text[data-v-d6c5528d]{font-size:16px;font-weight:600;color:var(--color-primary);white-space:nowrap}.sidebar__menu[data-v-d6c5528d]{flex:1;border-right:none;overflow-y:auto;overflow-x:visible;background-color:transparent!important}.sidebar__menu[data-v-d6c5528d] .x-menu{background-color:transparent;border-right:none}.sidebar__menu[data-v-d6c5528d] .x-menu-item{height:46px;line-height:46px}.sidebar__menu[data-v-d6c5528d] .x-menu-item:hover{background-color:var(--color-fill)}.sidebar__menu[data-v-d6c5528d] .x-menu-item.is-active{background-color:var(--color-fill);color:var(--color-text-primary)!important}.sidebar__menu[data-v-d6c5528d] .x-sub-menu__title{height:46px;line-height:46px}.sidebar__menu[data-v-d6c5528d] .x-sub-menu__title:hover{background-color:var(--color-fill)}.sidebar__menu[data-v-d6c5528d] .x-sub-menu.is-active .x-sub-menu__title{color:var(--color-text-primary)!important}.sidebar__menu[data-v-d6c5528d] .x-sub-menu .x-menu{background-color:#00000005}.sidebar__menu[data-v-d6c5528d] .x-sub-menu .x-menu-item{padding-left:50px!important}.sidebar__user[data-v-d6c5528d]{padding:12px 16px;border-top:1px solid var(--color-border-lighter);display:flex;align-items:center;justify-content:space-between;background-color:#fff}.sidebar__user-info[data-v-d6c5528d]{display:flex;flex-direction:column;gap:2px}.sidebar__user-name[data-v-d6c5528d]{font-size:14px;font-weight:500;color:var(--color-text-primary)}.sidebar__user-role[data-v-d6c5528d]{font-size:12px;color:var(--color-text-secondary)}.setting-drawer[data-v-3a74bfd0]{padding:0 4px}.setting-section[data-v-3a74bfd0]{margin-bottom:24px}.setting-section__title[data-v-3a74bfd0]{font-size:14px;font-weight:500;color:var(--color-text-primary);margin:0 0 12px}.layout-options[data-v-3a74bfd0]{display:flex;gap:12px}.layout-option[data-v-3a74bfd0]{flex:1;display:flex;flex-direction:column;align-items:center;gap:8px;padding:12px 8px;border:2px solid var(--color-border);border-radius:4px;cursor:pointer;transition:all .2s}.layout-option[data-v-3a74bfd0]:hover{border-color:var(--color-primary-light-5)}.layout-option.is-active[data-v-3a74bfd0]{border-color:var(--color-primary);background-color:#409eff0d}.layout-option__preview[data-v-3a74bfd0]{width:40px;height:40px;display:flex;align-items:center;justify-content:center}.layout-option__preview[data-v-3a74bfd0] svg{width:100%;height:100%;color:var(--color-text-regular)}.layout-option__label[data-v-3a74bfd0]{font-size:12px;color:var(--color-text-secondary)}.layout-option.is-active .layout-option__label[data-v-3a74bfd0]{color:var(--color-primary)}.setting-item[data-v-3a74bfd0]{display:flex;align-items:center;justify-content:space-between;padding:12px 0}.setting-item__label[data-v-3a74bfd0]{font-size:14px;color:var(--color-text-primary)}.breadcrumb[data-v-31468670]{display:flex;align-items:center;font-size:14px}.breadcrumb__item[data-v-31468670]{color:var(--color-text-regular)}.breadcrumb__item--link[data-v-31468670]{color:var(--color-text-secondary);cursor:pointer;transition:color .2s}.breadcrumb__item--link[data-v-31468670]:hover{color:var(--color-primary)}.breadcrumb__separator[data-v-31468670]{margin:0 8px;color:var(--color-text-placeholder)}.header[data-v-b15434d8]{display:flex;align-items:center;justify-content:space-between;padding:0 20px;height:100%}.header__left[data-v-b15434d8]{display:flex;align-items:center;gap:15px}.header__collapse[data-v-b15434d8]{width:32px;height:32px;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:20px;color:var(--color-text-regular);border-radius:4px;transition:all .2s}.header__collapse[data-v-b15434d8]:hover{color:var(--color-primary);background-color:var(--color-fill)}.header__right[data-v-b15434d8]{display:flex;align-items:center;gap:12px}.header__search[data-v-b15434d8]{position:relative;width:120px}.header__search-results[data-v-b15434d8]{position:absolute;top:calc(100% + 8px);left:0;right:0;background-color:var(--bg-color);border:1px solid var(--color-border-lighter);border-radius:4px;box-shadow:0 2px 12px #00000026;max-height:300px;overflow-y:auto;z-index:100}.header__search-item[data-v-b15434d8]{display:flex;align-items:center;gap:10px;padding:10px 12px;cursor:pointer;transition:background-color .2s}.header__search-item[data-v-b15434d8]:hover{background-color:var(--color-fill)}.header__search-icon[data-v-b15434d8]{width:20px;display:flex;align-items:center;justify-content:center;color:var(--color-text-secondary)}.header__search-info[data-v-b15434d8]{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}.header__search-title[data-v-b15434d8]{font-size:14px;color:var(--color-text-primary)}.header__search-parent[data-v-b15434d8]{font-size:12px;color:var(--color-text-secondary)}.header__action[data-v-b15434d8]{width:32px;height:32px;display:flex;align-items:center;justify-content:center;cursor:pointer;border-radius:4px;transition:all .2s;color:var(--color-text-regular)}.header__action[data-v-b15434d8]:hover{background-color:var(--color-fill)}.header__user[data-v-b15434d8]{position:relative}.header__user-trigger[data-v-b15434d8]{display:flex;align-items:center;gap:10px;cursor:pointer;padding:6px 12px;border-radius:4px;transition:background-color .2s}.header__user-trigger[data-v-b15434d8]:hover{background-color:var(--color-fill)}.header__user-name[data-v-b15434d8]{font-size:14px;color:var(--color-text-primary)}.header__user-arrow[data-v-b15434d8]{font-size:10px;color:var(--color-text-secondary);transition:transform .2s}.header__user-arrow.is-active[data-v-b15434d8]{transform:rotate(180deg)}.header__avatar[data-v-b15434d8]{width:30px;height:30px;border-radius:50%;background:linear-gradient(135deg,#409eff,#66b1ff);display:flex;align-items:center;justify-content:center;color:#fff;font-size:14px;font-weight:500}.header__dropdown[data-v-b15434d8]{position:absolute;top:calc(100% + 8px);right:0;min-width:200px;background-color:var(--bg-color);border-radius:4px;box-shadow:0 2px 12px #00000026;overflow:hidden;z-index:100}.header__dropdown-header[data-v-b15434d8]{display:flex;align-items:center;gap:12px;padding:16px;background-color:var(--color-fill)}.header__dropdown-avatar[data-v-b15434d8]{width:40px;height:40px;border-radius:50%;background:linear-gradient(135deg,#409eff,#66b1ff);display:flex;align-items:center;justify-content:center;color:#fff;font-size:16px;font-weight:500}.header__dropdown-info[data-v-b15434d8]{flex:1}.header__dropdown-name[data-v-b15434d8]{font-size:14px;font-weight:500;color:var(--color-text-primary)}.header__dropdown-role[data-v-b15434d8]{font-size:12px;color:var(--color-text-secondary);margin-top:2px}.header__dropdown-divider[data-v-b15434d8]{height:1px;background-color:var(--color-border-lighter)}.header__dropdown-menu[data-v-b15434d8]{padding:8px 0}.header__dropdown-item[data-v-b15434d8]{display:flex;align-items:center;gap:10px;padding:10px 16px;cursor:pointer;font-size:14px;color:var(--color-text-regular);transition:all .2s}.header__dropdown-item[data-v-b15434d8]:hover{background-color:var(--color-fill);color:var(--color-text-primary)}.header__dropdown-item--danger[data-v-b15434d8]{color:var(--color-danger)}.header__dropdown-item--danger[data-v-b15434d8]:hover{background-color:#f56c6c1a;color:var(--color-danger)}.dropdown-enter-active[data-v-b15434d8],.dropdown-leave-active[data-v-b15434d8]{transition:all .2s ease}.dropdown-enter-from[data-v-b15434d8],.dropdown-leave-to[data-v-b15434d8]{opacity:0;transform:translateY(-10px)}.top-menu[data-v-f9b502d8]{flex:1;display:flex;align-items:center;padding-left:20px}.top-menu__inner[data-v-f9b502d8]{border-bottom:none!important;background-color:transparent!important}.top-menu[data-v-f9b502d8] .x-menu-item{height:50px;line-height:50px;border-bottom:2px solid transparent!important}.top-menu[data-v-f9b502d8] .x-menu-item:hover{background-color:var(--color-fill)}.top-menu[data-v-f9b502d8] .x-menu-item.is-active{border-bottom-color:transparent!important}.top-menu[data-v-f9b502d8] .x-sub-menu__title{height:50px;line-height:50px;border-bottom:2px solid transparent!important}.top-menu[data-v-f9b502d8] .x-sub-menu__title:hover{background-color:var(--color-fill)}.top-menu[data-v-f9b502d8] .x-sub-menu.is-active .x-sub-menu__title{border-bottom-color:transparent!important}.layout[data-v-a2789d75]{display:flex;width:100%;height:100%}.layout__aside[data-v-a2789d75]{transition:width .3s;overflow:visible;flex-shrink:0;height:100%}.layout__main[data-v-a2789d75]{flex:1;display:flex;flex-direction:column;overflow:hidden;height:100%}.layout__top[data-v-a2789d75]{display:flex;align-items:center;height:50px;background-color:var(--bg-color);border-bottom:1px solid var(--color-border-lighter);flex-shrink:0}.layout__logo[data-v-a2789d75]{width:60px;height:50px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.layout__logo-img[data-v-a2789d75]{width:32px;height:32px}.layout__header[data-v-a2789d75]{height:50px;background-color:var(--bg-color);border-bottom:1px solid var(--color-border-lighter);flex-shrink:0}.layout__header--top[data-v-a2789d75]{border-bottom:none}.layout__content[data-v-a2789d75]{flex:1;overflow:auto;background-color:var(--bg-color-page)}.layout--top[data-v-a2789d75]{flex-direction:column}.tabs-wrapper[data-v-3b1e382a]{width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:var(--color-text-secondary);font-size:12px}.footer[data-v-317ae311]{width:100%;text-align:center;font-size:12px;color:var(--color-text-secondary)}.login[data-v-a48f4a52]{width:100%;min-height:100vh;display:flex;align-items:center;justify-content:flex-end;padding-right:15%;background:linear-gradient(135deg,var(--color-primary-light-9) 0%,var(--color-primary-light-7) 100%)}.login__container[data-v-a48f4a52]{width:400px;padding:40px;background-color:var(--bg-color);border-radius:var(--border-radius-large);box-shadow:var(--box-shadow-dark)}.login__header[data-v-a48f4a52]{text-align:center;margin-bottom:30px}.login__logo[data-v-a48f4a52]{width:60px;height:60px}.login__title[data-v-a48f4a52]{font-size:28px;font-weight:600;color:var(--color-primary);margin:15px 0 5px}.login__subtitle[data-v-a48f4a52]{font-size:14px;color:var(--color-text-secondary)}.login__form[data-v-a48f4a52] .t-form-item{margin-bottom:20px}.login__submit[data-v-a48f4a52]{width:100%}.login__input-icon[data-v-a48f4a52]{display:inline-flex;align-items:center;justify-content:center}.login__input-icon[data-v-a48f4a52] svg{width:16px;height:16px;color:var(--color-text-secondary)}.login__input-icon--clickable[data-v-a48f4a52]{cursor:pointer}.login__input-icon--clickable[data-v-a48f4a52]:hover svg{color:var(--color-primary)}.error-page[data-v-25c06185]{width:100%;height:100%;display:flex;align-items:center;justify-content:center;background-color:var(--bg-color-page)}.error-page__content[data-v-25c06185]{text-align:center}.error-page__code[data-v-25c06185]{font-size:120px;font-weight:600;color:var(--color-primary);line-height:1;margin-bottom:20px}.error-page__title[data-v-25c06185]{font-size:24px;font-weight:500;color:var(--color-text-primary);margin-bottom:10px}.error-page__desc[data-v-25c06185]{font-size:14px;color:var(--color-text-secondary);margin-bottom:30px}.error-page[data-v-42d7e36e]{width:100%;height:100%;display:flex;align-items:center;justify-content:center;background-color:var(--bg-color-page)}.error-page__content[data-v-42d7e36e]{text-align:center}.error-page__code[data-v-42d7e36e]{font-size:120px;font-weight:600;color:var(--color-warning);line-height:1;margin-bottom:20px}.error-page__title[data-v-42d7e36e]{font-size:24px;font-weight:500;color:var(--color-text-primary);margin-bottom:10px}.error-page__desc[data-v-42d7e36e]{font-size:14px;color:var(--color-text-secondary);margin-bottom:30px}
|
package/dist/utils/request.d.ts
CHANGED
|
@@ -30,5 +30,10 @@ export declare const http: {
|
|
|
30
30
|
put<T = unknown>(url: string, data?: unknown, config?: AxiosRequestConfig): Promise<ApiResponse<T>>;
|
|
31
31
|
patch<T = unknown>(url: string, data?: unknown, config?: AxiosRequestConfig): Promise<ApiResponse<T>>;
|
|
32
32
|
delete<T = unknown>(url: string, config?: AxiosRequestConfig): Promise<ApiResponse<T>>;
|
|
33
|
+
/**
|
|
34
|
+
* 下载文件(blob 响应)
|
|
35
|
+
* 直接返回 Blob 对象,绕过响应拦截器的业务错误处理
|
|
36
|
+
*/
|
|
37
|
+
download(url: string, config?: AxiosRequestConfig): Promise<Blob>;
|
|
33
38
|
};
|
|
34
39
|
export default request;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "xto-fronted",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.4",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "XTO 前端应用脚手架,封装登录、退出、菜单渲染等统一逻辑",
|
|
@@ -47,11 +47,11 @@
|
|
|
47
47
|
"devDependencies": {
|
|
48
48
|
"@types/node": "^20.11.30",
|
|
49
49
|
"@vitejs/plugin-vue": "^5.0.4",
|
|
50
|
-
"@xto/base": "^1.
|
|
50
|
+
"@xto/base": "^1.2.0",
|
|
51
51
|
"@xto/core": "^1.0.1",
|
|
52
|
-
"@xto/feedback": "^1.0
|
|
53
|
-
"@xto/form": "^1.0
|
|
54
|
-
"@xto/navigation": "^1.
|
|
52
|
+
"@xto/feedback": "^1.1.0",
|
|
53
|
+
"@xto/form": "^1.1.0",
|
|
54
|
+
"@xto/navigation": "^1.2.0",
|
|
55
55
|
"axios": "^1.6.8",
|
|
56
56
|
"pinia": "^2.1.7",
|
|
57
57
|
"sass": "^1.98.0",
|