xto-fronted 0.1.8 → 0.1.10
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 +100 -21
- package/dist/api/auth.d.ts +1 -0
- package/dist/api/menu.d.ts +1 -0
- package/dist/api/system.d.ts +1 -0
- package/dist/api/user.d.ts +1 -0
- package/dist/components/Error/403.vue.d.ts +1 -1
- package/dist/components/Error/404.vue.d.ts +1 -1
- package/dist/components/Layout/Footer.vue.d.ts +1 -1
- package/dist/components/Layout/Header.vue.d.ts +1 -3
- package/dist/components/Layout/Sidebar.vue.d.ts +1 -1
- package/dist/components/Layout/Tabs.vue.d.ts +1 -1
- package/dist/components/Layout/index.vue.d.ts +1 -1
- package/dist/components/Login/index.vue.d.ts +19 -9
- package/dist/composables/useApp.d.ts +1 -0
- package/dist/composables/useMenu.d.ts +1 -0
- package/dist/directives/permission.d.ts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.es.js +3 -3
- package/dist/index.umd.js +1 -1
- package/dist/main.d.ts +1 -0
- package/dist/router/dynamicRoutes.d.ts +1 -0
- package/dist/router/index.d.ts +1 -0
- package/dist/router/staticRoutes.d.ts +1 -0
- package/dist/stores/auth.d.ts +1 -0
- package/dist/stores/menu.d.ts +1 -0
- package/dist/stores/user.d.ts +1 -0
- package/dist/style.css +1 -1
- package/dist/utils/request.d.ts +1 -0
- package/package.json +1 -1
- package/dist/App.vue.d.ts +0 -2
package/README.md
CHANGED
|
@@ -12,6 +12,104 @@
|
|
|
12
12
|
- 🌓 亮色/暗色主题切换
|
|
13
13
|
- 📱 响应式布局
|
|
14
14
|
|
|
15
|
+
## 安装
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
# npm
|
|
19
|
+
npm install xto-fronted
|
|
20
|
+
|
|
21
|
+
# pnpm
|
|
22
|
+
pnpm add xto-fronted
|
|
23
|
+
|
|
24
|
+
# yarn
|
|
25
|
+
yarn add xto-fronted
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## 快速开始
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
// main.ts
|
|
32
|
+
import { createApp } from 'vue'
|
|
33
|
+
import { createPinia } from 'pinia'
|
|
34
|
+
import App from './App.vue'
|
|
35
|
+
import router from './router'
|
|
36
|
+
|
|
37
|
+
// 初始化 xto-fronted
|
|
38
|
+
import { createXtoApp } from 'xto-fronted'
|
|
39
|
+
|
|
40
|
+
createXtoApp({
|
|
41
|
+
appName: '我的应用',
|
|
42
|
+
baseUrl: 'https://api.example.com',
|
|
43
|
+
appId: 'MY-APP-ID',
|
|
44
|
+
clientId: 'MY-CLIENT-ID',
|
|
45
|
+
indexPath: '/dashboard',
|
|
46
|
+
loginPath: '/login'
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
// 样式
|
|
50
|
+
import 'xto-fronted/style.css'
|
|
51
|
+
import '@xto/base/es/style.css'
|
|
52
|
+
import '@xto/form/es/style.css'
|
|
53
|
+
import '@xto/feedback/es/style.css'
|
|
54
|
+
import '@xto/navigation/es/style.css'
|
|
55
|
+
|
|
56
|
+
const app = createApp(App)
|
|
57
|
+
app.use(createPinia())
|
|
58
|
+
app.use(router)
|
|
59
|
+
app.mount('#app')
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
```typescript
|
|
63
|
+
// router/index.ts
|
|
64
|
+
import { createRouter, createLayoutRoute, Login, NotFound } from 'xto-fronted'
|
|
65
|
+
|
|
66
|
+
const businessRoutes = [
|
|
67
|
+
{
|
|
68
|
+
path: '/dashboard',
|
|
69
|
+
name: 'Dashboard',
|
|
70
|
+
component: () => import('@/views/dashboard/index.vue'),
|
|
71
|
+
meta: { title: '仪表盘', icon: 'dashboard' }
|
|
72
|
+
}
|
|
73
|
+
]
|
|
74
|
+
|
|
75
|
+
const layoutRoute = createLayoutRoute(businessRoutes, { indexPath: '/dashboard' })
|
|
76
|
+
|
|
77
|
+
const routes = [
|
|
78
|
+
{ path: '/login', name: 'Login', component: Login },
|
|
79
|
+
layoutRoute,
|
|
80
|
+
{ path: '/:pathMatch(.*)*', redirect: '/404' }
|
|
81
|
+
]
|
|
82
|
+
|
|
83
|
+
export default createRouter(routes)
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
```vue
|
|
87
|
+
<!-- App.vue -->
|
|
88
|
+
<script setup>
|
|
89
|
+
import { useAppStore } from 'xto-fronted'
|
|
90
|
+
const appStore = useAppStore()
|
|
91
|
+
</script>
|
|
92
|
+
|
|
93
|
+
<template>
|
|
94
|
+
<div class="app" :class="{ dark: appStore.isDark }">
|
|
95
|
+
<router-view />
|
|
96
|
+
</div>
|
|
97
|
+
</template>
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## 示例项目
|
|
101
|
+
|
|
102
|
+
查看 [example](./example) 目录获取完整的示例项目。
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
# 在根目录安装依赖(包含 example)
|
|
106
|
+
pnpm install
|
|
107
|
+
|
|
108
|
+
# 运行示例项目
|
|
109
|
+
cd example
|
|
110
|
+
pnpm dev
|
|
111
|
+
```
|
|
112
|
+
|
|
15
113
|
## 项目结构
|
|
16
114
|
|
|
17
115
|
```
|
|
@@ -90,28 +188,9 @@ npm publish
|
|
|
90
188
|
| Axios | 1.x |
|
|
91
189
|
| xto | npm |
|
|
92
190
|
|
|
93
|
-
##
|
|
94
|
-
|
|
95
|
-
### v0.1.7 (2026-03-24)
|
|
96
|
-
- 添加 `@xto/core` 依赖,修复依赖缺失问题
|
|
97
|
-
|
|
98
|
-
### v0.1.6 (2026-03-24)
|
|
99
|
-
- 移除 `@xto/data`、`@xto/layout`、`@xto/business` 依赖
|
|
100
|
-
- 简化依赖结构,仅保留必要的组件库
|
|
101
|
-
|
|
102
|
-
### v0.1.5 (2026-03-24)
|
|
103
|
-
- 移除 CLI bin 配置
|
|
104
|
-
|
|
105
|
-
### v0.1.4 (2026-03-24)
|
|
106
|
-
- 调整 CLI 配置
|
|
107
|
-
|
|
108
|
-
### v0.1.3 (2026-03-24)
|
|
109
|
-
- 尝试添加 CLI 功能
|
|
191
|
+
## 更新日志
|
|
110
192
|
|
|
111
|
-
|
|
112
|
-
- 初始发布
|
|
113
|
-
- 封装登录、退出、菜单渲染等统一逻辑
|
|
114
|
-
- 集成 @xto 组件库
|
|
193
|
+
查看 [CHANGELOG.md](./CHANGELOG.md) 获取版本更新记录。
|
|
115
194
|
|
|
116
195
|
## License
|
|
117
196
|
|
package/dist/api/auth.d.ts
CHANGED
package/dist/api/menu.d.ts
CHANGED
package/dist/api/system.d.ts
CHANGED
package/dist/api/user.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {},
|
|
1
|
+
declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
2
2
|
export default _default;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {},
|
|
1
|
+
declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
2
2
|
export default _default;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {},
|
|
1
|
+
declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
2
2
|
export default _default;
|
|
@@ -1,4 +1,2 @@
|
|
|
1
|
-
declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {
|
|
2
|
-
dropdownRef: HTMLDivElement;
|
|
3
|
-
}, HTMLDivElement>;
|
|
1
|
+
declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
4
2
|
export default _default;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {},
|
|
1
|
+
declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
2
2
|
export default _default;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {},
|
|
1
|
+
declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
2
2
|
export default _default;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {},
|
|
1
|
+
declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
2
2
|
export default _default;
|
|
@@ -1,15 +1,25 @@
|
|
|
1
|
-
|
|
1
|
+
declare const _default: import('vue').DefineComponent<import('vue').ExtractPropTypes<__VLS_TypePropsToRuntimeProps<{
|
|
2
2
|
logo?: string;
|
|
3
3
|
title?: string;
|
|
4
4
|
subtitle?: string;
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
error: (error: any) =>
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
}>>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
6
|
+
success: (data: any) => void;
|
|
7
|
+
error: (error: any) => void;
|
|
8
|
+
}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<__VLS_TypePropsToRuntimeProps<{
|
|
9
|
+
logo?: string;
|
|
10
|
+
title?: string;
|
|
11
|
+
subtitle?: string;
|
|
12
|
+
}>>> & Readonly<{
|
|
10
13
|
onError?: ((error: any) => any) | undefined;
|
|
11
14
|
onSuccess?: ((data: any) => any) | undefined;
|
|
12
|
-
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions,
|
|
13
|
-
formRef: any;
|
|
14
|
-
}, HTMLDivElement>;
|
|
15
|
+
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
15
16
|
export default _default;
|
|
17
|
+
type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
|
|
18
|
+
type __VLS_TypePropsToRuntimeProps<T> = {
|
|
19
|
+
[K in keyof T]-?: {} extends Pick<T, K> ? {
|
|
20
|
+
type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
|
|
21
|
+
} : {
|
|
22
|
+
type: import('vue').PropType<T[K]>;
|
|
23
|
+
required: true;
|
|
24
|
+
};
|
|
25
|
+
};
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { XtoConfig, setConfig, getConfig, getConfigValue } from './config';
|
|
2
|
+
|
|
2
3
|
export { default as Layout } from './components/Layout/index.vue';
|
|
3
4
|
export { default as Header } from './components/Layout/Header.vue';
|
|
4
5
|
export { default as Sidebar } from './components/Layout/Sidebar.vue';
|
package/dist/index.es.js
CHANGED
|
@@ -726,7 +726,7 @@ const Ye = { class: "sidebar" }, Xe = { class: "sidebar__logo" }, Je = {
|
|
|
726
726
|
for (const [n, o] of s)
|
|
727
727
|
t[n] = o;
|
|
728
728
|
return t;
|
|
729
|
-
}, dt = /* @__PURE__ */ M(ut, [["__scopeId", "data-v-
|
|
729
|
+
}, dt = /* @__PURE__ */ M(ut, [["__scopeId", "data-v-e0f3701a"]]), ht = { class: "header" }, pt = { class: "header__right" }, _t = ["title"], mt = {
|
|
730
730
|
key: 0,
|
|
731
731
|
viewBox: "0 0 24 24",
|
|
732
732
|
width: "16",
|
|
@@ -843,7 +843,7 @@ const Ye = { class: "sidebar" }, Xe = { class: "sidebar__logo" }, Je = {
|
|
|
843
843
|
])
|
|
844
844
|
]));
|
|
845
845
|
}
|
|
846
|
-
}), xt = /* @__PURE__ */ M($t, [["__scopeId", "data-v-
|
|
846
|
+
}), xt = /* @__PURE__ */ M($t, [["__scopeId", "data-v-151096f1"]]), Tt = { class: "layout" }, Et = { class: "layout__main" }, Ut = { class: "layout__content" }, Nt = /* @__PURE__ */ D({
|
|
847
847
|
__name: "index",
|
|
848
848
|
setup(e) {
|
|
849
849
|
const s = ee(), t = b(
|
|
@@ -867,7 +867,7 @@ const Ye = { class: "sidebar" }, Xe = { class: "sidebar__logo" }, Je = {
|
|
|
867
867
|
]);
|
|
868
868
|
};
|
|
869
869
|
}
|
|
870
|
-
}), Pt = /* @__PURE__ */ M(Nt, [["__scopeId", "data-v-
|
|
870
|
+
}), Pt = /* @__PURE__ */ M(Nt, [["__scopeId", "data-v-5a394347"]]), Rt = {}, Mt = { class: "tabs-wrapper" };
|
|
871
871
|
function At(e, s) {
|
|
872
872
|
return k(), L("div", Mt);
|
|
873
873
|
}
|
package/dist/index.umd.js
CHANGED
|
@@ -1 +1 @@
|
|
|
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
|
+
(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-e0f3701a"]]),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-151096f1"]]),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-5a394347"]]),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"})});
|
package/dist/main.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
package/dist/router/index.d.ts
CHANGED
package/dist/stores/auth.d.ts
CHANGED
package/dist/stores/menu.d.ts
CHANGED
package/dist/stores/user.d.ts
CHANGED
package/dist/style.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.sidebar[data-v-
|
|
1
|
+
.sidebar[data-v-e0f3701a]{height:100%;display:flex;flex-direction:column;background:linear-gradient(180deg,#1e3a5f,#0d2137);color:#fff}.sidebar__logo[data-v-e0f3701a]{height:50px;display:flex;align-items:center;justify-content:center;gap:10px;border-bottom:1px solid rgba(255,255,255,.1)}.sidebar__logo-img[data-v-e0f3701a]{width:32px;height:32px}.sidebar__logo-text[data-v-e0f3701a]{font-size:16px;font-weight:600;color:#fff}.sidebar__search[data-v-e0f3701a]{padding:10px;border-bottom:1px solid rgba(255,255,255,.1);position:relative}.sidebar__search-results[data-v-e0f3701a]{position:absolute;top:100%;left:0;right:0;background-color:#1a2f4a;border:1px solid rgba(255,255,255,.1);border-radius:var(--border-radius-base);box-shadow:0 4px 12px #0000004d;max-height:300px;overflow-y:auto;z-index:100}.sidebar__search-item[data-v-e0f3701a]{display:flex;align-items:center;gap:10px;padding:10px 12px;cursor:pointer;transition:background-color .2s}.sidebar__search-item[data-v-e0f3701a]:hover{background-color:#ffffff1a}.sidebar__search-item-info[data-v-e0f3701a]{display:flex;flex-direction:column;gap:2px}.sidebar__search-item-title[data-v-e0f3701a]{font-size:14px;color:#fff}.sidebar__search-item-parent[data-v-e0f3701a]{font-size:12px;color:#fff9}.sidebar__menu[data-v-e0f3701a]{flex:1;border-right:none;overflow-y:auto;background-color:transparent}.sidebar__menu[data-v-e0f3701a] .x-menu{background-color:transparent;border-right:none}.sidebar__menu[data-v-e0f3701a] .x-menu-item{color:#fffc}.sidebar__menu[data-v-e0f3701a] .x-menu-item:hover{background-color:#ffffff1a;color:#fff}.sidebar__menu[data-v-e0f3701a] .x-menu-item.is-active{background-color:#409eff4d;color:#fff;border-right:3px solid var(--color-primary)}.sidebar__menu[data-v-e0f3701a] .x-sub-menu__title{color:#fffc}.sidebar__menu[data-v-e0f3701a] .x-sub-menu__title:hover{background-color:#ffffff1a;color:#fff}.sidebar__menu[data-v-e0f3701a] .x-sub-menu.is-active .x-sub-menu__title{color:#fff}.sidebar__menu[data-v-e0f3701a] .x-sub-menu .x-menu{background-color:#0003}.sidebar__user[data-v-e0f3701a]{padding:12px 16px;border-top:1px solid rgba(255,255,255,.1);display:flex;align-items:center;justify-content:space-between;background-color:#0000001a}.sidebar__user-info[data-v-e0f3701a]{display:flex;flex-direction:column;gap:2px}.sidebar__user-name[data-v-e0f3701a]{font-size:14px;font-weight:500;color:#fff}.sidebar__user-role[data-v-e0f3701a]{font-size:12px;color:#fff9}.menu-icon[data-v-e0f3701a]{margin-right:8px}.header[data-v-151096f1]{display:flex;align-items:center;justify-content:space-between;padding:0 20px;height:100%}.header__left[data-v-151096f1]{display:flex;align-items:center;gap:15px}.header__collapse[data-v-151096f1]{width:24px;height:24px;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:18px;color:#fffc}.header__collapse[data-v-151096f1]:hover{color:#fff}.header__right[data-v-151096f1]{display:flex;align-items:center;gap:15px}.header__action[data-v-151096f1]{width:32px;height:32px;display:flex;align-items:center;justify-content:center;cursor:pointer;border-radius:var(--border-radius-base);font-size:16px;color:#fffc}.header__action[data-v-151096f1]:hover{background-color:#ffffff1a;color:#fff}.header__user[data-v-151096f1]{position:relative}.header__user-trigger[data-v-151096f1]{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-151096f1]:hover{background-color:#ffffff1a}.header__user-name[data-v-151096f1]{font-size:14px;color:#ffffffe6}.header__user-arrow[data-v-151096f1]{font-size:10px;color:#fff9;transition:transform .2s}.header__user-arrow.is-active[data-v-151096f1]{transform:rotate(180deg)}.header__avatar[data-v-151096f1]{width:32px;height:32px;border-radius:50%;background:#fff3;display:flex;align-items:center;justify-content:center;color:#fff;font-size:14px;font-weight:500}.header__dropdown[data-v-151096f1]{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-151096f1]{display:flex;align-items:center;gap:12px;padding:16px}.header__dropdown-avatar[data-v-151096f1]{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-151096f1]{flex:1}.header__dropdown-name[data-v-151096f1]{font-size:14px;font-weight:500;color:var(--color-text-primary)}.header__dropdown-role[data-v-151096f1]{font-size:12px;color:var(--color-text-secondary);margin-top:2px}.header__dropdown-divider[data-v-151096f1]{height:1px;background-color:var(--color-border-lighter)}.header__dropdown-menu[data-v-151096f1]{padding:8px 0}.header__dropdown-item[data-v-151096f1]{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-151096f1]:hover{background-color:var(--color-fill);color:var(--color-text-primary)}.header__dropdown-item--danger[data-v-151096f1]{color:var(--color-danger)}.header__dropdown-item--danger[data-v-151096f1]:hover{background-color:#f56c6c1a;color:var(--color-danger)}.header__dropdown-icon[data-v-151096f1]{font-size:16px}.dropdown-enter-active[data-v-151096f1],.dropdown-leave-active[data-v-151096f1]{transition:all .2s ease}.dropdown-enter-from[data-v-151096f1],.dropdown-leave-to[data-v-151096f1]{opacity:0;transform:translateY(-10px)}.layout[data-v-5a394347]{display:flex;width:100%;height:100%}.layout__aside[data-v-5a394347]{transition:width .3s;overflow:hidden;flex-shrink:0;height:100%}.layout__main[data-v-5a394347]{flex:1;display:flex;flex-direction:column;overflow:hidden;height:100%}.layout__header[data-v-5a394347]{height:50px;background:linear-gradient(135deg,#1e3a5f,#0d2137);flex-shrink:0}.layout__content[data-v-5a394347]{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
package/package.json
CHANGED
package/dist/App.vue.d.ts
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, HTMLDivElement>;
|
|
2
|
-
export default _default;
|