xto-fronted 0.1.7 → 0.1.9
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/README.md +4 -0
- package/dist/components/Login/index.vue.d.ts +15 -0
- package/dist/config/index.d.ts +25 -5
- package/dist/index.d.ts +17 -4
- package/dist/index.es.js +1272 -55
- package/dist/index.umd.js +1 -1
- package/dist/router/dynamicRoutes.d.ts +19 -25
- package/dist/router/index.d.ts +24 -4
- package/dist/router/staticRoutes.d.ts +15 -2
- package/dist/stores/menu.d.ts +14 -8
- package/dist/style.css +1 -1
- package/dist/utils/request.d.ts +8 -0
- package/package.json +2 -10
- package/.env.development +0 -3
- package/.env.production +0 -3
- package/dist/403-DM5wfQkM.js +0 -31
- package/dist/404-BurAu5LC.js +0 -31
- package/dist/index-BNiEld34.js +0 -15
- package/dist/index-Be9RiEfo.js +0 -98
- package/dist/index-BqRv1bdN.js +0 -1185
- package/dist/index-CQLVXvNJ.js +0 -15
- package/dist/index-CyiE8n2V.js +0 -15
- package/dist/index-xauR1bOL.js +0 -15
- package/dist/views/dashboard/index.vue.d.ts +0 -2
- package/dist/views/login/index.vue.d.ts +0 -4
- package/dist/views/system/menu/index.vue.d.ts +0 -2
- package/dist/views/system/role/index.vue.d.ts +0 -2
- package/dist/views/system/user/index.vue.d.ts +0 -2
- package/index.html +0 -13
- package/public/vite.svg +0 -10
- package/src/App.vue +0 -20
- package/src/api/auth.ts +0 -35
- package/src/api/menu.ts +0 -13
- package/src/api/system.ts +0 -65
- package/src/api/user.ts +0 -12
- package/src/assets/styles/_dark.scss +0 -407
- package/src/assets/styles/_reset.scss +0 -126
- package/src/assets/styles/_root.scss +0 -140
- package/src/assets/styles/_transition.scss +0 -119
- package/src/assets/styles/_variables.scss +0 -45
- package/src/assets/styles/index.scss +0 -187
- package/src/components/Layout/Footer.vue +0 -17
- package/src/components/Layout/Header.vue +0 -335
- package/src/components/Layout/Sidebar.vue +0 -213
- package/src/components/Layout/Tabs.vue +0 -20
- package/src/components/Layout/index.vue +0 -62
- package/src/composables/index.ts +0 -9
- package/src/composables/useApp.ts +0 -170
- package/src/composables/useAuth.ts +0 -70
- package/src/composables/useForm.ts +0 -79
- package/src/composables/useMenu.ts +0 -141
- package/src/composables/useTable.ts +0 -97
- package/src/config/index.ts +0 -19
- package/src/directives/permission.ts +0 -41
- package/src/enums/index.ts +0 -63
- package/src/env.d.ts +0 -17
- package/src/index.ts +0 -44
- package/src/main.ts +0 -29
- package/src/router/dynamicRoutes.ts +0 -163
- package/src/router/index.ts +0 -71
- package/src/router/staticRoutes.ts +0 -43
- package/src/stores/app.ts +0 -145
- package/src/stores/auth.ts +0 -45
- package/src/stores/index.ts +0 -15
- package/src/stores/menu.ts +0 -158
- package/src/stores/user.ts +0 -41
- package/src/types/api.d.ts +0 -103
- package/src/types/global.d.ts +0 -45
- package/src/types/router.d.ts +0 -48
- package/src/types/xto.d.ts +0 -149
- package/src/utils/auth.ts +0 -86
- package/src/utils/permission.ts +0 -30
- package/src/utils/request.ts +0 -126
- package/src/utils/storage.ts +0 -72
- package/src/views/dashboard/index.vue +0 -32
- package/src/views/error/403.vue +0 -57
- package/src/views/error/404.vue +0 -57
- package/src/views/login/index.vue +0 -141
- package/src/views/system/menu/index.vue +0 -32
- package/src/views/system/role/index.vue +0 -32
- package/src/views/system/user/index.vue +0 -32
- package/tsconfig.json +0 -26
- package/tsconfig.node.json +0 -11
- package/vite.config.ts +0 -139
- /package/dist/{views/error → components/Error}/403.vue.d.ts +0 -0
- /package/dist/{views/error → components/Error}/404.vue.d.ts +0 -0
package/dist/index.umd.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(a,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("vue-router"),require("@xto/navigation"),require("@xto/base"),require("@xto/form"),require("@xto/feedback"),require("pinia"),require("axios")):typeof define=="function"&&define.amd?define(["exports","vue","vue-router","@xto/navigation","@xto/base","@xto/form","@xto/feedback","pinia","axios"],e):(a=typeof globalThis<"u"?globalThis:a||self,e(a.XtoFronted={},a.Vue,a.VueRouter,a.navigation,a.base,a.form,a.feedback,a.Pinia,a.axios))})(this,function(a,e,C,F,z,$,I,j,Ne){"use strict";const T={webTitle:"analysis-web",baseUrl:"https://cloud-api-test.tineco.com",appId:"DBU-CONTENT-ANALYSIS",clientId:"Tineco"},q=()=>`tooyu-cloud:${T.appId}:`,te=t=>({get(n){const o=q(),s=t.getItem(o+n);if(!s)return null;try{return JSON.parse(s)}catch{return s}},set(n,o){const s=q();if(o==null){t.removeItem(s+n);return}const r=typeof o=="string"?o:JSON.stringify(o);t.setItem(s+n,r)},remove(n){const o=q();t.removeItem(o+n)},clear(){const n=q();Object.keys(t).forEach(s=>{s.startsWith(n)&&t.removeItem(s)})}}),P=te(window.localStorage),D=te(window.sessionStorage),g={get:P.get,set:P.set,remove:P.remove,clear:P.clear},be={get:D.get,set:D.set,remove:D.remove,clear:D.clear},x=j.defineStore("app",()=>{const t=e.ref(g.get("isDark")||!1),n=e.ref(g.get("theme")||"light"),o=e.ref(g.get("layout")||"sidebar"),s=e.ref(g.get("isCollapsed")||!1),r=e.ref(g.get("showTabs")??!0),d=e.ref(g.get("showFooter")??!0),c=e.ref(g.get("showBreadcrumb")??!0),l=e.ref(g.get("primaryColor")||"#409eff"),m=e.ref([]),_=e.computed(()=>t.value?"dark":"light"),k=()=>{t.value=!t.value,n.value=t.value?"dark":"light",E()},f=b=>{n.value=b,t.value=b==="dark",E()},E=()=>{const b=document.documentElement;t.value?b.classList.add("dark"):b.classList.remove("dark"),g.set("isDark",t.value),g.set("theme",n.value)},y=()=>{s.value=!s.value,g.set("isCollapsed",s.value)},i=b=>{o.value=b,g.set("layout",b)},u=()=>{r.value=!r.value,g.set("showTabs",r.value)},p=()=>{d.value=!d.value,g.set("showFooter",d.value)},N=()=>{c.value=!c.value,g.set("showBreadcrumb",c.value)},h=b=>{l.value=b,document.documentElement.style.setProperty("--color-primary",b),g.set("primaryColor",b)},w=b=>{m.value.includes(b)||m.value.push(b)},S=b=>{const Ee=m.value.indexOf(b);Ee>-1&&m.value.splice(Ee,1)},B=()=>{m.value=[]},L=()=>{E(),l.value!=="#409eff"&&document.documentElement.style.setProperty("--color-primary",l.value)};return e.watch(t,E),{isDark:t,theme:n,layout:o,isCollapsed:s,showTabs:r,showFooter:d,showBreadcrumb:c,primaryColor:l,cachedViews:m,themeClass:_,toggleTheme:k,toggleCollapse:y,setTheme:f,setLayout:i,toggleTabs:u,toggleFooter:p,toggleBreadcrumb:N,setPrimaryColor:h,addCachedView:w,removeCachedView:S,clearCachedViews:B,initTheme:L}}),ne="/vite.svg",K="login_info",H="user_info",M=()=>g.get(K),oe=t=>{const n={accessToken:t.access_token,refreshToken:t.refresh_token,expiresTime:t.expires_time,refreshTime:t.refresh_time,tokenType:t.token_type,code:t.code};g.set(K,n)},W=()=>{const t=M();return(t==null?void 0:t.accessToken)||null},se=()=>{const t=M();return(t==null?void 0:t.tokenType)||"Bearer"},we=()=>{const t=M();return(t==null?void 0:t.code)||null},Y=()=>{g.remove(K),g.remove(H)},J=()=>!!W(),Ve=t=>{g.set(H,t)},Se=()=>g.get(H),Ce=()=>{g.remove(H)},X=j.defineStore("auth",()=>{const t=e.ref(M()),n=e.computed(()=>J()),o=l=>{oe(l),t.value=M()},s=()=>{t.value=null,Y()},r=e.computed(()=>{var l;return((l=t.value)==null?void 0:l.accessToken)||null}),d=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:n,accessToken:r,tokenType:d,code:c,login:o,logout:s}}),G=j.defineStore("user",()=>{const t=e.ref(g.get("user_info")),n=e.computed(()=>!!t.value),o=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:n,userName:o,avatar:s,userId:r,setUserInfo:l=>{t.value=l,g.set("user_info",l)},clearUserInfo:()=>{t.value=null,g.remove("user_info")}}}),U=j.defineStore("menu",()=>{const t="menu_list",n="menu_btn_list",o=e.ref(g.get(t)||[]),s=e.ref(g.get(n)||{}),r={code:"home",name:"首页",icon:"home",closable:!1,default:!1,out:!1,path:"/dashboard",title:"首页"},d=e.computed(()=>o.value.length>0),c=e.computed(()=>{function f(y){if(y&&y.length>0)for(let i=0;i<y.length;i++){const u=y[i];if(u.default)return u.path;{const p=f(u.children||[]);if(p)return p}}return null}return f(o.value)||r.path}),l=(f,E)=>{const y=[];return!f||f.length<=0||f.forEach(i=>{if(i.type===1){const u={code:i.menuCode,name:i.menuName,path:"",title:i.menuName},p=E||"";let N=s.value[p]||[];N.push(u),s.value[p]=N}else{const u=[];let p=i.menuUrl,N=i.isOut||!1;!N&&i.menuUrl&&(i.menuUrl.startsWith("http")?p="/iframe/"+encodeURIComponent(p):i.menuUrl.startsWith("keep-alive:")&&(p="/iframe/keep-alive/"+encodeURIComponent(p.split("keep-alive:")[1])));const h={code:i.menuCode,name:i.menuName,path:p,icon:i.icon,closable:i.closable,default:i.isDefault,out:N,children:u,title:i.menuName};if(y.push(h),i.children&&i.children.length>0){const w=l(i.children,i.menuUrl);h.children=w}}}),y},m=f=>{o.value=f,g.set(t,f)},_=f=>{k(),o.value.push(r);const E=l(f);o.value.push(...E),g.set(t,o.value),g.set(n,s.value)},k=()=>{o.value=[],s.value={},g.remove(t),g.remove(n)};return{menuList:o,menuBtnListMap:s,hasMenu:d,index:c,indexMenu:r,setMenuList:m,setMenuFromRemote:_,clearMenu:k}}),O=(()=>{const t=Ne.create({baseURL:T.baseUrl,timeout:15e3,headers:{"Content-Type":"application/json"}});return t.interceptors.request.use(n=>{const o=W();if(o){const s=se();n.headers.Authorization=`${s} ${o}`}return n},n=>Promise.reject(n)),t.interceptors.response.use(n=>{const{data:o}=n;return o.code===200||o.code===0?n:(I.Message.error(o.message||"请求失败"),Promise.reject(new Error(o.message||"请求失败")))},n=>{var s;const{response:o}=n;if(o)switch(o.status){case 401:case 403:I.Message.error("登录已过期,请重新登录"),Y(),window.location.href="/login";break;case 404:I.Message.error("请求资源不存在");break;case 500:I.Message.error("服务器错误");break;default:I.Message.error(((s=o.data)==null?void 0:s.message)||"请求失败")}else I.Message.error("网络连接失败");return Promise.reject(n)}),t})(),A={get(t,n){return O.get(t,n).then(o=>o.data)},post(t,n,o){return O.post(t,n,o).then(s=>s.data)},put(t,n,o){return O.put(t,n,o).then(s=>s.data)},patch(t,n,o){return O.patch(t,n,o).then(s=>s.data)},delete(t,n){return O.delete(t,n).then(o=>o.data)}};function re(t){return A.post("/user/v1.0/login/by-domain",{appId:T.appId,clientId:T.clientId,uid:t.uid,password:t.password,code:!0})}function ae(){return A.put("/user/v1.0/user/logout")}function Be(t,n){return A.get(`/user/v1.0/login/by-code?appId=${t}&code=${n}`)}function le(){return A.get("/user/v1.0/user/get-me")}function ce(){return A.get(`/user/v1.0/menu/get-menu?appId=${T.appId}`)}function R(){const t=C.useRouter(),n=C.useRoute(),o=X(),s=G(),r=U(),d=e.ref(!1),c=e.computed(()=>o.isLoggedIn),l=e.computed(()=>s.userInfo),m=e.computed(()=>s.userName||""),_=e.computed(()=>r.menuList),k=e.computed(()=>r.index),f=async(N,h)=>{d.value=!0;try{p();const S=(await re({uid:N,password:h})).data;o.login(S),await y(),await i();const B=n.query.redirectUrl;if(B){const L=decodeURIComponent(B);if(L.startsWith("http")){const b=S.code;location.href=L.includes("?")?`${L}&code=${b}`:`${L}?code=${b}`}else await t.replace(L)}else await t.replace(k.value||"/");return I.Message.success("登录成功"),{success:!0,data:S}}catch(w){return I.Message.error((w==null?void 0:w.message)||"登录失败"),{success:!1,error:w}}finally{d.value=!1}},E=async(N=!0)=>{try{await ae()}catch(h){console.error("退出登录接口失败",h)}finally{p(),t.push("/login"),N&&I.Message.success("退出登录成功")}},y=async()=>{const N=await le();return s.setUserInfo(N.data),N.data},i=async()=>{const N=await ce();return r.setMenuFromRemote(N.data),r.menuList},u=async()=>{if(!o.isLoggedIn)return!1;try{return s.userInfo||await y(),r.hasMenu||await i(),!0}catch(N){return console.error("初始化应用失败",N),p(),!1}},p=()=>{o.logout(),s.clearUserInfo(),r.clearMenu()};return{loading:d,isLoggedIn:c,userInfo:l,userName:m,menuList:_,indexPath:k,login:f,logout:E,loadUserInfo:y,loadMenu:i,initApp:u,clearAllState:p}}function Ie(){const t=U(),n=X(),o=G(),s=e.computed(()=>n.isLoggedIn),r=e.computed(()=>o.userName),d=e.computed(()=>o.userInfo),c=k=>{const f=window.location.pathname,y=(t.menuBtnListMap[f]||[]).map(i=>i.code);return Array.isArray(k)?k.some(i=>y.includes(i)):y.includes(k)};return{isLoggedIn:s,userName:r,userInfo:d,hasPermission:c,hasAnyPermission:k=>k.some(f=>c(f)),hasAllPermissions:k=>k.every(f=>c(f)),getCurrentPagePermissions:()=>{const k=window.location.pathname;return(t.menuBtnListMap[k]||[]).map(E=>E.code)}}}const $e={home:"🏠",dashboard:"📊",system:"⚙️",user:"👤",role:"👥",menu:"📋",setting:"🔧"};function ie(t){const n=C.useRoute(),o=C.useRouter(),s=U(),r=x(),d={...$e,...t},c=e.ref(""),l=e.computed(()=>n.path),m=e.computed(()=>r.isCollapsed),_=e.computed(()=>s.menuList),k=e.computed(()=>s.hasMenu),f=(h,w="")=>{const S=[];return h.forEach(B=>{B.children&&B.children.length>0?S.push(...f(B.children,B.title)):S.push({...B,parentTitle:w})}),S},E=e.computed(()=>c.value.trim()?f(_.value).filter(w=>w.title.toLowerCase().includes(c.value.toLowerCase())):[]),y=e.computed(()=>c.value.trim()?_.value.map(h=>{if(h.children&&h.children.length>0){const w=h.children.filter(S=>S.title.toLowerCase().includes(c.value.toLowerCase()));return w.length>0?{...h,children:w}:null}return h.title.toLowerCase().includes(c.value.toLowerCase())?h:null}).filter(Boolean):_.value);return{searchKeyword:c,activeMenu:l,isCollapsed:m,menuList:_,hasMenu:k,searchResults:E,filteredMenuList:y,flattenMenus:f,getMenuIcon:h=>d[h||""]||"📄",handleMenuSelect:h=>{h&&h!==n.path&&(o.push(h),c.value="")},handleSearchItemClick:h=>{o.push(h),c.value=""},clearSearch:()=>{c.value=""}}}function Te(t,n={}){const{rules:o,onSubmit:s}=n,r=e.ref(),d=e.reactive({...t}),c=e.ref(!1),l=e.ref(!1),m=e.ref(!1),_=()=>{E(),m.value=!1,l.value=!0},k=i=>{Object.assign(d,i),m.value=!0,l.value=!0},f=()=>{l.value=!1,E()},E=()=>{var i;Object.keys(t).forEach(u=>{d[u]=t[u]}),(i=r.value)==null||i.resetFields()};return{formRef:r,formData:d,rules:o,loading:c,visible:l,isEdit:m,openAdd:_,openEdit:k,close:f,resetForm:E,handleSubmit:async()=>{var i;try{await((i=r.value)==null?void 0:i.validate()),c.value=!0,await(s==null?void 0:s(d)),f()}catch(u){console.error(u)}finally{c.value=!1}}}}function Le(t){const{fetchData:n,defaultPageSize:o=10}=t,s=e.ref(!1),r=e.ref([]),d=e.ref(0),c=e.ref(1),l=e.ref(o),m=e.reactive({}),_=async()=>{s.value=!0;try{const p={...m,page:c.value,pageSize:l.value},N=await n(p);r.value=N.list,d.value=N.total}catch(p){console.error(p)}finally{s.value=!1}},k=()=>{c.value=1,_()},f=()=>{Object.keys(m).forEach(p=>{m[p]=void 0}),c.value=1,_()},E=p=>{c.value=p,_()},y=p=>{l.value=p,c.value=1,_()},i=()=>{_()},u=e.computed(()=>({current:c.value,pageSize:l.value,total:d.value}));return{loading:s,data:r,total:d,currentPage:c,pageSize:l,searchParams:m,pagination:u,getData:_,handleSearch:k,handleReset:f,handlePageChange:E,handleSizeChange:y,refresh:i}}const Me={class:"sidebar"},Ue={class:"sidebar__logo"},Ae={key:0,class:"sidebar__search"},Pe={key:0,class:"sidebar__search-results"},De=["onClick"],xe={class:"menu-icon"},Oe={class:"sidebar__search-item-info"},Re={class:"sidebar__search-item-title"},Fe={key:0,class:"sidebar__search-item-parent"},ze={class:"menu-icon"},je={class:"menu-icon"},qe={class:"menu-icon"},He={key:1,class:"sidebar__user"},Ke={class:"sidebar__user-info"},We={class:"sidebar__user-name"},Ye={class:"sidebar__user-role"},Je=e.defineComponent({__name:"Sidebar",setup(t){const{logout:n,userName:o,userInfo:s}=R(),{searchKeyword:r,activeMenu:d,isCollapsed:c,searchResults:l,filteredMenuList:m,getMenuIcon:_,handleMenuSelect:k,handleSearchItemClick:f}=ie();return(E,y)=>{var i;return e.openBlock(),e.createElementBlock("div",Me,[e.createElementVNode("div",Ue,[y[1]||(y[1]=e.createElementVNode("img",{src:ne,alt:"Logo",class:"sidebar__logo-img"},null,-1)),e.withDirectives(e.createElementVNode("span",{class:"sidebar__logo-text"},e.toDisplayString(e.unref(T).webTitle),513),[[e.vShow,!e.unref(c)]])]),e.unref(c)?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Ae,[e.createVNode(e.unref($.Input),{modelValue:e.unref(r),"onUpdate:modelValue":y[0]||(y[0]=u=>e.isRef(r)?r.value=u:null),placeholder:"搜索菜单...",size:"small",clearable:""},null,8,["modelValue"]),e.unref(l).length>0?(e.openBlock(),e.createElementBlock("div",Pe,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(l),u=>(e.openBlock(),e.createElementBlock("div",{key:u.path,class:"sidebar__search-item",onClick:p=>e.unref(f)(u.path)},[e.createElementVNode("span",xe,e.toDisplayString(e.unref(_)(u.icon)),1),e.createElementVNode("div",Oe,[e.createElementVNode("span",Re,e.toDisplayString(u.title),1),u.parentTitle?(e.openBlock(),e.createElementBlock("span",Fe,e.toDisplayString(u.parentTitle),1)):e.createCommentVNode("",!0)])],8,De))),128))])):e.createCommentVNode("",!0)])),e.createVNode(e.unref(F.Menu),{"default-active":e.unref(d),collapse:e.unref(c),"collapse-transition":!1,class:"sidebar__menu",onSelect:e.unref(k)},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(m),u=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:u.path},[u.children&&u.children.length>0?(e.openBlock(),e.createBlock(e.unref(F.SubMenu),{key:0,index:u.path},{title:e.withCtx(()=>[e.createElementVNode("span",ze,e.toDisplayString(e.unref(_)(u.icon)),1),e.createElementVNode("span",null,e.toDisplayString(u.title),1)]),default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.children,p=>(e.openBlock(),e.createBlock(e.unref(F.MenuItem),{key:p.path,index:p.path},{default:e.withCtx(()=>[e.createElementVNode("span",je,e.toDisplayString(e.unref(_)(p.icon)),1),e.createElementVNode("span",null,e.toDisplayString(p.title),1)]),_:2},1032,["index"]))),128))]),_:2},1032,["index"])):(e.openBlock(),e.createBlock(e.unref(F.MenuItem),{key:1,index:u.path},{default:e.withCtx(()=>[e.createElementVNode("span",qe,e.toDisplayString(e.unref(_)(u.icon)),1),e.createElementVNode("span",null,e.toDisplayString(u.title),1)]),_:2},1032,["index"]))],64))),128))]),_:1},8,["default-active","collapse","onSelect"]),e.unref(c)?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",He,[e.createElementVNode("div",Ke,[e.createElementVNode("span",We,e.toDisplayString(e.unref(o)||"用户"),1),e.createElementVNode("span",Ye,e.toDisplayString(((i=e.unref(s))==null?void 0:i.departmentName)||""),1)]),e.createVNode(e.unref(z.Button),{type:"text",size:"small",onClick:e.unref(n)},{default:e.withCtx(()=>[...y[2]||(y[2]=[e.createTextVNode("退出",-1)])]),_:1},8,["onClick"])]))])}}}),V=(t,n)=>{const o=t.__vccOpts||t;for(const[s,r]of n)o[s]=r;return o},de=V(Je,[["__scopeId","data-v-bd43a7b8"]]),Xe={class:"header"},Ge={class:"header__right"},Qe=["title"],Ze={key:0,viewBox:"0 0 24 24",width:"16",height:"16",fill:"currentColor"},ve={key:1,viewBox:"0 0 24 24",width:"16",height:"16",fill:"currentColor"},et={key:0},tt={key:1},nt={class:"header__avatar"},ot={class:"header__user-name"},st={key:0,class:"header__dropdown"},rt={class:"header__dropdown-header"},at={class:"header__dropdown-avatar"},lt={class:"header__dropdown-info"},ct={class:"header__dropdown-name"},it={class:"header__dropdown-role"},me=V(e.defineComponent({__name:"Header",setup(t){const n=x(),{logout:o,userName:s,userInfo:r}=R(),d=e.ref(!1),c=e.ref(null),l=e.ref(!1),m=e.computed(()=>s.value||"用户"),_=()=>{n.toggleCollapse()},k=()=>{n.toggleTheme()},f=()=>{document.fullscreenElement?document.exitFullscreen():document.documentElement.requestFullscreen()},E=()=>{l.value=!!document.fullscreenElement},y=()=>{d.value=!d.value},i=()=>{d.value=!1},u=async()=>{i(),await o()},p=N=>{c.value&&!c.value.contains(N.target)&&i()};return e.onMounted(()=>{document.addEventListener("click",p),document.addEventListener("fullscreenchange",E)}),e.onUnmounted(()=>{document.removeEventListener("click",p),document.removeEventListener("fullscreenchange",E)}),(N,h)=>(e.openBlock(),e.createElementBlock("div",Xe,[e.createElementVNode("div",{class:"header__left"},[e.createElementVNode("div",{class:"header__collapse",onClick:_},[...h[0]||(h[0]=[e.createElementVNode("span",null,"☰",-1)])])]),e.createElementVNode("div",Ge,[e.createElementVNode("div",{class:"header__action",onClick:f,title:l.value?"退出全屏":"全屏"},[l.value?(e.openBlock(),e.createElementBlock("svg",Ze,[...h[1]||(h[1]=[e.createElementVNode("path",{d:"M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"},null,-1)])])):(e.openBlock(),e.createElementBlock("svg",ve,[...h[2]||(h[2]=[e.createElementVNode("path",{d:"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"},null,-1)])]))],8,Qe),e.createElementVNode("div",{class:"header__action",onClick:k,title:"切换主题"},[e.unref(n).isDark?(e.openBlock(),e.createElementBlock("span",et,"🌙")):(e.openBlock(),e.createElementBlock("span",tt,"☀️"))]),e.createElementVNode("div",{class:"header__user",ref_key:"dropdownRef",ref:c},[e.createElementVNode("div",{class:"header__user-trigger",onClick:e.withModifiers(y,["stop"])},[e.createElementVNode("div",nt,[e.createElementVNode("span",null,e.toDisplayString(m.value.charAt(0)),1)]),e.createElementVNode("span",ot,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 w;return[d.value?(e.openBlock(),e.createElementBlock("div",st,[e.createElementVNode("div",rt,[e.createElementVNode("div",at,[e.createElementVNode("span",null,e.toDisplayString(m.value.charAt(0)),1)]),e.createElementVNode("div",lt,[e.createElementVNode("div",ct,e.toDisplayString(m.value),1),e.createElementVNode("div",it,e.toDisplayString(((w=e.unref(r))==null?void 0:w.departmentName)||""),1)])]),h[4]||(h[4]=e.createElementVNode("div",{class:"header__dropdown-divider"},null,-1)),e.createElementVNode("div",{class:"header__dropdown-menu"},[e.createElementVNode("div",{class:"header__dropdown-item header__dropdown-item--danger",onClick:u},[...h[3]||(h[3]=[e.createElementVNode("span",{class:"header__dropdown-icon"},"🚪",-1),e.createElementVNode("span",null,"退出登录",-1)])])])])):e.createCommentVNode("",!0)]}),_:1})],512)])]))}}),[["__scopeId","data-v-2bf8f3d2"]]),dt={class:"layout"},mt={class:"layout__main"},ut={class:"layout__content"},ue=V(e.defineComponent({__name:"index",setup(t){const n=x(),o=e.computed(()=>n.isCollapsed?"64px":"210px");return(s,r)=>{const d=e.resolveComponent("router-view");return e.openBlock(),e.createElementBlock("div",dt,[e.createElementVNode("aside",{class:"layout__aside",style:e.normalizeStyle({width:o.value})},[e.createVNode(de)],4),e.createElementVNode("div",mt,[e.createVNode(me,{class:"layout__header"}),e.createElementVNode("main",ut,[e.createVNode(d)])])])}}}),[["__scopeId","data-v-1a24e6d0"]]),pt=Object.freeze(Object.defineProperty({__proto__:null,default:ue},Symbol.toStringTag,{value:"Module"})),ht={},_t={class:"tabs-wrapper"};function ft(t,n){return e.openBlock(),e.createElementBlock("div",_t)}const gt=V(ht,[["render",ft],["__scopeId","data-v-3b1e382a"]]),yt={},kt={class:"footer"};function Et(t,n){return e.openBlock(),e.createElementBlock("div",kt,[...n[0]||(n[0]=[e.createElementVNode("span",null,"Copyright © 2024 Xto Demo. All Rights Reserved.",-1)])])}const Nt=V(yt,[["render",Et],["__scopeId","data-v-317ae311"]]);function bt(t){const n=U(),o=window.location.pathname,r=(n.menuBtnListMap[o]||[]).map(d=>d.code);return Array.isArray(t)?t.some(d=>r.includes(d)):r.includes(t)}function wt(){return!0}const Q=[{path:"/login",name:"Login",component:()=>Promise.resolve().then(()=>xt),meta:{title:"登录",hidden:!0}},{path:"/404",name:"NotFound",component:()=>Promise.resolve().then(()=>Ft),meta:{title:"404",hidden:!0}},{path:"/403",name:"Forbidden",component:()=>Promise.resolve().then(()=>qt),meta:{title:"403",hidden:!0}}],Z={path:"/:pathMatch(.*)*",redirect:"/404",meta:{hidden:!0}},v={path:"/",name:"Layout",component:()=>Promise.resolve().then(()=>pt),redirect:"/dashboard",children:[{path:"/dashboard",name:"Dashboard",component:()=>Promise.resolve().then(()=>fe),meta:{title:"仪表盘",icon:"dashboard",keepAlive:!0,affix:!0}},{path:"/system/user",name:"SystemUser",component:()=>Promise.resolve().then(()=>ge),meta:{title:"用户管理",icon:"user",keepAlive:!0}},{path:"/system/role",name:"SystemRole",component:()=>Promise.resolve().then(()=>ye),meta:{title:"角色管理",icon:"role",keepAlive:!0}},{path:"/system/menu",name:"SystemMenu",component:()=>Promise.resolve().then(()=>ke),meta:{title:"菜单管理",icon:"menu",keepAlive:!0}}]},Vt=[{path:"/dashboard",name:"Dashboard",component:()=>Promise.resolve().then(()=>fe),meta:{title:"仪表盘",icon:"dashboard",keepAlive:!0,affix:!0}},{path:"/system",name:"System",redirect:"/system/user",meta:{title:"系统管理",icon:"setting"},children:[{path:"user",name:"SystemUser",component:()=>Promise.resolve().then(()=>ge),meta:{title:"用户管理",icon:"user",keepAlive:!0}},{path:"role",name:"SystemRole",component:()=>Promise.resolve().then(()=>ye),meta:{title:"角色管理",icon:"role",keepAlive:!0}},{path:"menu",name:"SystemMenu",component:()=>Promise.resolve().then(()=>ke),meta:{title:"菜单管理",icon:"menu",keepAlive:!0}}]}],St=[{id:1,name:"Dashboard",path:"/dashboard",component:"dashboard/index",icon:"dashboard",title:"仪表盘",keepAlive:!0,affix:!0},{id:2,name:"System",path:"/system",redirect:"/system/user",icon:"setting",title:"系统管理",children:[{id:21,name:"SystemUser",path:"/system/user",component:"system/user/index",icon:"user",title:"用户管理",keepAlive:!0},{id:22,name:"SystemRole",path:"/system/role",component:"system/role/index",icon:"role",title:"角色管理",keepAlive:!0},{id:23,name:"SystemMenu",path:"/system/menu",component:"system/menu/index",icon:"menu",title:"菜单管理",keepAlive:!0}]}],ee=C.createRouter({history:C.createWebHistory(),routes:[...Q,v,Z],scrollBehavior:()=>({left:0,top:0})}),Ct=["/login","/404","/403"];ee.beforeEach(async(t,n,o)=>{const s=x();if(s.initTheme(),J())if(t.path==="/login")o({path:"/"});else{const{initApp:r,isLoggedIn:d}=R();if(!d.value&&!await r()){o("/login");return}t.name&&t.meta.keepAlive&&s.addCachedView(t.name),o()}else Ct.includes(t.path)?o():o({path:"/login",query:{redirectUrl:encodeURIComponent(t.fullPath)}})});function Bt(){const t=C.createRouter({history:C.createWebHistory(),routes:[...Q,v,Z]});ee.matcher=t.matcher}var pe=(t=>(t[t.ENABLED=1]="ENABLED",t[t.DISABLED=0]="DISABLED",t))(pe||{}),he=(t=>(t[t.UNKNOWN=0]="UNKNOWN",t[t.MALE=1]="MALE",t[t.FEMALE=2]="FEMALE",t))(he||{}),_e=(t=>(t[t.DIRECTORY=0]="DIRECTORY",t[t.MENU=1]="MENU",t[t.BUTTON=2]="BUTTON",t))(_e||{});const It={1:"启用",0:"禁用"},$t={0:"未知",1:"男",2:"女"},Tt={0:"目录",1:"菜单",2:"按钮"},Lt=[{label:"启用",value:1},{label:"禁用",value:0}],Mt=[{label:"未知",value:0},{label:"男",value:1},{label:"女",value:2}],Ut=[{label:"目录",value:0},{label:"菜单",value:1},{label:"按钮",value:2}],At={mounted(t,n){var m;const o=U(),{value:s}=n;if(!s)return;const r=window.location.pathname,c=(o.menuBtnListMap[r]||[]).map(_=>_.code);let l=!1;Array.isArray(s)?l=s.some(_=>c.includes(_)):l=c.includes(s),l||(m=t.parentNode)==null||m.removeChild(t)}},Pt={class:"login"},Dt={class:"login__container"},xt=Object.freeze(Object.defineProperty({__proto__:null,default:V(e.defineComponent({__name:"index",setup(t){const{login:n,loading:o}=R(),s=e.reactive({uid:"",password:""}),r={uid:[{required:!0,message:"请输入账号",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]},d=e.ref(),c=async()=>{var l;try{await((l=d.value)==null?void 0:l.validate()),await n(s.uid,s.password)}catch(m){console.error("登录失败",m)}};return(l,m)=>(e.openBlock(),e.createElementBlock("div",Pt,[e.createElementVNode("div",Dt,[m[3]||(m[3]=e.createElementVNode("div",{class:"login__header"},[e.createElementVNode("img",{src:ne,alt:"Logo",class:"login__logo"}),e.createElementVNode("h1",{class:"login__title"},"Analysis Web"),e.createElementVNode("p",{class:"login__subtitle"},"后台管理系统")],-1)),e.createVNode(e.unref($.Form),{ref_key:"formRef",ref:d,model:s,rules:r,class:"login__form","label-width":"0"},{default:e.withCtx(()=>[e.createVNode(e.unref($.FormItem),{prop:"uid"},{default:e.withCtx(()=>[e.createVNode(e.unref($.Input),{modelValue:s.uid,"onUpdate:modelValue":m[0]||(m[0]=_=>s.uid=_),placeholder:"请输入账号",size:"large"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref($.FormItem),{prop:"password"},{default:e.withCtx(()=>[e.createVNode(e.unref($.Input),{modelValue:s.password,"onUpdate:modelValue":m[1]||(m[1]=_=>s.password=_),type:"password",placeholder:"请输入密码",size:"large","show-password":"",onKeyup:e.withKeys(c,["enter"])},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref($.FormItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(z.Button),{type:"primary",size:"large",loading:e.unref(o),class:"login__submit",onClick:c},{default:e.withCtx(()=>[...m[2]||(m[2]=[e.createTextVNode(" 登录 ",-1)])]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"])])]))}}),[["__scopeId","data-v-728dba9d"]])},Symbol.toStringTag,{value:"Module"})),Ot={class:"error-page"},Rt={class:"error-page__content"},Ft=Object.freeze(Object.defineProperty({__proto__:null,default:V(e.defineComponent({__name:"404",setup(t){const n=C.useRouter(),o=()=>{n.push("/")};return(s,r)=>(e.openBlock(),e.createElementBlock("div",Ot,[e.createElementVNode("div",Rt,[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(z.Button),{type:"primary",onClick:o},{default:e.withCtx(()=>[...r[0]||(r[0]=[e.createTextVNode("返回首页",-1)])]),_:1})])]))}}),[["__scopeId","data-v-f1a1acb0"]])},Symbol.toStringTag,{value:"Module"})),zt={class:"error-page"},jt={class:"error-page__content"},qt=Object.freeze(Object.defineProperty({__proto__:null,default:V(e.defineComponent({__name:"403",setup(t){const n=C.useRouter(),o=()=>{n.push("/")};return(s,r)=>(e.openBlock(),e.createElementBlock("div",zt,[e.createElementVNode("div",jt,[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(z.Button),{type:"primary",onClick:o},{default:e.withCtx(()=>[...r[0]||(r[0]=[e.createTextVNode("返回首页",-1)])]),_:1})])]))}}),[["__scopeId","data-v-f6105e3d"]])},Symbol.toStringTag,{value:"Module"})),Ht={},Kt={class:"dashboard"};function Wt(t,n){return e.openBlock(),e.createElementBlock("div",Kt,[...n[0]||(n[0]=[e.createElementVNode("div",{class:"dashboard__placeholder"},[e.createElementVNode("h2",null,"首页"),e.createElementVNode("p",null,"功能开发中...")],-1)])])}const fe=Object.freeze(Object.defineProperty({__proto__:null,default:V(Ht,[["render",Wt],["__scopeId","data-v-a57037a8"]])},Symbol.toStringTag,{value:"Module"})),Yt={},Jt={class:"page"};function Xt(t,n){return e.openBlock(),e.createElementBlock("div",Jt,[...n[0]||(n[0]=[e.createElementVNode("div",{class:"page__placeholder"},[e.createElementVNode("h2",null,"用户管理"),e.createElementVNode("p",null,"功能开发中...")],-1)])])}const ge=Object.freeze(Object.defineProperty({__proto__:null,default:V(Yt,[["render",Xt],["__scopeId","data-v-715bfcf7"]])},Symbol.toStringTag,{value:"Module"})),Gt={},Qt={class:"page"};function Zt(t,n){return e.openBlock(),e.createElementBlock("div",Qt,[...n[0]||(n[0]=[e.createElementVNode("div",{class:"page__placeholder"},[e.createElementVNode("h2",null,"角色管理"),e.createElementVNode("p",null,"功能开发中...")],-1)])])}const ye=Object.freeze(Object.defineProperty({__proto__:null,default:V(Gt,[["render",Zt],["__scopeId","data-v-0802c3db"]])},Symbol.toStringTag,{value:"Module"})),vt={},en={class:"page"};function tn(t,n){return e.openBlock(),e.createElementBlock("div",en,[...n[0]||(n[0]=[e.createElementVNode("div",{class:"page__placeholder"},[e.createElementVNode("h2",null,"菜单管理"),e.createElementVNode("p",null,"功能开发中...")],-1)])])}const ke=Object.freeze(Object.defineProperty({__proto__:null,default:V(vt,[["render",tn],["__scopeId","data-v-7bc14131"]])},Symbol.toStringTag,{value:"Module"}));a.Footer=Nt,a.Gender=he,a.GenderOptions=Mt,a.GenderText=$t,a.Header=me,a.Layout=ue,a.MenuType=_e,a.MenuTypeOptions=Ut,a.MenuTypeText=Tt,a.Sidebar=de,a.Status=pe,a.StatusOptions=Lt,a.StatusText=It,a.Tabs=gt,a.appConfig=T,a.clearToken=Y,a.clearUserInfo=Ce,a.defaultDynamicRoutes=Vt,a.errorRoute=Z,a.getCode=we,a.getCurrentUser=le,a.getLoginInfo=M,a.getToken=W,a.getTokenType=se,a.getUserInfo=Se,a.getUserMenu=ce,a.hasPermission=bt,a.hasToken=J,a.http=A,a.isAdmin=wt,a.layoutRoute=v,a.local=g,a.localStorageUtil=P,a.login=re,a.loginByCode=Be,a.logout=ae,a.mockMenuData=St,a.permissionDirective=At,a.resetRouter=Bt,a.router=ee,a.session=be,a.sessionStorageUtil=D,a.setLoginInfo=oe,a.setUserInfo=Ve,a.staticRoutes=Q,a.useApp=R,a.useAppStore=x,a.useAuth=Ie,a.useAuthStore=X,a.useForm=Te,a.useMenu=ie,a.useMenuStore=U,a.useTable=Le,a.useUserStore=G,Object.defineProperty(a,Symbol.toStringTag,{value:"Module"})});
|
|
1
|
+
(function(a,R){typeof exports=="object"&&typeof module<"u"?R(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"],R):(a=typeof globalThis<"u"?globalThis:a||self,R(a.XtoFronted={},a.axios,a.feedback,a.Vue,a.Pinia,a.VueRouter,a.navigation,a.base,a.form))})(this,function(a,R,B,e,q,I,H,K,T){"use strict";let M={...{appName:"XTO App",baseUrl:"",appId:"",clientId:"",indexPath:"/dashboard",loginPath:"/login"}};function ee(t){M={...M,...t}}function V(){return M}function ge(t){return M[t]}const j=()=>`tooyu-cloud:${M.appId}:`,te=t=>({get(o){const n=j(),s=t.getItem(n+o);if(!s)return null;try{return JSON.parse(s)}catch{return s}},set(o,n){const s=j();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=j();t.removeItem(n+o)},clear(){const o=j();Object.keys(t).forEach(s=>{s.startsWith(o)&&t.removeItem(s)})}}),F=te(window.localStorage),O=te(window.sessionStorage),_={get:F.get,set:F.set,remove:F.remove,clear:F.clear},ye={get:O.get,set:O.set,remove:O.remove,clear:O.clear},X="login_info",W="user_info",P=()=>_.get(X),ne=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};_.set(X,o)},J=()=>{const t=P();return(t==null?void 0:t.accessToken)||null},oe=()=>{const t=P();return(t==null?void 0:t.tokenType)||"Bearer"},ke=()=>{const t=P();return(t==null?void 0:t.code)||null},G=()=>{_.remove(X),_.remove(W)},Q=()=>!!J(),Ee=t=>{_.set(W,t)},Ne=()=>_.get(W),we=()=>{_.remove(W)},Ce=()=>{const t=V(),o=R.create({baseURL:t.baseUrl,timeout:15e3,headers:{"Content-Type":"application/json"}});return o.interceptors.request.use(n=>{const s=J();if(s){const r=oe();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:(B.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:B.Message.error("登录已过期,请重新登录"),G(),window.location.href="/login";break;case 404:B.Message.error("请求资源不存在");break;case 500:B.Message.error("服务器错误");break;default:B.Message.error(((r=s.data)==null?void 0:r.message)||"请求失败")}else B.Message.error("网络连接失败");return Promise.reject(n)}),o};let Y=null;function $(){return Y||(Y=Ce()),Y}function se(){Y=null}new Proxy({},{get(t,o){return $()[o]}});const D={get(t,o){return $().get(t,o).then(n=>n.data)},post(t,o,n){return $().post(t,o,n).then(s=>s.data)},put(t,o,n){return $().put(t,o,n).then(s=>s.data)},patch(t,o,n){return $().patch(t,o,n).then(s=>s.data)},delete(t,o){return $().delete(t,o).then(n=>n.data)}},x=q.defineStore("app",()=>{const t=e.ref(_.get("isDark")||!1),o=e.ref(_.get("theme")||"light"),n=e.ref(_.get("layout")||"sidebar"),s=e.ref(_.get("isCollapsed")||!1),r=e.ref(_.get("showTabs")??!0),m=e.ref(_.get("showFooter")??!0),l=e.ref(_.get("showBreadcrumb")??!0),c=e.ref(_.get("primaryColor")||"#409eff"),f=e.ref([]),k=e.computed(()=>t.value?"dark":"light"),g=()=>{t.value=!t.value,o.value=t.value?"dark":"light",h()},u=C=>{o.value=C,t.value=C==="dark",h()},h=()=>{const C=document.documentElement;t.value?C.classList.add("dark"):C.classList.remove("dark"),_.set("isDark",t.value),_.set("theme",o.value)},E=()=>{s.value=!s.value,_.set("isCollapsed",s.value)},i=C=>{n.value=C,_.set("layout",C)},N=()=>{r.value=!r.value,_.set("showTabs",r.value)},d=()=>{m.value=!m.value,_.set("showFooter",m.value)},y=()=>{l.value=!l.value,_.set("showBreadcrumb",l.value)},p=C=>{c.value=C,document.documentElement.style.setProperty("--color-primary",C),_.set("primaryColor",C)},w=C=>{f.value.includes(C)||f.value.push(C)},b=C=>{const _e=f.value.indexOf(C);_e>-1&&f.value.splice(_e,1)},S=()=>{f.value=[]},U=()=>{h(),c.value!=="#409eff"&&document.documentElement.style.setProperty("--color-primary",c.value)};return e.watch(t,h),{isDark:t,theme:o,layout:n,isCollapsed:s,showTabs:r,showFooter:m,showBreadcrumb:l,primaryColor:c,cachedViews:f,themeClass:k,toggleTheme:g,toggleCollapse:E,setTheme:u,setLayout:i,toggleTabs:N,toggleFooter:d,toggleBreadcrumb:y,setPrimaryColor:p,addCachedView:w,removeCachedView:b,clearCachedViews:S,initTheme:U}}),Ve="/vite.svg",Z=q.defineStore("auth",()=>{const t=e.ref(P()),o=e.computed(()=>Q()),n=c=>{ne(c),t.value=P()},s=()=>{t.value=null,G()},r=e.computed(()=>{var c;return((c=t.value)==null?void 0:c.accessToken)||null}),m=e.computed(()=>{var c;return((c=t.value)==null?void 0:c.tokenType)||"Bearer"}),l=e.computed(()=>{var c;return((c=t.value)==null?void 0:c.code)||null});return{loginInfo:t,isLoggedIn:o,accessToken:r,tokenType:m,code:l,login:n,logout:s}}),v=q.defineStore("user",()=>{const t=e.ref(_.get("user_info")),o=e.computed(()=>!!t.value),n=e.computed(()=>{var c;return((c=t.value)==null?void 0:c.userName)||""}),s=e.computed(()=>{var c;return((c=t.value)==null?void 0:c.avatar)||""}),r=e.computed(()=>{var c;return(c=t.value)==null?void 0:c.userId});return{userInfo:t,isLoggedIn:o,userName:n,avatar:s,userId:r,setUserInfo:c=>{t.value=c,_.set("user_info",c)},clearUserInfo:()=>{t.value=null,_.remove("user_info")}}}),A=q.defineStore("menu",()=>{const t="menu_list",o="menu_btn_list",n=e.ref(_.get(t)||[]),s=e.ref(_.get(o)||{}),r=e.computed(()=>n.value.length>0),m=e.computed(()=>{const u=V();function h(i){if(i&&i.length>0)for(let N=0;N<i.length;N++){const d=i[N];if(d.default)return d.path;{const y=h(d.children||[]);if(y)return y}}return null}return h(n.value)||u.indexPath||"/dashboard"}),l=(u,h)=>{const E=[];return!u||u.length<=0||u.forEach(i=>{if(i.type===1){const N={code:i.menuCode,name:i.menuName,path:"",title:i.menuName},d=h||"";let y=s.value[d]||[];y.push(N),s.value[d]=y}else{const N=[];let d=i.menuUrl,y=i.isOut||!1;!y&&i.menuUrl&&(i.menuUrl.startsWith("http")?d="/iframe/"+encodeURIComponent(d):i.menuUrl.startsWith("keep-alive:")&&(d="/iframe/keep-alive/"+encodeURIComponent(d.split("keep-alive:")[1])));const p={code:i.menuCode,name:i.menuName,path:d,icon:i.icon,closable:i.closable,default:i.isDefault,out:y,children:N,title:i.menuName};if(E.push(p),i.children&&i.children.length>0){const w=l(i.children,i.menuUrl);p.children=w}}}),E},c=u=>{n.value=u,_.set(t,u)},f=u=>{const h=n.value.findIndex(E=>E.code==="home");h>-1&&n.value.splice(h,1),n.value.unshift({...u,code:"home",name:"首页"}),_.set(t,n.value)},k=(u,h)=>{if(g(),!(h!=null&&h.skipIndexMenu)){const i=V();n.value.push({code:"home",name:"首页",icon:"home",closable:!1,default:!1,out:!1,path:i.indexPath||"/dashboard",title:"首页"})}const E=l(u);n.value.push(...E),_.set(t,n.value),_.set(o,s.value)},g=()=>{n.value=[],s.value={},_.remove(t),_.remove(o)};return{menuList:n,menuBtnListMap:s,hasMenu:r,index:m,setMenuList:c,setIndexMenu:f,setMenuFromRemote:k,clearMenu:g}});function re(t){const o=V();return D.post("/user/v1.0/login/by-domain",{appId:o.appId,clientId:o.clientId,uid:t.uid,password:t.password,code:!0})}function ae(){return D.put("/user/v1.0/user/logout")}function be(t,o){return D.get(`/user/v1.0/login/by-code?appId=${t}&code=${o}`)}function ce(){return D.get("/user/v1.0/user/get-me")}function le(){return D.get(`/user/v1.0/menu/get-menu?appId=${M.appId}`)}function z(){const t=I.useRouter(),o=I.useRoute(),n=Z(),s=v(),r=A(),m=e.ref(!1),l=e.computed(()=>n.isLoggedIn),c=e.computed(()=>s.userInfo),f=e.computed(()=>s.userName||""),k=e.computed(()=>r.menuList),g=e.computed(()=>r.index),u=async(y,p)=>{m.value=!0;try{d();const b=(await re({uid:y,password:p})).data;n.login(b),await E(),await i();const S=o.query.redirectUrl;if(S){const U=decodeURIComponent(S);if(U.startsWith("http")){const C=b.code;location.href=U.includes("?")?`${U}&code=${C}`:`${U}?code=${C}`}else await t.replace(U)}else await t.replace(g.value||"/");return B.Message.success("登录成功"),{success:!0,data:b}}catch(w){return B.Message.error((w==null?void 0:w.message)||"登录失败"),{success:!1,error:w}}finally{m.value=!1}},h=async(y=!0)=>{const p=V();try{await ae()}catch(w){console.error("退出登录接口失败",w)}finally{d(),t.push(p.loginPath||"/login"),y&&B.Message.success("退出登录成功")}},E=async()=>{const y=await ce();return s.setUserInfo(y.data),y.data},i=async()=>{const y=await le();return r.setMenuFromRemote(y.data),r.menuList},N=async()=>{if(!n.isLoggedIn)return!1;try{return s.userInfo||await E(),r.hasMenu||await i(),!0}catch(y){return console.error("初始化应用失败",y),d(),!1}},d=()=>{n.logout(),s.clearUserInfo(),r.clearMenu()};return{loading:m,isLoggedIn:l,userInfo:c,userName:f,menuList:k,indexPath:g,login:u,logout:h,loadUserInfo:E,loadMenu:i,initApp:N,clearAllState:d}}function Ie(){const t=A(),o=Z(),n=v(),s=e.computed(()=>o.isLoggedIn),r=e.computed(()=>n.userName),m=e.computed(()=>n.userInfo),l=g=>{const u=window.location.pathname,E=(t.menuBtnListMap[u]||[]).map(i=>i.code);return Array.isArray(g)?g.some(i=>E.includes(i)):E.includes(g)};return{isLoggedIn:s,userName:r,userInfo:m,hasPermission:l,hasAnyPermission:g=>g.some(u=>l(u)),hasAllPermissions:g=>g.every(u=>l(u)),getCurrentPagePermissions:()=>{const g=window.location.pathname;return(t.menuBtnListMap[g]||[]).map(h=>h.code)}}}const Se={home:"🏠",dashboard:"📊",system:"⚙️",user:"👤",role:"👥",menu:"📋",setting:"🔧"};function ie(t){const o=I.useRoute(),n=I.useRouter(),s=A(),r=x(),m={...Se,...t},l=e.ref(""),c=e.computed(()=>o.path),f=e.computed(()=>r.isCollapsed),k=e.computed(()=>s.menuList),g=e.computed(()=>s.hasMenu),u=(p,w="")=>{const b=[];return p.forEach(S=>{S.children&&S.children.length>0?b.push(...u(S.children,S.title)):b.push({...S,parentTitle:w})}),b},h=e.computed(()=>l.value.trim()?u(k.value).filter(w=>w.title.toLowerCase().includes(l.value.toLowerCase())):[]),E=e.computed(()=>l.value.trim()?k.value.map(p=>{if(p.children&&p.children.length>0){const w=p.children.filter(b=>b.title.toLowerCase().includes(l.value.toLowerCase()));return w.length>0?{...p,children:w}:null}return p.title.toLowerCase().includes(l.value.toLowerCase())?p:null}).filter(Boolean):k.value);return{searchKeyword:l,activeMenu:c,isCollapsed:f,menuList:k,hasMenu:g,searchResults:h,filteredMenuList:E,flattenMenus:u,getMenuIcon:p=>m[p||""]||"📄",handleMenuSelect:p=>{p&&p!==o.path&&(n.push(p),l.value="")},handleSearchItemClick:p=>{n.push(p),l.value=""},clearSearch:()=>{l.value=""}}}function Be(t,o={}){const{rules:n,onSubmit:s}=o,r=e.ref(),m=e.reactive({...t}),l=e.ref(!1),c=e.ref(!1),f=e.ref(!1),k=()=>{h(),f.value=!1,c.value=!0},g=i=>{Object.assign(m,i),f.value=!0,c.value=!0},u=()=>{c.value=!1,h()},h=()=>{var i;Object.keys(t).forEach(N=>{m[N]=t[N]}),(i=r.value)==null||i.resetFields()};return{formRef:r,formData:m,rules:n,loading:l,visible:c,isEdit:f,openAdd:k,openEdit:g,close:u,resetForm:h,handleSubmit:async()=>{var i;try{await((i=r.value)==null?void 0:i.validate()),l.value=!0,await(s==null?void 0:s(m)),u()}catch(N){console.error(N)}finally{l.value=!1}}}}function Le(t){const{fetchData:o,defaultPageSize:n=10}=t,s=e.ref(!1),r=e.ref([]),m=e.ref(0),l=e.ref(1),c=e.ref(n),f=e.reactive({}),k=async()=>{s.value=!0;try{const d={...f,page:l.value,pageSize:c.value},y=await o(d);r.value=y.list,m.value=y.total}catch(d){console.error(d)}finally{s.value=!1}},g=()=>{l.value=1,k()},u=()=>{Object.keys(f).forEach(d=>{f[d]=void 0}),l.value=1,k()},h=d=>{l.value=d,k()},E=d=>{c.value=d,l.value=1,k()},i=()=>{k()},N=e.computed(()=>({current:l.value,pageSize:c.value,total:m.value}));return{loading:s,data:r,total:m,currentPage:l,pageSize:c,searchParams:f,pagination:N,getData:k,handleSearch:g,handleReset:u,handlePageChange:h,handleSizeChange:E,refresh:i}}const Te={class:"sidebar"},$e={class:"sidebar__logo"},Ue={key:0,class:"sidebar__search"},Me={key:0,class:"sidebar__search-results"},Pe=["onClick"],De={class:"menu-icon"},Ae={class:"sidebar__search-item-info"},Re={class:"sidebar__search-item-title"},Fe={key:0,class:"sidebar__search-item-parent"},Oe={class:"menu-icon"},xe={class:"menu-icon"},ze={class:"menu-icon"},qe={key:1,class:"sidebar__user"},He={class:"sidebar__user-info"},Ke={class:"sidebar__user-name"},je={class:"sidebar__user-role"},We=e.defineComponent({__name:"Sidebar",setup(t){const{logout:o,userName:n,userInfo:s}=z(),r=V(),{searchKeyword:m,activeMenu:l,isCollapsed:c,searchResults:f,filteredMenuList:k,getMenuIcon:g,handleMenuSelect:u,handleSearchItemClick:h}=ie();return(E,i)=>{var N;return e.openBlock(),e.createElementBlock("div",Te,[e.createElementVNode("div",$e,[i[1]||(i[1]=e.createElementVNode("img",{src:Ve,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.unref(c)?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Ue,[e.createVNode(e.unref(T.Input),{modelValue:e.unref(m),"onUpdate:modelValue":i[0]||(i[0]=d=>e.isRef(m)?m.value=d:null),placeholder:"搜索菜单...",size:"small",clearable:""},null,8,["modelValue"]),e.unref(f).length>0?(e.openBlock(),e.createElementBlock("div",Me,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(f),d=>(e.openBlock(),e.createElementBlock("div",{key:d.path,class:"sidebar__search-item",onClick:y=>e.unref(h)(d.path)},[e.createElementVNode("span",De,e.toDisplayString(e.unref(g)(d.icon)),1),e.createElementVNode("div",Ae,[e.createElementVNode("span",Re,e.toDisplayString(d.title),1),d.parentTitle?(e.openBlock(),e.createElementBlock("span",Fe,e.toDisplayString(d.parentTitle),1)):e.createCommentVNode("",!0)])],8,Pe))),128))])):e.createCommentVNode("",!0)])),e.createVNode(e.unref(H.Menu),{"default-active":e.unref(l),collapse:e.unref(c),"collapse-transition":!1,class:"sidebar__menu",onSelect:e.unref(u)},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(k),d=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:d.path},[d.children&&d.children.length>0?(e.openBlock(),e.createBlock(e.unref(H.SubMenu),{key:0,index:d.path},{title:e.withCtx(()=>[e.createElementVNode("span",Oe,e.toDisplayString(e.unref(g)(d.icon)),1),e.createElementVNode("span",null,e.toDisplayString(d.title),1)]),default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.children,y=>(e.openBlock(),e.createBlock(e.unref(H.MenuItem),{key:y.path,index:y.path},{default:e.withCtx(()=>[e.createElementVNode("span",xe,e.toDisplayString(e.unref(g)(y.icon)),1),e.createElementVNode("span",null,e.toDisplayString(y.title),1)]),_:2},1032,["index"]))),128))]),_:2},1032,["index"])):(e.openBlock(),e.createBlock(e.unref(H.MenuItem),{key:1,index:d.path},{default:e.withCtx(()=>[e.createElementVNode("span",ze,e.toDisplayString(e.unref(g)(d.icon)),1),e.createElementVNode("span",null,e.toDisplayString(d.title),1)]),_:2},1032,["index"]))],64))),128))]),_:1},8,["default-active","collapse","onSelect"]),e.unref(c)?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",qe,[e.createElementVNode("div",He,[e.createElementVNode("span",Ke,e.toDisplayString(e.unref(n)||"用户"),1),e.createElementVNode("span",je,e.toDisplayString(((N=e.unref(s))==null?void 0:N.departmentName)||""),1)]),e.createVNode(e.unref(K.Button),{type:"text",size:"small",onClick:e.unref(o)},{default:e.withCtx(()=>[...i[2]||(i[2]=[e.createTextVNode("退出",-1)])]),_:1},8,["onClick"])]))])}}}),L=(t,o)=>{const n=t.__vccOpts||t;for(const[s,r]of o)n[s]=r;return n},de=L(We,[["__scopeId","data-v-5560e0bb"]]),Ye={class:"header"},Xe={class:"header__right"},Je=["title"],Ge={key:0,viewBox:"0 0 24 24",width:"16",height:"16",fill:"currentColor"},Qe={key:1,viewBox:"0 0 24 24",width:"16",height:"16",fill:"currentColor"},Ze={key:0},ve={key:1},et={class:"header__avatar"},tt={class:"header__user-name"},nt={key:0,class:"header__dropdown"},ot={class:"header__dropdown-header"},st={class:"header__dropdown-avatar"},rt={class:"header__dropdown-info"},at={class:"header__dropdown-name"},ct={class:"header__dropdown-role"},ue=L(e.defineComponent({__name:"Header",setup(t){const o=x(),{logout:n,userName:s,userInfo:r}=z(),m=e.ref(!1),l=e.ref(null),c=e.ref(!1),f=e.computed(()=>s.value||"用户"),k=()=>{o.toggleCollapse()},g=()=>{o.toggleTheme()},u=()=>{document.fullscreenElement?document.exitFullscreen():document.documentElement.requestFullscreen()},h=()=>{c.value=!!document.fullscreenElement},E=()=>{m.value=!m.value},i=()=>{m.value=!1},N=async()=>{i(),await n()},d=y=>{l.value&&!l.value.contains(y.target)&&i()};return e.onMounted(()=>{document.addEventListener("click",d),document.addEventListener("fullscreenchange",h)}),e.onUnmounted(()=>{document.removeEventListener("click",d),document.removeEventListener("fullscreenchange",h)}),(y,p)=>(e.openBlock(),e.createElementBlock("div",Ye,[e.createElementVNode("div",{class:"header__left"},[e.createElementVNode("div",{class:"header__collapse",onClick:k},[...p[0]||(p[0]=[e.createElementVNode("span",null,"☰",-1)])])]),e.createElementVNode("div",Xe,[e.createElementVNode("div",{class:"header__action",onClick:u,title:c.value?"退出全屏":"全屏"},[c.value?(e.openBlock(),e.createElementBlock("svg",Ge,[...p[1]||(p[1]=[e.createElementVNode("path",{d:"M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"},null,-1)])])):(e.openBlock(),e.createElementBlock("svg",Qe,[...p[2]||(p[2]=[e.createElementVNode("path",{d:"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"},null,-1)])]))],8,Je),e.createElementVNode("div",{class:"header__action",onClick:g,title:"切换主题"},[e.unref(o).isDark?(e.openBlock(),e.createElementBlock("span",Ze,"🌙")):(e.openBlock(),e.createElementBlock("span",ve,"☀️"))]),e.createElementVNode("div",{class:"header__user",ref_key:"dropdownRef",ref:l},[e.createElementVNode("div",{class:"header__user-trigger",onClick:e.withModifiers(E,["stop"])},[e.createElementVNode("div",et,[e.createElementVNode("span",null,e.toDisplayString(f.value.charAt(0)),1)]),e.createElementVNode("span",tt,e.toDisplayString(f.value),1),e.createElementVNode("span",{class:e.normalizeClass(["header__user-arrow",{"is-active":m.value}])},"▼",2)]),e.createVNode(e.Transition,{name:"dropdown"},{default:e.withCtx(()=>{var w;return[m.value?(e.openBlock(),e.createElementBlock("div",nt,[e.createElementVNode("div",ot,[e.createElementVNode("div",st,[e.createElementVNode("span",null,e.toDisplayString(f.value.charAt(0)),1)]),e.createElementVNode("div",rt,[e.createElementVNode("div",at,e.toDisplayString(f.value),1),e.createElementVNode("div",ct,e.toDisplayString(((w=e.unref(r))==null?void 0:w.departmentName)||""),1)])]),p[4]||(p[4]=e.createElementVNode("div",{class:"header__dropdown-divider"},null,-1)),e.createElementVNode("div",{class:"header__dropdown-menu"},[e.createElementVNode("div",{class:"header__dropdown-item header__dropdown-item--danger",onClick:N},[...p[3]||(p[3]=[e.createElementVNode("span",{class:"header__dropdown-icon"},"🚪",-1),e.createElementVNode("span",null,"退出登录",-1)])])])])):e.createCommentVNode("",!0)]}),_:1})],512)])]))}}),[["__scopeId","data-v-2bf8f3d2"]]),lt={class:"layout"},it={class:"layout__main"},dt={class:"layout__content"},me=L(e.defineComponent({__name:"index",setup(t){const o=x(),n=e.computed(()=>o.isCollapsed?"64px":"210px");return(s,r)=>{const m=e.resolveComponent("router-view");return e.openBlock(),e.createElementBlock("div",lt,[e.createElementVNode("aside",{class:"layout__aside",style:e.normalizeStyle({width:n.value})},[e.createVNode(de)],4),e.createElementVNode("div",it,[e.createVNode(ue,{class:"layout__header"}),e.createElementVNode("main",dt,[e.createVNode(m)])])])}}}),[["__scopeId","data-v-1a24e6d0"]]),ut={},mt={class:"tabs-wrapper"};function ft(t,o){return e.openBlock(),e.createElementBlock("div",mt)}const ht=L(ut,[["render",ft],["__scopeId","data-v-3b1e382a"]]),pt={},_t={class:"footer"};function gt(t,o){return e.openBlock(),e.createElementBlock("div",_t,[...o[0]||(o[0]=[e.createElementVNode("span",null,"Copyright © 2024 Xto Demo. All Rights Reserved.",-1)])])}const yt=L(pt,[["render",gt],["__scopeId","data-v-317ae311"]]),kt={class:"login"},Et={class:"login__container"},Nt={class:"login__header"},wt=["src"],Ct={class:"login__title"},Vt={class:"login__subtitle"},bt=L(e.defineComponent({__name:"index",props:{logo:{},title:{},subtitle:{}},emits:["success","error"],setup(t,{emit:o}){const n=o,{login:s,loading:r}=z(),m=V(),l=e.reactive({uid:"",password:""}),c={uid:[{required:!0,message:"请输入账号",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]},f=e.ref(),k=async()=>{var g;try{await((g=f.value)==null?void 0:g.validate());const u=await s(l.uid,l.password);u.success?n("success",u.data):n("error",u.error)}catch(u){console.error("登录失败",u),n("error",u)}};return(g,u)=>(e.openBlock(),e.createElementBlock("div",kt,[e.createElementVNode("div",Et,[e.createElementVNode("div",Nt,[e.createElementVNode("img",{src:t.logo||"/vite.svg",alt:"Logo",class:"login__logo"},null,8,wt),e.createElementVNode("h1",Ct,e.toDisplayString(t.title||e.unref(m).appName),1),e.createElementVNode("p",Vt,e.toDisplayString(t.subtitle||"后台管理系统"),1)]),e.createVNode(e.unref(T.Form),{ref_key:"formRef",ref:f,model:l,rules:c,class:"login__form","label-width":"0"},{default:e.withCtx(()=>[e.createVNode(e.unref(T.FormItem),{prop:"uid"},{default:e.withCtx(()=>[e.createVNode(e.unref(T.Input),{modelValue:l.uid,"onUpdate:modelValue":u[0]||(u[0]=h=>l.uid=h),placeholder:"请输入账号",size:"large"},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(T.FormItem),{prop:"password"},{default:e.withCtx(()=>[e.createVNode(e.unref(T.Input),{modelValue:l.password,"onUpdate:modelValue":u[1]||(u[1]=h=>l.password=h),type:"password",placeholder:"请输入密码",size:"large","show-password":"",onKeyup:e.withKeys(k,["enter"])},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(T.FormItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(K.Button),{type:"primary",size:"large",loading:e.unref(r),class:"login__submit",onClick:k},{default:e.withCtx(()=>[...u[2]||(u[2]=[e.createTextVNode(" 登录 ",-1)])]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"])])]))}}),[["__scopeId","data-v-fdb37509"]]),It={class:"error-page"},St={class:"error-page__content"},Bt=L(e.defineComponent({__name:"404",setup(t){const o=I.useRouter(),n=()=>{o.push("/")};return(s,r)=>(e.openBlock(),e.createElementBlock("div",It,[e.createElementVNode("div",St,[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(K.Button),{type:"primary",onClick:n},{default:e.withCtx(()=>[...r[0]||(r[0]=[e.createTextVNode("返回首页",-1)])]),_:1})])]))}}),[["__scopeId","data-v-6fc8a81b"]]),Lt={class:"error-page"},Tt={class:"error-page__content"},$t=L(e.defineComponent({__name:"403",setup(t){const o=I.useRouter(),n=()=>{o.push("/")};return(s,r)=>(e.openBlock(),e.createElementBlock("div",Lt,[e.createElementVNode("div",Tt,[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(K.Button),{type:"primary",onClick:n},{default:e.withCtx(()=>[...r[0]||(r[0]=[e.createTextVNode("返回首页",-1)])]),_:1})])]))}}),[["__scopeId","data-v-f9466667"]]);function Ut(t){const o=A(),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)}function Mt(){return!0}const Pt=["/login","/404","/403"];function Dt(t,o){const n=V(),s=I.createRouter({history:I.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,l)=>{const c=x();if(c.initTheme(),Q())if(r.path===n.loginPath)l({path:n.indexPath||"/"});else{const{initApp:f,isLoggedIn:k}=z();if(!k.value&&!await f()){l(n.loginPath||"/login");return}r.name&&r.meta.keepAlive&&c.addCachedView(r.name),l()}else Pt.includes(r.path)?l():l({path:n.loginPath||"/login",query:{redirectUrl:encodeURIComponent(r.fullPath)}})}),s}function At(t,o){const n=I.createRouter({history:I.createWebHistory(),routes:o});t.matcher=n.matcher}function Rt(t){const o=V();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:"/404",name:"NotFound",component:t==null?void 0:t.notFoundComponent,meta:{title:"404",hidden:!0}},{path:"/403",name:"Forbidden",component:t==null?void 0:t.forbiddenComponent,meta:{title:"403",hidden:!0}},{path:"/:pathMatch(.*)*",redirect:"/404",meta:{hidden:!0}}]}function Ft(t,o={}){const n=o.indexPath||"/dashboard";return{path:"/",name:"Layout",component:o.layoutComponent||me,redirect:n,children:t}}function Ot(t={}){return[{path:"/404",name:"NotFound",component:t.notFoundComponent,meta:{title:"404",hidden:!0}},{path:"/403",name:"Forbidden",component:t.forbiddenComponent,meta:{title:"403",hidden:!0}},{path:"/:pathMatch(.*)*",redirect:"/404",meta:{hidden:!0}}]}var fe=(t=>(t[t.ENABLED=1]="ENABLED",t[t.DISABLED=0]="DISABLED",t))(fe||{}),he=(t=>(t[t.UNKNOWN=0]="UNKNOWN",t[t.MALE=1]="MALE",t[t.FEMALE=2]="FEMALE",t))(he||{}),pe=(t=>(t[t.DIRECTORY=0]="DIRECTORY",t[t.MENU=1]="MENU",t[t.BUTTON=2]="BUTTON",t))(pe||{});const xt={1:"启用",0:"禁用"},zt={0:"未知",1:"男",2:"女"},qt={0:"目录",1:"菜单",2:"按钮"},Ht=[{label:"启用",value:1},{label:"禁用",value:0}],Kt=[{label:"未知",value:0},{label:"男",value:1},{label:"女",value:2}],jt=[{label:"目录",value:0},{label:"菜单",value:1},{label:"按钮",value:2}],Wt={mounted(t,o){var f;const n=A(),{value:s}=o;if(!s)return;const r=window.location.pathname,l=(n.menuBtnListMap[r]||[]).map(k=>k.code);let c=!1;Array.isArray(s)?c=s.some(k=>l.includes(k)):c=l.includes(s),c||(f=t.parentNode)==null||f.removeChild(t)}};function Yt(t){return ee(t),se(),{config:V()}}a.Footer=yt,a.Forbidden=$t,a.Gender=he,a.GenderOptions=Kt,a.GenderText=zt,a.Header=ue,a.Layout=me,a.Login=bt,a.MenuType=pe,a.MenuTypeOptions=jt,a.MenuTypeText=qt,a.NotFound=Bt,a.Sidebar=de,a.Status=fe,a.StatusOptions=Ht,a.StatusText=xt,a.Tabs=ht,a.clearToken=G,a.clearUserInfo=we,a.createErrorRoutes=Ot,a.createLayoutRoute=Ft,a.createRouter=Dt,a.createStaticRoutes=Rt,a.createXtoApp=Yt,a.getCode=ke,a.getConfig=V,a.getConfigValue=ge,a.getCurrentUser=ce,a.getLoginInfo=P,a.getRequest=$,a.getToken=J,a.getTokenType=oe,a.getUserInfo=Ne,a.getUserMenu=le,a.hasPermission=Ut,a.hasToken=Q,a.http=D,a.isAdmin=Mt,a.local=_,a.localStorageUtil=F,a.login=re,a.loginByCode=be,a.logout=ae,a.permissionDirective=Wt,a.resetRequest=se,a.resetRouter=At,a.session=ye,a.sessionStorageUtil=O,a.setConfig=ee,a.setLoginInfo=ne,a.setUserInfo=Ee,a.useApp=z,a.useAppStore=x,a.useAuth=Ie,a.useAuthStore=Z,a.useForm=Be,a.useMenu=ie,a.useMenuStore=A,a.useTable=Le,a.useUserStore=v,Object.defineProperty(a,Symbol.toStringTag,{value:"Module"})});
|
|
@@ -1,7 +1,21 @@
|
|
|
1
1
|
import { RouteRecordRaw } from 'vue-router';
|
|
2
|
-
|
|
3
|
-
export
|
|
4
|
-
|
|
2
|
+
import { Component } from 'vue';
|
|
3
|
+
export interface DynamicRouteOptions {
|
|
4
|
+
/** 布局组件 */
|
|
5
|
+
layoutComponent?: Component;
|
|
6
|
+
/** 默认首页路径 */
|
|
7
|
+
indexPath?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* 创建布局路由
|
|
11
|
+
* @param children 子路由配置
|
|
12
|
+
* @param options 选项
|
|
13
|
+
*/
|
|
14
|
+
export declare function createLayoutRoute(children: RouteRecordRaw[], options?: DynamicRouteOptions): RouteRecordRaw;
|
|
15
|
+
/**
|
|
16
|
+
* Mock 菜单数据(用于开发)
|
|
17
|
+
*/
|
|
18
|
+
export declare const mockMenuData: {
|
|
5
19
|
id: number;
|
|
6
20
|
name: string;
|
|
7
21
|
path: string;
|
|
@@ -10,25 +24,5 @@ export declare const mockMenuData: ({
|
|
|
10
24
|
title: string;
|
|
11
25
|
keepAlive: boolean;
|
|
12
26
|
affix: boolean;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
} | {
|
|
16
|
-
id: number;
|
|
17
|
-
name: string;
|
|
18
|
-
path: string;
|
|
19
|
-
redirect: string;
|
|
20
|
-
icon: string;
|
|
21
|
-
title: string;
|
|
22
|
-
children: {
|
|
23
|
-
id: number;
|
|
24
|
-
name: string;
|
|
25
|
-
path: string;
|
|
26
|
-
component: string;
|
|
27
|
-
icon: string;
|
|
28
|
-
title: string;
|
|
29
|
-
keepAlive: boolean;
|
|
30
|
-
}[];
|
|
31
|
-
component?: undefined;
|
|
32
|
-
keepAlive?: undefined;
|
|
33
|
-
affix?: undefined;
|
|
34
|
-
})[];
|
|
27
|
+
}[];
|
|
28
|
+
export { type RouteRecordRaw } from 'vue-router';
|
package/dist/router/index.d.ts
CHANGED
|
@@ -1,6 +1,26 @@
|
|
|
1
|
+
import { Router, RouteRecordRaw } from 'vue-router';
|
|
1
2
|
/**
|
|
2
|
-
*
|
|
3
|
+
* 创建路由实例
|
|
4
|
+
* @param routes 业务路由配置
|
|
5
|
+
* @param options 路由选项
|
|
3
6
|
*/
|
|
4
|
-
declare
|
|
5
|
-
|
|
6
|
-
|
|
7
|
+
export declare function createRouter(routes: RouteRecordRaw[], options?: {
|
|
8
|
+
historyMode?: 'hash' | 'history' | 'memory';
|
|
9
|
+
base?: string;
|
|
10
|
+
scrollBehavior?: Router['options']['scrollBehavior'];
|
|
11
|
+
}): Router;
|
|
12
|
+
/**
|
|
13
|
+
* 重置路由
|
|
14
|
+
*/
|
|
15
|
+
export declare function resetRouter(router: Router, routes: RouteRecordRaw[]): void;
|
|
16
|
+
/**
|
|
17
|
+
* 创建静态路由配置
|
|
18
|
+
*/
|
|
19
|
+
export declare function createStaticRoutes(options?: {
|
|
20
|
+
loginPath?: string;
|
|
21
|
+
loginComponent?: any;
|
|
22
|
+
layoutComponent?: any;
|
|
23
|
+
notFoundComponent?: any;
|
|
24
|
+
forbiddenComponent?: any;
|
|
25
|
+
}): RouteRecordRaw[];
|
|
26
|
+
export { type RouteRecordRaw } from 'vue-router';
|
|
@@ -1,3 +1,16 @@
|
|
|
1
1
|
import { RouteRecordRaw } from 'vue-router';
|
|
2
|
-
export
|
|
3
|
-
|
|
2
|
+
export interface StaticRouteOptions {
|
|
3
|
+
/** 登录路径 */
|
|
4
|
+
loginPath?: string;
|
|
5
|
+
/** 登录组件 */
|
|
6
|
+
loginComponent?: any;
|
|
7
|
+
/** 404 组件 */
|
|
8
|
+
notFoundComponent?: any;
|
|
9
|
+
/** 403 组件 */
|
|
10
|
+
forbiddenComponent?: any;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* 创建错误路由
|
|
14
|
+
*/
|
|
15
|
+
export declare function createErrorRoutes(options?: StaticRouteOptions): RouteRecordRaw[];
|
|
16
|
+
export { type RouteRecordRaw } from 'vue-router';
|
package/dist/stores/menu.d.ts
CHANGED
|
@@ -34,11 +34,13 @@ export declare const useMenuStore: import('pinia').StoreDefinition<"menu", Pick<
|
|
|
34
34
|
menuBtnListMap: import('vue').Ref<Record<string, MenuItem[]>, Record<string, MenuItem[]>>;
|
|
35
35
|
hasMenu: import('vue').ComputedRef<boolean>;
|
|
36
36
|
index: import('vue').ComputedRef<string>;
|
|
37
|
-
indexMenu: MenuItem;
|
|
38
37
|
setMenuList: (menus: MenuItem[]) => void;
|
|
39
|
-
|
|
38
|
+
setIndexMenu: (menu: MenuItem) => void;
|
|
39
|
+
setMenuFromRemote: (remoteMenus: RemoteMenuItem[], options?: {
|
|
40
|
+
skipIndexMenu?: boolean;
|
|
41
|
+
}) => void;
|
|
40
42
|
clearMenu: () => void;
|
|
41
|
-
}, "menuList" | "menuBtnListMap"
|
|
43
|
+
}, "menuList" | "menuBtnListMap">, Pick<{
|
|
42
44
|
menuList: import('vue').Ref<{
|
|
43
45
|
code: string;
|
|
44
46
|
name: string;
|
|
@@ -73,9 +75,11 @@ export declare const useMenuStore: import('pinia').StoreDefinition<"menu", Pick<
|
|
|
73
75
|
menuBtnListMap: import('vue').Ref<Record<string, MenuItem[]>, Record<string, MenuItem[]>>;
|
|
74
76
|
hasMenu: import('vue').ComputedRef<boolean>;
|
|
75
77
|
index: import('vue').ComputedRef<string>;
|
|
76
|
-
indexMenu: MenuItem;
|
|
77
78
|
setMenuList: (menus: MenuItem[]) => void;
|
|
78
|
-
|
|
79
|
+
setIndexMenu: (menu: MenuItem) => void;
|
|
80
|
+
setMenuFromRemote: (remoteMenus: RemoteMenuItem[], options?: {
|
|
81
|
+
skipIndexMenu?: boolean;
|
|
82
|
+
}) => void;
|
|
79
83
|
clearMenu: () => void;
|
|
80
84
|
}, "hasMenu" | "index">, Pick<{
|
|
81
85
|
menuList: import('vue').Ref<{
|
|
@@ -112,8 +116,10 @@ export declare const useMenuStore: import('pinia').StoreDefinition<"menu", Pick<
|
|
|
112
116
|
menuBtnListMap: import('vue').Ref<Record<string, MenuItem[]>, Record<string, MenuItem[]>>;
|
|
113
117
|
hasMenu: import('vue').ComputedRef<boolean>;
|
|
114
118
|
index: import('vue').ComputedRef<string>;
|
|
115
|
-
indexMenu: MenuItem;
|
|
116
119
|
setMenuList: (menus: MenuItem[]) => void;
|
|
117
|
-
|
|
120
|
+
setIndexMenu: (menu: MenuItem) => void;
|
|
121
|
+
setMenuFromRemote: (remoteMenus: RemoteMenuItem[], options?: {
|
|
122
|
+
skipIndexMenu?: boolean;
|
|
123
|
+
}) => void;
|
|
118
124
|
clearMenu: () => void;
|
|
119
|
-
}, "setMenuList" | "setMenuFromRemote" | "clearMenu">>;
|
|
125
|
+
}, "setMenuList" | "setIndexMenu" | "setMenuFromRemote" | "clearMenu">>;
|
package/dist/style.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.sidebar[data-v-
|
|
1
|
+
.sidebar[data-v-5560e0bb]{height:100%;display:flex;flex-direction:column;background-color:var(--bg-color)}.sidebar__logo[data-v-5560e0bb]{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-5560e0bb]{width:32px;height:32px}.sidebar__logo-text[data-v-5560e0bb]{font-size:16px;font-weight:600;color:var(--color-primary)}.sidebar__search[data-v-5560e0bb]{padding:10px;border-bottom:1px solid var(--color-border-lighter);position:relative}.sidebar__search-results[data-v-5560e0bb]{position:absolute;top:100%;left:0;right:0;background-color:var(--bg-color);border:1px solid var(--color-border-lighter);border-radius:var(--border-radius-base);box-shadow:var(--box-shadow);max-height:300px;overflow-y:auto;z-index:100}.sidebar__search-item[data-v-5560e0bb]{display:flex;align-items:center;gap:10px;padding:10px 12px;cursor:pointer;transition:background-color .2s}.sidebar__search-item[data-v-5560e0bb]:hover{background-color:var(--color-fill)}.sidebar__search-item-info[data-v-5560e0bb]{display:flex;flex-direction:column;gap:2px}.sidebar__search-item-title[data-v-5560e0bb]{font-size:14px;color:var(--color-text-primary)}.sidebar__search-item-parent[data-v-5560e0bb]{font-size:12px;color:var(--color-text-secondary)}.sidebar__menu[data-v-5560e0bb]{flex:1;border-right:none;overflow-y:auto}.sidebar__user[data-v-5560e0bb]{padding:10px;border-top:1px solid var(--color-border-lighter);display:flex;align-items:center;justify-content:space-between}.sidebar__user-info[data-v-5560e0bb]{display:flex;flex-direction:column;gap:2px}.sidebar__user-name[data-v-5560e0bb]{font-size:14px;font-weight:500}.sidebar__user-role[data-v-5560e0bb]{font-size:12px;color:var(--color-text-secondary)}.menu-icon[data-v-5560e0bb]{margin-right:8px}.header[data-v-2bf8f3d2]{display:flex;align-items:center;justify-content:space-between;padding:0 20px;height:100%}.header__left[data-v-2bf8f3d2]{display:flex;align-items:center;gap:15px}.header__collapse[data-v-2bf8f3d2]{width:24px;height:24px;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:18px;color:var(--color-text-regular)}.header__collapse[data-v-2bf8f3d2]:hover{color:var(--color-primary)}.header__right[data-v-2bf8f3d2]{display:flex;align-items:center;gap:15px}.header__action[data-v-2bf8f3d2]{width:32px;height:32px;display:flex;align-items:center;justify-content:center;cursor:pointer;border-radius:var(--border-radius-base);font-size:16px}.header__action[data-v-2bf8f3d2]:hover{background-color:var(--color-fill)}.header__user[data-v-2bf8f3d2]{position:relative}.header__user-trigger[data-v-2bf8f3d2]{display:flex;align-items:center;gap:8px;cursor:pointer;padding:4px 8px;border-radius:var(--border-radius-base);transition:background-color .2s}.header__user-trigger[data-v-2bf8f3d2]:hover{background-color:var(--color-fill)}.header__user-name[data-v-2bf8f3d2]{font-size:14px;color:var(--color-text-primary)}.header__user-arrow[data-v-2bf8f3d2]{font-size:10px;color:var(--color-text-secondary);transition:transform .2s}.header__user-arrow.is-active[data-v-2bf8f3d2]{transform:rotate(180deg)}.header__avatar[data-v-2bf8f3d2]{width:32px;height:32px;border-radius:50%;background:linear-gradient(135deg,var(--color-primary),var(--color-primary-light-3));display:flex;align-items:center;justify-content:center;color:#fff;font-size:14px;font-weight:500}.header__dropdown[data-v-2bf8f3d2]{position:absolute;top:calc(100% + 8px);right:0;min-width:200px;background-color:var(--bg-color);border-radius:var(--border-radius-base);box-shadow:var(--box-shadow);overflow:hidden;z-index:100}.header__dropdown-header[data-v-2bf8f3d2]{display:flex;align-items:center;gap:12px;padding:16px}.header__dropdown-avatar[data-v-2bf8f3d2]{width:40px;height:40px;border-radius:50%;background:linear-gradient(135deg,var(--color-primary),var(--color-primary-light-3));display:flex;align-items:center;justify-content:center;color:#fff;font-size:16px;font-weight:500}.header__dropdown-info[data-v-2bf8f3d2]{flex:1}.header__dropdown-name[data-v-2bf8f3d2]{font-size:14px;font-weight:500;color:var(--color-text-primary)}.header__dropdown-role[data-v-2bf8f3d2]{font-size:12px;color:var(--color-text-secondary);margin-top:2px}.header__dropdown-divider[data-v-2bf8f3d2]{height:1px;background-color:var(--color-border-lighter)}.header__dropdown-menu[data-v-2bf8f3d2]{padding:8px 0}.header__dropdown-item[data-v-2bf8f3d2]{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-2bf8f3d2]:hover{background-color:var(--color-fill);color:var(--color-text-primary)}.header__dropdown-item--danger[data-v-2bf8f3d2]{color:var(--color-danger)}.header__dropdown-item--danger[data-v-2bf8f3d2]:hover{background-color:var(--color-danger-light);color:var(--color-danger)}.header__dropdown-icon[data-v-2bf8f3d2]{font-size:16px}.dropdown-enter-active[data-v-2bf8f3d2],.dropdown-leave-active[data-v-2bf8f3d2]{transition:all .2s ease}.dropdown-enter-from[data-v-2bf8f3d2],.dropdown-leave-to[data-v-2bf8f3d2]{opacity:0;transform:translateY(-10px)}.layout[data-v-1a24e6d0]{display:flex;width:100%;height:100%}.layout__aside[data-v-1a24e6d0]{transition:width .3s;overflow:hidden;flex-shrink:0;height:100%}.layout__main[data-v-1a24e6d0]{flex:1;display:flex;flex-direction:column;overflow:hidden;height:100%}.layout__header[data-v-1a24e6d0]{height:50px;background-color:var(--bg-color);border-bottom:1px solid var(--color-border-lighter);flex-shrink:0}.layout__content[data-v-1a24e6d0]{flex:1;overflow:auto;background-color:var(--bg-color-page)}.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-fdb37509]{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-fdb37509]{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-fdb37509]{text-align:center;margin-bottom:30px}.login__logo[data-v-fdb37509]{width:60px;height:60px}.login__title[data-v-fdb37509]{font-size:28px;font-weight:600;color:var(--color-primary);margin:15px 0 5px}.login__subtitle[data-v-fdb37509]{font-size:14px;color:var(--color-text-secondary)}.login__form[data-v-fdb37509] .t-form-item{margin-bottom:20px}.login__submit[data-v-fdb37509]{width:100%}.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}
|
package/dist/utils/request.d.ts
CHANGED
|
@@ -14,6 +14,14 @@ export interface PageResponse<T> {
|
|
|
14
14
|
page: number;
|
|
15
15
|
pageSize: number;
|
|
16
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* 获取请求实例
|
|
19
|
+
*/
|
|
20
|
+
export declare function getRequest(): AxiosInstance;
|
|
21
|
+
/**
|
|
22
|
+
* 重置请求实例(配置变更时调用)
|
|
23
|
+
*/
|
|
24
|
+
export declare function resetRequest(): void;
|
|
17
25
|
declare const request: AxiosInstance;
|
|
18
26
|
export declare const http: {
|
|
19
27
|
get<T = unknown>(url: string, config?: AxiosRequestConfig): Promise<ApiResponse<T>>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "xto-fronted",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.9",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "XTO 前端应用脚手架,封装登录、退出、菜单渲染等统一逻辑",
|
|
@@ -16,15 +16,7 @@
|
|
|
16
16
|
"./style.css": "./dist/style.css"
|
|
17
17
|
},
|
|
18
18
|
"files": [
|
|
19
|
-
"dist"
|
|
20
|
-
"src",
|
|
21
|
-
"public",
|
|
22
|
-
"index.html",
|
|
23
|
-
"vite.config.ts",
|
|
24
|
-
"tsconfig.json",
|
|
25
|
-
"tsconfig.node.json",
|
|
26
|
-
".env.production",
|
|
27
|
-
".env.development"
|
|
19
|
+
"dist"
|
|
28
20
|
],
|
|
29
21
|
"scripts": {
|
|
30
22
|
"dev": "vite",
|
package/.env.development
DELETED
package/.env.production
DELETED
package/dist/403-DM5wfQkM.js
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { defineComponent as s, openBlock as n, createElementBlock as p, createElementVNode as o, createVNode as a, unref as d, withCtx as _, createTextVNode as i } from "vue";
|
|
2
|
-
import { useRouter as m } from "vue-router";
|
|
3
|
-
import { Button as l } from "@xto/base";
|
|
4
|
-
import { a as c } from "./index-BqRv1bdN.js";
|
|
5
|
-
const f = { class: "error-page" }, u = { class: "error-page__content" }, g = /* @__PURE__ */ s({
|
|
6
|
-
__name: "403",
|
|
7
|
-
setup(v) {
|
|
8
|
-
const r = m(), t = () => {
|
|
9
|
-
r.push("/");
|
|
10
|
-
};
|
|
11
|
-
return (x, e) => (n(), p("div", f, [
|
|
12
|
-
o("div", u, [
|
|
13
|
-
e[1] || (e[1] = o("div", { class: "error-page__code" }, "403", -1)),
|
|
14
|
-
e[2] || (e[2] = o("div", { class: "error-page__title" }, "无访问权限", -1)),
|
|
15
|
-
e[3] || (e[3] = o("div", { class: "error-page__desc" }, "抱歉,您没有权限访问此页面", -1)),
|
|
16
|
-
a(d(l), {
|
|
17
|
-
type: "primary",
|
|
18
|
-
onClick: t
|
|
19
|
-
}, {
|
|
20
|
-
default: _(() => [...e[0] || (e[0] = [
|
|
21
|
-
i("返回首页", -1)
|
|
22
|
-
])]),
|
|
23
|
-
_: 1
|
|
24
|
-
})
|
|
25
|
-
])
|
|
26
|
-
]));
|
|
27
|
-
}
|
|
28
|
-
}), V = /* @__PURE__ */ c(g, [["__scopeId", "data-v-f6105e3d"]]);
|
|
29
|
-
export {
|
|
30
|
-
V as default
|
|
31
|
-
};
|
package/dist/404-BurAu5LC.js
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { defineComponent as s, openBlock as n, createElementBlock as a, createElementVNode as o, createVNode as p, unref as _, withCtx as d, createTextVNode as i } from "vue";
|
|
2
|
-
import { useRouter as m } from "vue-router";
|
|
3
|
-
import { Button as c } from "@xto/base";
|
|
4
|
-
import { a as l } from "./index-BqRv1bdN.js";
|
|
5
|
-
const f = { class: "error-page" }, u = { class: "error-page__content" }, g = /* @__PURE__ */ s({
|
|
6
|
-
__name: "404",
|
|
7
|
-
setup(v) {
|
|
8
|
-
const r = m(), t = () => {
|
|
9
|
-
r.push("/");
|
|
10
|
-
};
|
|
11
|
-
return (x, e) => (n(), a("div", f, [
|
|
12
|
-
o("div", u, [
|
|
13
|
-
e[1] || (e[1] = o("div", { class: "error-page__code" }, "404", -1)),
|
|
14
|
-
e[2] || (e[2] = o("div", { class: "error-page__title" }, "页面不存在", -1)),
|
|
15
|
-
e[3] || (e[3] = o("div", { class: "error-page__desc" }, "抱歉,您访问的页面不存在或已被删除", -1)),
|
|
16
|
-
p(_(c), {
|
|
17
|
-
type: "primary",
|
|
18
|
-
onClick: t
|
|
19
|
-
}, {
|
|
20
|
-
default: d(() => [...e[0] || (e[0] = [
|
|
21
|
-
i("返回首页", -1)
|
|
22
|
-
])]),
|
|
23
|
-
_: 1
|
|
24
|
-
})
|
|
25
|
-
])
|
|
26
|
-
]));
|
|
27
|
-
}
|
|
28
|
-
}), V = /* @__PURE__ */ l(g, [["__scopeId", "data-v-f1a1acb0"]]);
|
|
29
|
-
export {
|
|
30
|
-
V as default
|
|
31
|
-
};
|
package/dist/index-BNiEld34.js
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { openBlock as t, createElementBlock as c, createElementVNode as e } from "vue";
|
|
2
|
-
import { a as n } from "./index-BqRv1bdN.js";
|
|
3
|
-
const r = {}, s = { class: "page" };
|
|
4
|
-
function a(l, o) {
|
|
5
|
-
return t(), c("div", s, [...o[0] || (o[0] = [
|
|
6
|
-
e("div", { class: "page__placeholder" }, [
|
|
7
|
-
e("h2", null, "角色管理"),
|
|
8
|
-
e("p", null, "功能开发中...")
|
|
9
|
-
], -1)
|
|
10
|
-
])]);
|
|
11
|
-
}
|
|
12
|
-
const p = /* @__PURE__ */ n(r, [["render", a], ["__scopeId", "data-v-0802c3db"]]);
|
|
13
|
-
export {
|
|
14
|
-
p as default
|
|
15
|
-
};
|
package/dist/index-Be9RiEfo.js
DELETED
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import { defineComponent as c, reactive as f, ref as w, openBlock as y, createElementBlock as V, createElementVNode as s, createVNode as l, unref as o, withCtx as t, withKeys as b, createTextVNode as v } from "vue";
|
|
2
|
-
import { u as x, _ as h, a as k } from "./index-BqRv1bdN.js";
|
|
3
|
-
import { Button as z } from "@xto/base";
|
|
4
|
-
import { Form as B, FormItem as i, Input as p } from "@xto/form";
|
|
5
|
-
import "vue-router";
|
|
6
|
-
const C = { class: "login" }, I = { class: "login__container" }, N = /* @__PURE__ */ c({
|
|
7
|
-
__name: "index",
|
|
8
|
-
setup(q) {
|
|
9
|
-
const { login: m, loading: _ } = x(), r = f({
|
|
10
|
-
uid: "",
|
|
11
|
-
password: ""
|
|
12
|
-
}), g = {
|
|
13
|
-
uid: [
|
|
14
|
-
{ required: !0, message: "请输入账号", trigger: "blur" }
|
|
15
|
-
],
|
|
16
|
-
password: [
|
|
17
|
-
{ required: !0, message: "请输入密码", trigger: "blur" }
|
|
18
|
-
]
|
|
19
|
-
}, n = w(), u = async () => {
|
|
20
|
-
var a;
|
|
21
|
-
try {
|
|
22
|
-
await ((a = n.value) == null ? void 0 : a.validate()), await m(r.uid, r.password);
|
|
23
|
-
} catch (e) {
|
|
24
|
-
console.error("登录失败", e);
|
|
25
|
-
}
|
|
26
|
-
};
|
|
27
|
-
return (a, e) => (y(), V("div", C, [
|
|
28
|
-
s("div", I, [
|
|
29
|
-
e[3] || (e[3] = s("div", { class: "login__header" }, [
|
|
30
|
-
s("img", {
|
|
31
|
-
src: h,
|
|
32
|
-
alt: "Logo",
|
|
33
|
-
class: "login__logo"
|
|
34
|
-
}),
|
|
35
|
-
s("h1", { class: "login__title" }, "Analysis Web"),
|
|
36
|
-
s("p", { class: "login__subtitle" }, "后台管理系统")
|
|
37
|
-
], -1)),
|
|
38
|
-
l(o(B), {
|
|
39
|
-
ref_key: "formRef",
|
|
40
|
-
ref: n,
|
|
41
|
-
model: r,
|
|
42
|
-
rules: g,
|
|
43
|
-
class: "login__form",
|
|
44
|
-
"label-width": "0"
|
|
45
|
-
}, {
|
|
46
|
-
default: t(() => [
|
|
47
|
-
l(o(i), { prop: "uid" }, {
|
|
48
|
-
default: t(() => [
|
|
49
|
-
l(o(p), {
|
|
50
|
-
modelValue: r.uid,
|
|
51
|
-
"onUpdate:modelValue": e[0] || (e[0] = (d) => r.uid = d),
|
|
52
|
-
placeholder: "请输入账号",
|
|
53
|
-
size: "large"
|
|
54
|
-
}, null, 8, ["modelValue"])
|
|
55
|
-
]),
|
|
56
|
-
_: 1
|
|
57
|
-
}),
|
|
58
|
-
l(o(i), { prop: "password" }, {
|
|
59
|
-
default: t(() => [
|
|
60
|
-
l(o(p), {
|
|
61
|
-
modelValue: r.password,
|
|
62
|
-
"onUpdate:modelValue": e[1] || (e[1] = (d) => r.password = d),
|
|
63
|
-
type: "password",
|
|
64
|
-
placeholder: "请输入密码",
|
|
65
|
-
size: "large",
|
|
66
|
-
"show-password": "",
|
|
67
|
-
onKeyup: b(u, ["enter"])
|
|
68
|
-
}, null, 8, ["modelValue"])
|
|
69
|
-
]),
|
|
70
|
-
_: 1
|
|
71
|
-
}),
|
|
72
|
-
l(o(i), null, {
|
|
73
|
-
default: t(() => [
|
|
74
|
-
l(o(z), {
|
|
75
|
-
type: "primary",
|
|
76
|
-
size: "large",
|
|
77
|
-
loading: o(_),
|
|
78
|
-
class: "login__submit",
|
|
79
|
-
onClick: u
|
|
80
|
-
}, {
|
|
81
|
-
default: t(() => [...e[2] || (e[2] = [
|
|
82
|
-
v(" 登录 ", -1)
|
|
83
|
-
])]),
|
|
84
|
-
_: 1
|
|
85
|
-
}, 8, ["loading"])
|
|
86
|
-
]),
|
|
87
|
-
_: 1
|
|
88
|
-
})
|
|
89
|
-
]),
|
|
90
|
-
_: 1
|
|
91
|
-
}, 8, ["model"])
|
|
92
|
-
])
|
|
93
|
-
]));
|
|
94
|
-
}
|
|
95
|
-
}), R = /* @__PURE__ */ k(N, [["__scopeId", "data-v-728dba9d"]]);
|
|
96
|
-
export {
|
|
97
|
-
R as default
|
|
98
|
-
};
|