xto-fronted 0.7.0 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/dist/assets/404-CY9lyBR9.css +1 -0
  2. package/dist/assets/404-CrEsfqtj.js +1 -0
  3. package/dist/assets/_plugin-vue_export-helper-DlAUqK2U.js +1 -0
  4. package/dist/assets/index-B8nBpy4E.js +1 -0
  5. package/dist/assets/index-BRR97dc6.js +1 -0
  6. package/dist/assets/index-BchLHHD-.css +1 -0
  7. package/dist/assets/index-BgU3HbjQ.css +1 -0
  8. package/dist/assets/index-BqdOxC5B.css +1 -0
  9. package/dist/assets/index-CLoZtSK2.js +1 -0
  10. package/dist/assets/index-CkkPiTqE.css +1 -0
  11. package/dist/assets/index-Cpnd7UnC.js +1 -0
  12. package/dist/assets/index-Cv0DrTS-.js +1 -0
  13. package/dist/assets/index-D2kfHtV2.css +1 -0
  14. package/dist/assets/index-DZHiLIP4.css +1 -0
  15. package/dist/assets/index-DqSiKlWQ.js +1 -0
  16. package/dist/assets/index-MvUmFZ7W.css +1 -0
  17. package/dist/assets/index-tlMkJQ1U.js +2 -0
  18. package/dist/assets/index-yH64PBmh.js +1 -0
  19. package/dist/assets/vendor-CWD9azq9.js +16 -0
  20. package/dist/assets/vue-vendor-DPUDwD81.js +29 -0
  21. package/dist/assets/xto-base-CzY-OLba.css +1 -0
  22. package/dist/assets/xto-base-S7v-4JRL.js +1 -0
  23. package/dist/assets/xto-business-ClDUYOqW.css +1 -0
  24. package/dist/assets/xto-core-CYfxJQ6k.js +1 -0
  25. package/dist/assets/xto-data-CAFnD72s.js +1 -0
  26. package/dist/assets/xto-data-D9f39fBv.css +1 -0
  27. package/dist/assets/xto-feedback-CgD78aUG.js +1 -0
  28. package/dist/assets/xto-feedback-a2I9QN4T.css +1 -0
  29. package/dist/assets/xto-form-DK8siTEV.css +1 -0
  30. package/dist/assets/xto-form-DjKbHEb9.js +1 -0
  31. package/dist/assets/xto-layout-Bh9dSMYc.css +1 -0
  32. package/dist/assets/xto-navigation-S9LTvyP5.css +1 -0
  33. package/dist/assets/xto-navigation-p1HtLM39.js +1 -0
  34. package/dist/index.html +28 -0
  35. package/package.json +9 -9
  36. package/src/App.vue +1 -1
  37. package/src/assets/styles/_dark.scss +31 -31
  38. package/src/assets/styles/_reset.scss +4 -4
  39. package/src/assets/styles/_root.scss +87 -83
  40. package/src/assets/styles/_variables.scss +5 -5
  41. package/src/assets/styles/index.scss +11 -11
  42. package/src/components/Layout/Header.vue +21 -22
  43. package/src/components/Layout/MixTopMenu.vue +36 -37
  44. package/src/components/Layout/Sidebar.vue +3 -3
  45. package/src/components/Layout/SidebarMenuItem.vue +2 -2
  46. package/src/components/Layout/Tabs.vue +3 -3
  47. package/src/components/Layout/TopMenu.vue +36 -37
  48. package/src/stores/app.ts +28 -4
  49. package/src/views/dashboard/index.vue +109 -88
  50. package/src/views/error/404.vue +7 -7
  51. package/src/views/login/index.vue +11 -44
  52. package/src/views/system/menu/index.vue +14 -14
  53. package/src/views/system/role/index.vue +2 -2
  54. package/src/views/system/user/index.vue +3 -3
  55. package/vite.config.ts +4 -1
  56. package/dist/App.vue.d.ts +0 -2
  57. package/dist/api/auth.d.ts +0 -8
  58. package/dist/api/index.d.ts +0 -6
  59. package/dist/api/index.js +0 -26
  60. package/dist/api/system.d.ts +0 -16
  61. package/dist/api/user.d.ts +0 -13
  62. package/dist/api.d.ts +0 -2
  63. package/dist/components/Layout/Footer.vue.d.ts +0 -2
  64. package/dist/components/Layout/Header.vue.d.ts +0 -5
  65. package/dist/components/Layout/MixTopMenu.vue.d.ts +0 -10
  66. package/dist/components/Layout/Sidebar.vue.d.ts +0 -13
  67. package/dist/components/Layout/SidebarMenuItem.vue.d.ts +0 -5
  68. package/dist/components/Layout/Tabs.vue.d.ts +0 -2
  69. package/dist/components/Layout/TopMenu.vue.d.ts +0 -10
  70. package/dist/components/Layout/index.vue.d.ts +0 -7
  71. package/dist/composables/useApp.d.ts +0 -30
  72. package/dist/composables/useAuth.d.ts +0 -6
  73. package/dist/composables/useForm.d.ts +0 -20
  74. package/dist/composables/useI18n.d.ts +0 -30
  75. package/dist/composables/useTable.d.ts +0 -29
  76. package/dist/directives/permission.d.ts +0 -4
  77. package/dist/enums/index.d.ts +0 -32
  78. package/dist/index-BO31bICK.js +0 -515
  79. package/dist/index-D4K3OfZa.js +0 -189
  80. package/dist/index-DkG24eV5.js +0 -641
  81. package/dist/index-QdDB_2uu.js +0 -479
  82. package/dist/index-k2XmHxrU.js +0 -3178
  83. package/dist/index.d.ts +0 -63
  84. package/dist/index.js +0 -99
  85. package/dist/main.d.ts +0 -0
  86. package/dist/router/dynamicRoutes.d.ts +0 -30
  87. package/dist/router/guards.d.ts +0 -17
  88. package/dist/router/index.d.ts +0 -6
  89. package/dist/router/layoutRoute.d.ts +0 -23
  90. package/dist/router/staticRoutes.d.ts +0 -2
  91. package/dist/stores/app.d.ts +0 -99
  92. package/dist/stores/auth.d.ts +0 -41
  93. package/dist/stores/index.d.ts +0 -10
  94. package/dist/stores/locale.d.ts +0 -42
  95. package/dist/stores/menu.d.ts +0 -83
  96. package/dist/stores/user.d.ts +0 -101
  97. package/dist/style.css +0 -1
  98. package/dist/user-77I_qZ8j.js +0 -1186
  99. package/dist/utils/auth.d.ts +0 -27
  100. package/dist/utils/config.d.ts +0 -51
  101. package/dist/utils/permission.d.ts +0 -17
  102. package/dist/utils/request.d.ts +0 -34
  103. package/dist/utils/storage.d.ts +0 -24
  104. package/dist/views/dashboard/index.vue.d.ts +0 -2
  105. package/dist/views/error/403.vue.d.ts +0 -2
  106. package/dist/views/error/404.vue.d.ts +0 -2
  107. package/dist/views/login/index.vue.d.ts +0 -4
  108. package/dist/views/system/menu/index.vue.d.ts +0 -4
  109. package/dist/views/system/role/index.vue.d.ts +0 -4
  110. package/dist/views/system/user/index.vue.d.ts +0 -4
@@ -1,3178 +0,0 @@
1
- import { x as I, y as Ie, z as ot, A as at, B as nt, C as lt, o as ht, D as rt, E as _t, i as Qe, m as ft, F as gt, G as et, H as yt, I as kt, J as wt } from "./user-77I_qZ8j.js";
2
- import { ref as y, computed as b, watch as ye, defineComponent as ne, resolveComponent as it, openBlock as a, createBlock as B, unref as n, withCtx as M, createElementBlock as c, Fragment as K, renderList as X, createElementVNode as e, toDisplayString as x, createCommentVNode as P, normalizeClass as J, withDirectives as Te, vShow as bt, createVNode as k, createTextVNode as he, onMounted as Ke, onUnmounted as je, vModelText as We, Transition as ke, withModifiers as Pe, normalizeStyle as Ne, reactive as qe, createStaticVNode as ze, withKeys as xt, h as Ct } from "vue";
3
- import { defineStore as Ee } from "pinia";
4
- import { useRoute as be, useRouter as me, createRouter as He, createWebHistory as Ye } from "vue-router";
5
- import { SubMenu as Re, MenuItem as Se, Menu as Ge, Tabs as $t, TabPane as Lt } from "@xto/navigation";
6
- import { Icon as U, Button as we } from "@xto/base";
7
- import { Drawer as Xe, Message as Mt } from "@xto/feedback";
8
- import { Form as St, FormItem as Ae, Input as tt, Checkbox as Nt } from "@xto/form";
9
- import { createLocaleProvider as It, getSupportedLocales as Et, useLocale as Ut } from "@xto/core/locale";
10
- const ue = Ee("app", () => {
11
- const t = y(I.get("appName") || "XTO App"), l = y(I.get("indexPath") || "/dashboard"), u = y(I.get("loginPath") || "/login"), s = y(I.get("isDark") || !1), o = y(I.get("theme") || "light"), i = y(I.get("layout") || "sidebar"), h = y(I.get("isCollapsed") || !1), v = y(I.get("showTabs") ?? !0), d = y(I.get("showFooter") ?? !0), g = y(I.get("showBreadcrumb") ?? !0), _ = y(I.get("primaryColor") || "#12B6AF"), f = y([]), m = y([]), j = b(() => s.value ? "dark" : "light"), D = (E) => {
12
- t.value = E, I.set("appName", E);
13
- }, W = (E) => {
14
- l.value = E, I.set("indexPath", E);
15
- }, F = (E) => {
16
- u.value = E, I.set("loginPath", E);
17
- }, V = () => {
18
- s.value = !s.value, o.value = s.value ? "dark" : "light", Z();
19
- }, H = (E) => {
20
- o.value = E, s.value = E === "dark", Z();
21
- }, Z = () => {
22
- const E = document.documentElement;
23
- s.value ? E.classList.add("dark") : E.classList.remove("dark"), I.set("isDark", s.value), I.set("theme", o.value);
24
- }, Y = () => {
25
- h.value = !h.value, I.set("isCollapsed", h.value);
26
- }, q = (E) => {
27
- i.value = E, I.set("layout", E);
28
- }, ee = () => {
29
- v.value = !v.value, I.set("showTabs", v.value);
30
- }, T = () => {
31
- d.value = !d.value, I.set("showFooter", d.value);
32
- }, N = () => {
33
- g.value = !g.value, I.set("showBreadcrumb", g.value);
34
- }, A = (E) => {
35
- _.value = E, document.documentElement.style.setProperty("--xto-color-primary", E), I.set("primaryColor", E);
36
- }, G = (E) => {
37
- f.value.includes(E) || f.value.push(E);
38
- }, R = (E) => {
39
- const oe = f.value.indexOf(E);
40
- oe > -1 && f.value.splice(oe, 1);
41
- }, se = () => {
42
- f.value = [];
43
- }, ie = (E) => {
44
- m.value = E;
45
- }, pe = () => {
46
- Z(), _.value !== "#12B6AF" && document.documentElement.style.setProperty("--xto-color-primary", _.value);
47
- };
48
- return ye(s, Z), {
49
- appName: t,
50
- indexPath: l,
51
- loginPath: u,
52
- isDark: s,
53
- theme: o,
54
- layout: i,
55
- isCollapsed: h,
56
- showTabs: v,
57
- showFooter: d,
58
- showBreadcrumb: g,
59
- primaryColor: _,
60
- cachedViews: f,
61
- mixSubMenus: m,
62
- themeClass: j,
63
- setAppName: D,
64
- setIndexPath: W,
65
- setLoginPath: F,
66
- toggleTheme: V,
67
- toggleCollapse: Y,
68
- setTheme: H,
69
- setLayout: q,
70
- toggleTabs: ee,
71
- toggleFooter: T,
72
- toggleBreadcrumb: N,
73
- setPrimaryColor: A,
74
- addCachedView: G,
75
- removeCachedView: R,
76
- clearCachedViews: se,
77
- setMixSubMenus: ie,
78
- initTheme: pe
79
- };
80
- }), zt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
81
- __proto__: null,
82
- useAppStore: ue
83
- }, Symbol.toStringTag, { value: "Module" })), Tt = "menu_list", Pt = "permission_list", De = () => `${Tt}_${Ie()}`, Fe = () => `${Pt}_${Ie()}`, At = {
84
- menuCode: "home",
85
- menuName: "首页",
86
- menuUrl: "/dashboard",
87
- icon: "home",
88
- closable: !1,
89
- isDefault: !1,
90
- isOut: !1
91
- };
92
- function ct(t) {
93
- return t.filter((l) => l.type !== 1).map((l) => ({
94
- ...l,
95
- children: l.children ? ct(l.children) : void 0
96
- }));
97
- }
98
- function Dt(t) {
99
- const l = [];
100
- function u(s) {
101
- s.forEach((o) => {
102
- o.type === 1 && o.menuCode && l.push(o.menuCode), o.children && u(o.children);
103
- });
104
- }
105
- return u(t), l;
106
- }
107
- const de = Ee("menu", () => {
108
- const t = y(I.get(De()) || []), l = y(I.get(Fe()) || []), u = b(() => t.value.length > 0);
109
- return {
110
- menuList: t,
111
- permissions: l,
112
- hasMenu: u,
113
- setMenuList: (h) => {
114
- l.value = Dt(h), I.set(Fe(), l.value);
115
- const v = ct(h);
116
- t.value = [At, ...v], I.set(De(), t.value);
117
- },
118
- clearMenu: () => {
119
- t.value = [], l.value = [], I.remove(De()), I.remove(Fe());
120
- },
121
- hasPermission: (h) => Array.isArray(h) ? h.some((v) => l.value.includes(v)) : l.value.includes(h)
122
- };
123
- }), Be = "user_info", le = Ee("user", () => {
124
- const t = y(I.get(Be)), l = b(() => !!t.value), u = b(() => {
125
- var m;
126
- return ((m = t.value) == null ? void 0 : m.userId) || "";
127
- }), s = b(() => {
128
- var m;
129
- return ((m = t.value) == null ? void 0 : m.userName) || "";
130
- }), o = b(() => {
131
- var m;
132
- return ((m = t.value) == null ? void 0 : m.departmentName) || "";
133
- }), i = b(() => {
134
- var m;
135
- return ((m = t.value) == null ? void 0 : m.roleName) || "";
136
- }), h = b(() => {
137
- var m;
138
- return ((m = t.value) == null ? void 0 : m.email) || "";
139
- }), v = b(() => {
140
- var m;
141
- return ((m = t.value) == null ? void 0 : m.mobilePhone) || "";
142
- }), d = b(() => {
143
- var m;
144
- return ((m = t.value) == null ? void 0 : m.positionName) || "";
145
- }), g = b(() => {
146
- var m;
147
- return ((m = t.value) == null ? void 0 : m.avatar) || "";
148
- });
149
- return {
150
- userInfo: t,
151
- isLoggedIn: l,
152
- userId: u,
153
- userName: s,
154
- departmentName: o,
155
- roleName: i,
156
- email: h,
157
- mobilePhone: v,
158
- positionName: d,
159
- avatar: g,
160
- setUserInfo: (m) => {
161
- t.value = m, I.set(Be, m);
162
- },
163
- clearUserInfo: () => {
164
- t.value = null, I.remove(Be);
165
- }
166
- };
167
- }), Ue = Ee("auth", () => {
168
- const t = y(ot()), l = b(() => at()), u = y(""), s = y(""), o = y(""), i = y("/login");
169
- return {
170
- token: t,
171
- isLoggedIn: l,
172
- baseUrl: u,
173
- appId: s,
174
- clientId: o,
175
- loginPath: i,
176
- login: (m) => {
177
- t.value = m.access_token, lt(m);
178
- },
179
- logout: () => {
180
- t.value = null, nt();
181
- },
182
- setBaseUrl: (m) => {
183
- u.value = m;
184
- },
185
- setAppId: (m) => {
186
- s.value = m;
187
- },
188
- setClientId: (m) => {
189
- o.value = m;
190
- },
191
- setLoginPath: (m) => {
192
- i.value = m;
193
- }
194
- };
195
- }), Ft = { class: "menu-item__content" }, Bt = { class: "menu-item__icon" }, Vt = {
196
- key: 1,
197
- class: "menu-item__char"
198
- }, Ot = { class: "menu-item__text" }, Rt = { class: "menu-item__content" }, Kt = {
199
- key: 0,
200
- class: "menu-item__icon"
201
- }, jt = {
202
- key: 1,
203
- class: "menu-item__char"
204
- }, Wt = { class: "menu-item__text" }, qt = /* @__PURE__ */ ne({
205
- __name: "SidebarMenuItem",
206
- props: {
207
- menu: {}
208
- },
209
- setup(t) {
210
- const l = t, u = /* @__PURE__ */ new Set([
211
- "arrow-up",
212
- "arrow-down",
213
- "arrow-left",
214
- "arrow-right",
215
- "caret-down",
216
- "caret-right",
217
- "plus",
218
- "minus",
219
- "close",
220
- "check",
221
- "edit",
222
- "delete",
223
- "copy",
224
- "download",
225
- "upload",
226
- "refresh",
227
- "search",
228
- "filter",
229
- "more",
230
- "setting",
231
- "share",
232
- "loading",
233
- "info",
234
- "success",
235
- "warning",
236
- "error",
237
- "question",
238
- "user",
239
- "user-add",
240
- "user-group",
241
- "logout",
242
- "login",
243
- "file",
244
- "folder",
245
- "folder-open",
246
- "document",
247
- "image",
248
- "video",
249
- "music",
250
- "camera",
251
- "mail",
252
- "phone",
253
- "chat",
254
- "bell",
255
- "message",
256
- "eye",
257
- "eye-off",
258
- "calendar",
259
- "clock",
260
- "history",
261
- "timer",
262
- "location",
263
- "map",
264
- "globe",
265
- "star",
266
- "heart",
267
- "thumb-up",
268
- "link",
269
- "external-link",
270
- "lock",
271
- "unlock",
272
- "key",
273
- "home",
274
- "menu",
275
- "menu-fold",
276
- "menu-unfold",
277
- "sidebar-fold",
278
- "sidebar-expand",
279
- "sidebar-left",
280
- "dashboard",
281
- "chart",
282
- "chart-pie",
283
- "chart-line",
284
- "report",
285
- "analytics",
286
- "system",
287
- "permission",
288
- "role",
289
- "user-manage",
290
- "log",
291
- "notification",
292
- "app",
293
- "list",
294
- "grid",
295
- "fullscreen",
296
- "fullscreen-exit",
297
- "zoom-in",
298
- "zoom-out",
299
- "print",
300
- "bookmark",
301
- "tag",
302
- "code",
303
- "terminal",
304
- "database",
305
- "server",
306
- "cloud",
307
- "gift",
308
- "moon",
309
- "sun",
310
- "theme",
311
- "skin"
312
- ]), s = (d) => {
313
- if (!d || d === "") return "";
314
- if (d.startsWith("tineco-icon-")) {
315
- const _ = d.replace("tineco-icon-", "");
316
- return {
317
- home: "home",
318
- dashboard: "dashboard",
319
- system: "system",
320
- user: "user",
321
- role: "role",
322
- menu: "list",
323
- setting: "setting",
324
- file: "file",
325
- folder: "folder",
326
- chart: "chart",
327
- report: "report",
328
- analytics: "analytics"
329
- }[_] || _;
330
- }
331
- return {
332
- dashboard: "dashboard",
333
- system: "system",
334
- user: "user",
335
- role: "role",
336
- menu: "list",
337
- setting: "setting",
338
- home: "home",
339
- chart: "chart",
340
- report: "report",
341
- analytics: "analytics",
342
- permission: "permission",
343
- log: "log",
344
- notification: "notification",
345
- app: "app",
346
- list: "list",
347
- grid: "grid"
348
- }[d] || d;
349
- }, o = (d) => d ? d.charAt(0) : "", i = (d) => u.has(d), h = b(() => l.menu.menuId || l.menu.menuCode || l.menu.menuUrl || ""), v = b(() => l.menu.children && l.menu.children.length > 0);
350
- return (d, g) => {
351
- const _ = it("SidebarMenuItem", !0);
352
- return v.value ? (a(), B(n(Re), {
353
- key: 0,
354
- index: h.value
355
- }, {
356
- title: M(() => [
357
- e("span", Ft, [
358
- e("span", Bt, [
359
- i(s(t.menu.icon)) ? (a(), B(n(U), {
360
- key: 0,
361
- name: s(t.menu.icon),
362
- size: 16
363
- }, null, 8, ["name"])) : (a(), c("span", Vt, x(o(t.menu.menuName)), 1))
364
- ]),
365
- e("span", Ot, x(t.menu.menuName), 1)
366
- ])
367
- ]),
368
- default: M(() => [
369
- (a(!0), c(K, null, X(t.menu.children, (f) => (a(), B(_, {
370
- key: f.menuId || f.menuCode || f.menuUrl,
371
- menu: f
372
- }, null, 8, ["menu"]))), 128))
373
- ]),
374
- _: 1
375
- }, 8, ["index"])) : (a(), B(n(Se), {
376
- key: 1,
377
- index: t.menu.menuUrl || h.value
378
- }, {
379
- default: M(() => [
380
- e("span", Rt, [
381
- t.menu.menuName !== "首页" ? (a(), c("span", Kt, [
382
- i(s(t.menu.icon)) ? (a(), B(n(U), {
383
- key: 0,
384
- name: s(t.menu.icon),
385
- size: 16
386
- }, null, 8, ["name"])) : (a(), c("span", jt, x(o(t.menu.menuName)), 1))
387
- ])) : P("", !0),
388
- e("span", Wt, x(t.menu.menuName), 1)
389
- ])
390
- ]),
391
- _: 1
392
- }, 8, ["index"]));
393
- };
394
- }
395
- }), re = (t, l) => {
396
- const u = t.__vccOpts || t;
397
- for (const [s, o] of l)
398
- u[s] = o;
399
- return u;
400
- }, Ht = /* @__PURE__ */ re(qt, [["__scopeId", "data-v-5c8b22f6"]]), Yt = {
401
- key: 0,
402
- class: "sidebar__logo"
403
- }, Gt = ["src"], Xt = {
404
- key: 1,
405
- class: "sidebar__user"
406
- }, Jt = { class: "sidebar__user-info" }, Zt = { class: "sidebar__user-name" }, Qt = { class: "sidebar__user-role" }, Ve = "sidebar_opened_menus", Oe = "sidebar_menu_list_key", es = /* @__PURE__ */ ne({
407
- __name: "Sidebar",
408
- props: {
409
- menuList: { default: () => [] },
410
- showLogo: { type: Boolean, default: !0 },
411
- showUser: { type: Boolean, default: !0 },
412
- logoSrc: { default: "/vite.svg" }
413
- },
414
- setup(t) {
415
- const l = t, u = be(), s = me(), o = de(), i = le(), h = Ue(), v = ue(), d = b(() => l.menuList.length > 0 ? l.menuList : o.menuList), g = b(() => v.isCollapsed), _ = b(() => u.path), f = (T) => T.menuId || T.menuCode || T.menuUrl || "", m = () => d.value.map(f).join(","), j = I.get(Oe) || "", D = m(), W = j === D ? I.get(Ve) || [] : [], F = y(W);
416
- ye(F, (T) => {
417
- I.set(Ve, T), I.set(Oe, m());
418
- }, { deep: !0 });
419
- const V = (T, N, A = []) => {
420
- var G;
421
- for (const R of T) {
422
- if (R.menuUrl && (N === R.menuUrl || N.startsWith(R.menuUrl + "/")))
423
- return [...A, f(R)];
424
- if ((G = R.children) != null && G.length) {
425
- const se = V(R.children, N, [...A, f(R)]);
426
- if (se) return se;
427
- }
428
- }
429
- return null;
430
- };
431
- ye([() => u.path, d], ([T, N]) => {
432
- if (N.length > 0) {
433
- const A = V(N, T);
434
- if (A) {
435
- const G = A.slice(0, -1), R = /* @__PURE__ */ new Set([...F.value, ...G]);
436
- F.value = Array.from(R);
437
- }
438
- }
439
- }, { immediate: !0 }), ye(d, (T, N) => {
440
- T !== N && (F.value = [], I.set(Ve, []), I.set(Oe, m()));
441
- }, { immediate: !1 });
442
- const H = b(() => v.isDark ? "#161B21" : "#fff"), Z = b(() => v.isDark ? "#D9DCE1" : "#4E5566"), Y = b(() => v.isDark ? "#2ED3CB" : "#12B6AF"), q = (T) => {
443
- T && T !== u.path && s.push(T);
444
- }, ee = () => {
445
- h.logout(), i.clearUserInfo(), o.clearMenu(), s.push(v.loginPath);
446
- };
447
- return (T, N) => (a(), c("div", {
448
- class: J(["sidebar", { "sidebar--collapsed": g.value }])
449
- }, [
450
- l.showLogo ? (a(), c("div", Yt, [
451
- e("img", {
452
- src: l.logoSrc,
453
- alt: "Logo",
454
- class: "sidebar__logo-img"
455
- }, null, 8, Gt),
456
- Te(e("span", { class: "sidebar__logo-text" }, x(n(v).appName), 513), [
457
- [bt, !g.value]
458
- ])
459
- ])) : P("", !0),
460
- k(n(Ge), {
461
- modelValue: _.value,
462
- "onUpdate:modelValue": N[0] || (N[0] = (A) => _.value = A),
463
- openeds: F.value,
464
- "onUpdate:openeds": N[1] || (N[1] = (A) => F.value = A),
465
- mode: "vertical",
466
- collapse: g.value,
467
- "collapse-transition": !1,
468
- "background-color": H.value,
469
- "text-color": Z.value,
470
- "active-text-color": Y.value,
471
- class: "sidebar__menu",
472
- onSelect: q
473
- }, {
474
- default: M(() => [
475
- (a(!0), c(K, null, X(d.value, (A) => (a(), B(Ht, {
476
- key: f(A),
477
- menu: A
478
- }, null, 8, ["menu"]))), 128))
479
- ]),
480
- _: 1
481
- }, 8, ["modelValue", "openeds", "collapse", "background-color", "text-color", "active-text-color"]),
482
- l.showUser && !g.value ? (a(), c("div", Xt, [
483
- e("div", Jt, [
484
- e("span", Zt, x(n(i).userName), 1),
485
- e("span", Qt, x(n(i).departmentName), 1)
486
- ]),
487
- k(n(we), {
488
- type: "text",
489
- size: "small",
490
- onClick: ee
491
- }, {
492
- default: M(() => [...N[2] || (N[2] = [
493
- he("退出", -1)
494
- ])]),
495
- _: 1
496
- })
497
- ])) : P("", !0)
498
- ], 2));
499
- }
500
- }), st = /* @__PURE__ */ re(es, [["__scopeId", "data-v-5d045bcd"]]), ts = { class: "header" }, ss = { class: "header__left" }, os = {
501
- key: 0,
502
- class: "header__breadcrumb"
503
- }, as = {
504
- key: 0,
505
- class: "breadcrumb-separator"
506
- }, ns = { class: "header__right" }, ls = {
507
- key: 0,
508
- class: "header__search-dropdown"
509
- }, rs = {
510
- key: 0,
511
- class: "header__search-results"
512
- }, is = ["onClick"], cs = {
513
- key: 0,
514
- class: "header__search-icon"
515
- }, us = {
516
- key: 1,
517
- class: "header__search-char"
518
- }, ds = { class: "header__search-item-title" }, ms = {
519
- key: 1,
520
- class: "header__search-item-parent"
521
- }, ps = {
522
- key: 1,
523
- class: "header__search-empty"
524
- }, vs = ["title"], hs = { class: "header__avatar" }, _s = { class: "header__user-name" }, fs = {
525
- key: 0,
526
- class: "header__dropdown"
527
- }, gs = { class: "header__dropdown-header" }, ys = { class: "header__dropdown-avatar" }, ks = { class: "header__dropdown-info" }, ws = { class: "header__dropdown-name" }, bs = { class: "header__dropdown-role" }, xs = { class: "header__dropdown-menu" }, Cs = { class: "settings-drawer" }, $s = { class: "settings-section" }, Ls = { class: "settings-layout-options" }, Ms = ["onClick"], Ss = { class: "layout-option__preview" }, Ns = {
528
- key: 0,
529
- class: "layout-preview-sidebar"
530
- }, Is = {
531
- key: 1,
532
- class: "layout-preview-top"
533
- }, Es = {
534
- key: 2,
535
- class: "layout-preview-mix"
536
- }, Us = { class: "layout-option__label" }, zs = { class: "settings-section" }, Ts = { class: "settings-color-options" }, Ps = ["title", "onClick"], As = { class: "settings-section" }, Ds = { class: "settings-switch-list" }, Fs = { class: "settings-switch-item" }, Bs = { class: "settings-switch-item" }, Vs = /* @__PURE__ */ ne({
537
- __name: "Header",
538
- setup(t) {
539
- const l = be(), u = me(), s = ue(), o = le(), i = Ue(), h = de(), v = y(!1), d = y(!1), g = y(null), _ = y(!1), f = y(!1), m = y(""), j = y(null), D = y(!1), W = [
540
- { value: "sidebar", label: "左侧菜单", icon: "sidebar-left" },
541
- { value: "top", label: "顶部菜单", icon: "menu" },
542
- { value: "mix", label: "混合菜单", icon: "grid" }
543
- ], F = [
544
- { value: "#12B6AF", label: "品牌蓝" },
545
- { value: "#1890ff", label: "科技蓝" },
546
- { value: "#52c41a", label: "极光绿" },
547
- { value: "#faad14", label: "日落橙" },
548
- { value: "#f5222d", label: "薄暮红" },
549
- { value: "#722ed1", label: "酱紫" }
550
- ], V = b(() => l.matched.filter((w) => w.meta && w.meta.title).map((w) => ({
551
- title: w.meta.title,
552
- path: w.path
553
- }))), H = (z, w = "") => {
554
- const Q = [];
555
- return z.forEach((C) => {
556
- C.children && C.children.length > 0 ? Q.push(...H(C.children, C.menuName)) : Q.push({ ...C, parentTitle: w, title: C.menuName, path: C.menuUrl });
557
- }), Q;
558
- }, Z = /* @__PURE__ */ new Set([
559
- "arrow-up",
560
- "arrow-down",
561
- "arrow-left",
562
- "arrow-right",
563
- "caret-down",
564
- "caret-right",
565
- "plus",
566
- "minus",
567
- "close",
568
- "check",
569
- "edit",
570
- "delete",
571
- "copy",
572
- "download",
573
- "upload",
574
- "refresh",
575
- "search",
576
- "filter",
577
- "more",
578
- "setting",
579
- "share",
580
- "loading",
581
- "info",
582
- "success",
583
- "warning",
584
- "error",
585
- "question",
586
- "user",
587
- "user-add",
588
- "user-group",
589
- "logout",
590
- "login",
591
- "file",
592
- "folder",
593
- "folder-open",
594
- "document",
595
- "image",
596
- "video",
597
- "music",
598
- "camera",
599
- "mail",
600
- "phone",
601
- "chat",
602
- "bell",
603
- "message",
604
- "eye",
605
- "eye-off",
606
- "calendar",
607
- "clock",
608
- "history",
609
- "timer",
610
- "location",
611
- "map",
612
- "globe",
613
- "star",
614
- "heart",
615
- "thumb-up",
616
- "link",
617
- "external-link",
618
- "lock",
619
- "unlock",
620
- "key",
621
- "home",
622
- "menu",
623
- "menu-fold",
624
- "menu-unfold",
625
- "sidebar-fold",
626
- "sidebar-expand",
627
- "sidebar-left",
628
- "dashboard",
629
- "chart",
630
- "chart-pie",
631
- "chart-line",
632
- "report",
633
- "analytics",
634
- "system",
635
- "permission",
636
- "role",
637
- "user-manage",
638
- "log",
639
- "notification",
640
- "app",
641
- "list",
642
- "grid",
643
- "fullscreen",
644
- "fullscreen-exit",
645
- "zoom-in",
646
- "zoom-out",
647
- "print",
648
- "bookmark",
649
- "tag",
650
- "code",
651
- "terminal",
652
- "database",
653
- "server",
654
- "cloud",
655
- "gift",
656
- "moon",
657
- "sun",
658
- "theme",
659
- "skin"
660
- ]), Y = (z) => {
661
- if (!z || z === "") return "";
662
- if (z.startsWith("tineco-icon-")) {
663
- const Q = z.replace("tineco-icon-", "");
664
- return {
665
- home: "home",
666
- dashboard: "dashboard",
667
- system: "system",
668
- user: "user",
669
- role: "role",
670
- menu: "list",
671
- setting: "setting",
672
- file: "file",
673
- folder: "folder",
674
- chart: "chart",
675
- report: "report",
676
- analytics: "analytics"
677
- }[Q] || Q;
678
- }
679
- return {
680
- dashboard: "dashboard",
681
- system: "system",
682
- user: "user",
683
- role: "role",
684
- menu: "list",
685
- setting: "setting",
686
- home: "home",
687
- chart: "chart",
688
- report: "report",
689
- analytics: "analytics",
690
- permission: "permission",
691
- log: "log",
692
- notification: "notification",
693
- app: "app",
694
- list: "list",
695
- grid: "grid"
696
- }[z] || z;
697
- }, q = (z) => z ? z.charAt(0) : "", ee = (z) => Z.has(z), T = b(() => m.value.trim() ? H(h.menuList).filter(
698
- (w) => w.title.toLowerCase().includes(m.value.toLowerCase())
699
- ) : []), N = b(() => s.layout), A = () => {
700
- s.toggleCollapse();
701
- }, G = () => {
702
- s.toggleTheme();
703
- }, R = () => {
704
- d.value = !0;
705
- }, se = (z) => {
706
- s.setLayout(z), d.value = !1;
707
- }, ie = (z) => {
708
- D.value = z;
709
- const w = document.documentElement;
710
- z ? w.classList.add("grey-mode") : w.classList.remove("grey-mode");
711
- }, pe = () => {
712
- ie(!D.value), d.value = !1;
713
- }, E = () => {
714
- s.toggleTheme(), d.value = !1;
715
- }, oe = () => {
716
- document.fullscreenElement ? document.exitFullscreen() : document.documentElement.requestFullscreen();
717
- }, _e = () => {
718
- _.value = !!document.fullscreenElement;
719
- }, ce = () => {
720
- v.value = !v.value;
721
- }, ae = () => {
722
- v.value = !1;
723
- }, ve = () => {
724
- f.value = !1, m.value = "";
725
- }, xe = (z) => {
726
- u.push(z), ve();
727
- }, Ce = (z) => {
728
- s.setPrimaryColor(z), d.value = !1;
729
- }, $e = () => {
730
- ae(), u.push("/profile");
731
- }, Le = () => {
732
- ae(), u.push("/change-password");
733
- }, Me = () => {
734
- ae(), i.logout(), o.clearUserInfo(), h.clearMenu(), u.push(s.loginPath);
735
- }, fe = (z) => {
736
- g.value && !g.value.contains(z.target) && ae(), j.value && !j.value.contains(z.target) && ve();
737
- }, ge = (z) => {
738
- z.key === "Escape" && (ve(), ae());
739
- };
740
- return Ke(() => {
741
- document.addEventListener("click", fe), document.addEventListener("fullscreenchange", _e), document.addEventListener("keydown", ge), s.initTheme(), D.value = document.documentElement.classList.contains("grey-mode");
742
- }), je(() => {
743
- document.removeEventListener("click", fe), document.removeEventListener("fullscreenchange", _e), document.removeEventListener("keydown", ge);
744
- }), (z, w) => {
745
- var Q;
746
- return a(), c("div", ts, [
747
- e("div", ss, [
748
- e("div", {
749
- class: "header__collapse",
750
- onClick: A
751
- }, [
752
- k(n(U), {
753
- name: n(s).isCollapsed ? "menu-unfold" : "menu-fold",
754
- size: 18
755
- }, null, 8, ["name"])
756
- ]),
757
- n(s).showBreadcrumb ? (a(), c("div", os, [
758
- (a(!0), c(K, null, X(V.value, (C, S) => (a(), c("span", {
759
- key: C.path
760
- }, [
761
- S > 0 ? (a(), c("span", as, "/")) : P("", !0),
762
- e("span", {
763
- class: J({ "is-current": S === V.value.length - 1 })
764
- }, x(C.title), 3)
765
- ]))), 128))
766
- ])) : P("", !0)
767
- ]),
768
- e("div", ns, [
769
- e("div", {
770
- class: "header__search",
771
- ref_key: "searchRef",
772
- ref: j
773
- }, [
774
- k(n(U), {
775
- name: "search",
776
- size: 14,
777
- class: "header__search-icon"
778
- }),
779
- Te(e("input", {
780
- "onUpdate:modelValue": w[0] || (w[0] = (C) => m.value = C),
781
- type: "text",
782
- class: "header__search-input",
783
- placeholder: "搜索菜单...",
784
- onFocus: w[1] || (w[1] = (C) => f.value = !0)
785
- }, null, 544), [
786
- [We, m.value]
787
- ]),
788
- k(ke, { name: "search-dropdown" }, {
789
- default: M(() => [
790
- f.value && (T.value.length > 0 || m.value) ? (a(), c("div", ls, [
791
- T.value.length > 0 ? (a(), c("div", rs, [
792
- (a(!0), c(K, null, X(T.value, (C) => (a(), c("div", {
793
- key: C.path,
794
- class: "header__search-item",
795
- onClick: (S) => xe(C.path)
796
- }, [
797
- C.title !== "首页" ? (a(), c("span", cs, [
798
- ee(Y(C.icon)) ? (a(), B(n(U), {
799
- key: 0,
800
- name: Y(C.icon),
801
- size: 16
802
- }, null, 8, ["name"])) : (a(), c("span", us, x(q(C.title)), 1))
803
- ])) : P("", !0),
804
- e("span", ds, x(C.title), 1),
805
- C.parentTitle ? (a(), c("span", ms, x(C.parentTitle), 1)) : P("", !0)
806
- ], 8, is))), 128))
807
- ])) : (a(), c("div", ps, " 未找到匹配的菜单 "))
808
- ])) : P("", !0)
809
- ]),
810
- _: 1
811
- })
812
- ], 512),
813
- e("div", {
814
- class: "header__action",
815
- onClick: oe,
816
- title: _.value ? "退出全屏" : "全屏"
817
- }, [
818
- k(n(U), {
819
- name: _.value ? "fullscreen-exit" : "fullscreen",
820
- size: 16
821
- }, null, 8, ["name"])
822
- ], 8, vs),
823
- e("div", {
824
- class: "header__action",
825
- onClick: R,
826
- title: "换肤设置"
827
- }, [
828
- k(n(U), {
829
- name: "skin",
830
- size: 16
831
- })
832
- ]),
833
- e("div", {
834
- class: "header__action",
835
- onClick: G,
836
- title: "切换主题"
837
- }, [
838
- k(n(U), {
839
- name: n(s).isDark ? "sun" : "moon",
840
- size: 16
841
- }, null, 8, ["name"])
842
- ]),
843
- e("div", {
844
- class: "header__user",
845
- ref_key: "dropdownRef",
846
- ref: g
847
- }, [
848
- e("div", {
849
- class: "header__user-trigger",
850
- onClick: Pe(ce, ["stop"])
851
- }, [
852
- e("div", hs, [
853
- e("span", null, x(((Q = n(o).userName) == null ? void 0 : Q.charAt(0)) || "U"), 1)
854
- ]),
855
- e("span", _s, x(n(o).userName), 1),
856
- e("span", {
857
- class: J(["header__user-arrow", { "is-active": v.value }])
858
- }, "▼", 2)
859
- ]),
860
- k(ke, { name: "dropdown" }, {
861
- default: M(() => {
862
- var C;
863
- return [
864
- v.value ? (a(), c("div", fs, [
865
- e("div", gs, [
866
- e("div", ys, [
867
- e("span", null, x(((C = n(o).userName) == null ? void 0 : C.charAt(0)) || "U"), 1)
868
- ]),
869
- e("div", ks, [
870
- e("div", ws, x(n(o).userName), 1),
871
- e("div", bs, x(n(o).roleName || n(o).departmentName), 1)
872
- ])
873
- ]),
874
- w[7] || (w[7] = e("div", { class: "header__dropdown-divider" }, null, -1)),
875
- e("div", xs, [
876
- e("div", {
877
- class: "header__dropdown-item",
878
- onClick: $e
879
- }, [
880
- k(n(U), {
881
- name: "user",
882
- size: 16
883
- }),
884
- w[3] || (w[3] = e("span", null, "个人信息", -1))
885
- ]),
886
- e("div", {
887
- class: "header__dropdown-item",
888
- onClick: Le
889
- }, [
890
- k(n(U), {
891
- name: "lock",
892
- size: 16
893
- }),
894
- w[4] || (w[4] = e("span", null, "修改密码", -1))
895
- ]),
896
- w[6] || (w[6] = e("div", { class: "header__dropdown-divider" }, null, -1)),
897
- e("div", {
898
- class: "header__dropdown-item header__dropdown-item--danger",
899
- onClick: Me
900
- }, [
901
- k(n(U), {
902
- name: "logout",
903
- size: 16
904
- }),
905
- w[5] || (w[5] = e("span", null, "退出登录", -1))
906
- ])
907
- ])
908
- ])) : P("", !0)
909
- ];
910
- }),
911
- _: 1
912
- })
913
- ], 512)
914
- ]),
915
- k(n(Xe), {
916
- modelValue: d.value,
917
- "onUpdate:modelValue": w[2] || (w[2] = (C) => d.value = C),
918
- title: "换肤设置",
919
- direction: "rtl",
920
- size: "320px"
921
- }, {
922
- default: M(() => [
923
- e("div", Cs, [
924
- e("div", $s, [
925
- w[11] || (w[11] = e("div", { class: "settings-title" }, "布局模式", -1)),
926
- e("div", Ls, [
927
- (a(), c(K, null, X(W, (C) => e("div", {
928
- key: C.value,
929
- class: J(["layout-option", { "is-active": N.value === C.value }]),
930
- onClick: (S) => se(C.value)
931
- }, [
932
- e("div", Ss, [
933
- C.value === "sidebar" ? (a(), c("div", Ns, [...w[8] || (w[8] = [
934
- e("div", { class: "preview-aside" }, null, -1),
935
- e("div", { class: "preview-main" }, [
936
- e("div", { class: "preview-header" }),
937
- e("div", { class: "preview-content" })
938
- ], -1)
939
- ])])) : C.value === "top" ? (a(), c("div", Is, [...w[9] || (w[9] = [
940
- e("div", { class: "preview-header-full" }, null, -1),
941
- e("div", { class: "preview-content-full" }, null, -1)
942
- ])])) : (a(), c("div", Es, [...w[10] || (w[10] = [
943
- e("div", { class: "preview-header-mix" }, [
944
- e("div", { class: "preview-mix-left" })
945
- ], -1),
946
- e("div", { class: "preview-mix-body" }, [
947
- e("div", { class: "preview-mix-aside" }),
948
- e("div", { class: "preview-mix-content" })
949
- ], -1)
950
- ])]))
951
- ]),
952
- e("span", Us, x(C.label), 1)
953
- ], 10, Ms)), 64))
954
- ])
955
- ]),
956
- e("div", zs, [
957
- w[12] || (w[12] = e("div", { class: "settings-title" }, "主题色", -1)),
958
- e("div", Ts, [
959
- (a(), c(K, null, X(F, (C) => e("div", {
960
- key: C.value,
961
- class: J(["color-option", { "is-active": n(s).primaryColor === C.value }]),
962
- style: Ne({ backgroundColor: C.value }),
963
- title: C.label,
964
- onClick: (S) => Ce(C.value)
965
- }, [
966
- n(s).primaryColor === C.value ? (a(), B(n(U), {
967
- key: 0,
968
- name: "check",
969
- size: 12,
970
- color: "#fff"
971
- })) : P("", !0)
972
- ], 14, Ps)), 64))
973
- ])
974
- ]),
975
- e("div", As, [
976
- w[17] || (w[17] = e("div", { class: "settings-title" }, "功能设置", -1)),
977
- e("div", Ds, [
978
- e("div", Fs, [
979
- w[14] || (w[14] = e("span", null, "灰色模式", -1)),
980
- e("div", {
981
- class: J(["switch-wrapper", { "is-checked": D.value }]),
982
- onClick: pe
983
- }, [...w[13] || (w[13] = [
984
- e("span", { class: "switch-core" }, null, -1)
985
- ])], 2)
986
- ]),
987
- e("div", Bs, [
988
- w[16] || (w[16] = e("span", null, "暗黑模式", -1)),
989
- e("div", {
990
- class: J(["switch-wrapper", { "is-checked": n(s).isDark }]),
991
- onClick: E
992
- }, [...w[15] || (w[15] = [
993
- e("span", { class: "switch-core" }, null, -1)
994
- ])], 2)
995
- ])
996
- ])
997
- ])
998
- ])
999
- ]),
1000
- _: 1
1001
- }, 8, ["modelValue"])
1002
- ]);
1003
- };
1004
- }
1005
- }), Os = /* @__PURE__ */ re(Vs, [["__scopeId", "data-v-0b773f0c"]]), Rs = { class: "top-menu" }, Ks = { class: "top-menu__logo" }, js = ["src"], Ws = { class: "top-menu__logo-text" }, qs = { class: "top-menu__menu-content" }, Hs = {
1006
- key: 0,
1007
- class: "top-menu__menu-icon"
1008
- }, Ys = {
1009
- key: 1,
1010
- class: "top-menu__menu-char"
1011
- }, Gs = { class: "top-menu__menu-text" }, Xs = { class: "top-menu__menu-content" }, Js = { class: "top-menu__menu-icon" }, Zs = {
1012
- key: 1,
1013
- class: "top-menu__menu-char"
1014
- }, Qs = { class: "top-menu__menu-text" }, eo = { class: "top-menu__menu-content" }, to = { class: "top-menu__menu-icon" }, so = {
1015
- key: 1,
1016
- class: "top-menu__menu-char"
1017
- }, oo = { class: "top-menu__menu-text" }, ao = { class: "top-menu__menu-content" }, no = { class: "top-menu__menu-icon" }, lo = {
1018
- key: 1,
1019
- class: "top-menu__menu-char"
1020
- }, ro = { class: "top-menu__menu-text" }, io = { class: "top-menu__menu-content" }, co = {
1021
- key: 0,
1022
- class: "top-menu__menu-icon"
1023
- }, uo = {
1024
- key: 1,
1025
- class: "top-menu__menu-char"
1026
- }, mo = { class: "top-menu__menu-text" }, po = { class: "top-menu__actions" }, vo = {
1027
- key: 0,
1028
- class: "top-menu__search-dropdown"
1029
- }, ho = {
1030
- key: 0,
1031
- class: "top-menu__search-results"
1032
- }, _o = ["onClick"], fo = {
1033
- key: 0,
1034
- class: "top-menu__search-icon-item"
1035
- }, go = {
1036
- key: 1,
1037
- class: "top-menu__search-char"
1038
- }, yo = { class: "top-menu__search-item-title" }, ko = {
1039
- key: 1,
1040
- class: "top-menu__search-item-parent"
1041
- }, wo = {
1042
- key: 1,
1043
- class: "top-menu__search-empty"
1044
- }, bo = ["title"], xo = { class: "top-menu__avatar" }, Co = { class: "top-menu__user-name" }, $o = {
1045
- key: 0,
1046
- class: "top-menu__dropdown"
1047
- }, Lo = { class: "top-menu__dropdown-header" }, Mo = { class: "top-menu__dropdown-avatar" }, So = { class: "top-menu__dropdown-info" }, No = { class: "top-menu__dropdown-name" }, Io = { class: "top-menu__dropdown-role" }, Eo = { class: "top-menu__dropdown-menu" }, Uo = { class: "settings-drawer" }, zo = { class: "settings-section" }, To = { class: "settings-layout-options" }, Po = ["onClick"], Ao = { class: "layout-option__preview" }, Do = {
1048
- key: 0,
1049
- class: "layout-preview-sidebar"
1050
- }, Fo = {
1051
- key: 1,
1052
- class: "layout-preview-top"
1053
- }, Bo = {
1054
- key: 2,
1055
- class: "layout-preview-mix"
1056
- }, Vo = { class: "layout-option__label" }, Oo = { class: "settings-section" }, Ro = { class: "settings-color-options" }, Ko = ["title", "onClick"], jo = { class: "settings-section" }, Wo = { class: "settings-switch-list" }, qo = { class: "settings-switch-item" }, Ho = { class: "settings-switch-item" }, Yo = /* @__PURE__ */ ne({
1057
- __name: "TopMenu",
1058
- props: {
1059
- logoSrc: { default: "/vite.svg" }
1060
- },
1061
- setup(t) {
1062
- const l = t, u = be(), s = me(), o = de(), i = ue(), h = le(), v = Ue(), d = b(() => u.path), g = (S, L = "") => {
1063
- const te = [];
1064
- return S.forEach((r) => {
1065
- r.children && r.children.length > 0 ? te.push(...g(r.children, r.menuName)) : te.push({ ...r, parentTitle: L, title: r.menuName, path: r.menuUrl });
1066
- }), te;
1067
- }, _ = b(() => Y.value.trim() ? g(o.menuList).filter(
1068
- (L) => L.title.toLowerCase().includes(Y.value.toLowerCase())
1069
- ) : []), f = b(() => i.isDark ? "#1d1e1f" : "#fff"), m = b(() => i.isDark ? "#cfd3dc" : "#303133"), j = b(() => "#409eff"), D = y(!1), W = y(null), F = y(!1), V = y(!1), H = y(!1), Z = y(!1), Y = y(""), q = y(null), ee = (S) => {
1070
- S && S !== u.path && s.push(S);
1071
- }, T = /* @__PURE__ */ new Set([
1072
- "arrow-up",
1073
- "arrow-down",
1074
- "arrow-left",
1075
- "arrow-right",
1076
- "caret-down",
1077
- "caret-right",
1078
- "plus",
1079
- "minus",
1080
- "close",
1081
- "check",
1082
- "edit",
1083
- "delete",
1084
- "copy",
1085
- "download",
1086
- "upload",
1087
- "refresh",
1088
- "search",
1089
- "filter",
1090
- "more",
1091
- "setting",
1092
- "share",
1093
- "loading",
1094
- "info",
1095
- "success",
1096
- "warning",
1097
- "error",
1098
- "question",
1099
- "user",
1100
- "user-add",
1101
- "user-group",
1102
- "logout",
1103
- "login",
1104
- "file",
1105
- "folder",
1106
- "folder-open",
1107
- "document",
1108
- "image",
1109
- "video",
1110
- "music",
1111
- "camera",
1112
- "mail",
1113
- "phone",
1114
- "chat",
1115
- "bell",
1116
- "message",
1117
- "eye",
1118
- "eye-off",
1119
- "calendar",
1120
- "clock",
1121
- "history",
1122
- "timer",
1123
- "location",
1124
- "map",
1125
- "globe",
1126
- "star",
1127
- "heart",
1128
- "thumb-up",
1129
- "link",
1130
- "external-link",
1131
- "lock",
1132
- "unlock",
1133
- "key",
1134
- "home",
1135
- "menu",
1136
- "menu-fold",
1137
- "menu-unfold",
1138
- "sidebar-fold",
1139
- "sidebar-expand",
1140
- "sidebar-left",
1141
- "dashboard",
1142
- "chart",
1143
- "chart-pie",
1144
- "chart-line",
1145
- "report",
1146
- "analytics",
1147
- "system",
1148
- "permission",
1149
- "role",
1150
- "user-manage",
1151
- "log",
1152
- "notification",
1153
- "app",
1154
- "list",
1155
- "grid",
1156
- "fullscreen",
1157
- "fullscreen-exit",
1158
- "zoom-in",
1159
- "zoom-out",
1160
- "print",
1161
- "bookmark",
1162
- "tag",
1163
- "code",
1164
- "terminal",
1165
- "database",
1166
- "server",
1167
- "cloud",
1168
- "gift",
1169
- "moon",
1170
- "sun",
1171
- "theme",
1172
- "skin"
1173
- ]), N = (S) => {
1174
- if (!S || S === "") return "";
1175
- if (S.startsWith("tineco-icon-")) {
1176
- const te = S.replace("tineco-icon-", "");
1177
- return {
1178
- home: "home",
1179
- dashboard: "dashboard",
1180
- system: "system",
1181
- user: "user",
1182
- role: "role",
1183
- menu: "list",
1184
- setting: "setting",
1185
- file: "file",
1186
- folder: "folder",
1187
- chart: "chart",
1188
- report: "report",
1189
- analytics: "analytics"
1190
- }[te] || te;
1191
- }
1192
- return {
1193
- dashboard: "dashboard",
1194
- system: "system",
1195
- user: "user",
1196
- role: "role",
1197
- menu: "list",
1198
- setting: "setting",
1199
- home: "home",
1200
- chart: "chart",
1201
- report: "report",
1202
- analytics: "analytics",
1203
- permission: "permission",
1204
- log: "log",
1205
- notification: "notification",
1206
- app: "app",
1207
- list: "list",
1208
- grid: "grid"
1209
- }[S] || S;
1210
- }, A = (S) => S ? S.charAt(0) : "", G = (S) => T.has(S), R = () => {
1211
- i.toggleTheme(), V.value = !1;
1212
- }, se = () => {
1213
- document.fullscreenElement ? document.exitFullscreen() : document.documentElement.requestFullscreen();
1214
- }, ie = () => {
1215
- F.value = !!document.fullscreenElement;
1216
- }, pe = () => {
1217
- D.value = !D.value;
1218
- }, E = () => {
1219
- D.value = !1;
1220
- }, oe = () => {
1221
- Z.value = !1, Y.value = "";
1222
- }, _e = (S) => {
1223
- s.push(S), oe();
1224
- }, ce = () => {
1225
- V.value = !0;
1226
- }, ae = (S) => {
1227
- H.value = S;
1228
- const L = document.documentElement;
1229
- S ? L.classList.add("grey-mode") : L.classList.remove("grey-mode");
1230
- }, ve = () => {
1231
- ae(!H.value), V.value = !1;
1232
- }, xe = () => {
1233
- i.toggleTheme(), V.value = !1;
1234
- }, Ce = [
1235
- { value: "sidebar", label: "左侧菜单", icon: "sidebar-left" },
1236
- { value: "top", label: "顶部菜单", icon: "menu" },
1237
- { value: "mix", label: "混合菜单", icon: "grid" }
1238
- ], $e = b(() => i.layout), Le = (S) => {
1239
- i.setLayout(S), V.value = !1;
1240
- }, Me = [
1241
- { value: "#409eff", label: "默认蓝" },
1242
- { value: "#1890ff", label: "科技蓝" },
1243
- { value: "#52c41a", label: "极光绿" },
1244
- { value: "#faad14", label: "日落橙" },
1245
- { value: "#f5222d", label: "薄暮红" },
1246
- { value: "#722ed1", label: "酱紫" }
1247
- ], fe = (S) => {
1248
- i.setPrimaryColor(S), V.value = !1;
1249
- }, ge = () => {
1250
- E(), s.push("/profile");
1251
- }, z = () => {
1252
- E(), s.push("/change-password");
1253
- }, w = () => {
1254
- E(), v.logout(), h.clearUserInfo(), o.clearMenu(), s.push(i.loginPath);
1255
- }, Q = (S) => {
1256
- W.value && !W.value.contains(S.target) && E(), q.value && !q.value.contains(S.target) && oe();
1257
- }, C = (S) => {
1258
- S.key === "Escape" && (oe(), E());
1259
- };
1260
- return Ke(() => {
1261
- document.addEventListener("click", Q), document.addEventListener("fullscreenchange", ie), document.addEventListener("keydown", C), H.value = document.documentElement.classList.contains("grey-mode");
1262
- }), je(() => {
1263
- document.removeEventListener("click", Q), document.removeEventListener("fullscreenchange", ie), document.removeEventListener("keydown", C);
1264
- }), (S, L) => {
1265
- var te;
1266
- return a(), c("div", Rs, [
1267
- e("div", Ks, [
1268
- e("img", {
1269
- src: l.logoSrc,
1270
- alt: "Logo",
1271
- class: "top-menu__logo-img"
1272
- }, null, 8, js),
1273
- e("span", Ws, x(n(i).appName), 1)
1274
- ]),
1275
- k(n(Ge), {
1276
- "model-value": d.value,
1277
- mode: "horizontal",
1278
- "background-color": f.value,
1279
- "text-color": m.value,
1280
- "active-text-color": j.value,
1281
- class: "top-menu__menu",
1282
- onSelect: ee
1283
- }, {
1284
- default: M(() => [
1285
- (a(!0), c(K, null, X(n(o).menuList, (r) => (a(), c(K, {
1286
- key: r.menuUrl
1287
- }, [
1288
- r.children && r.children.length > 0 ? (a(), B(n(Re), {
1289
- key: 0,
1290
- index: r.menuUrl
1291
- }, {
1292
- title: M(() => [
1293
- e("span", qs, [
1294
- r.menuName !== "首页" ? (a(), c("span", Hs, [
1295
- G(N(r.icon)) ? (a(), B(n(U), {
1296
- key: 0,
1297
- name: N(r.icon),
1298
- size: 16
1299
- }, null, 8, ["name"])) : (a(), c("span", Ys, x(A(r.menuName)), 1))
1300
- ])) : P("", !0),
1301
- e("span", Gs, x(r.menuName), 1)
1302
- ])
1303
- ]),
1304
- default: M(() => [
1305
- (a(!0), c(K, null, X(r.children, (p) => (a(), c(K, {
1306
- key: p.menuUrl
1307
- }, [
1308
- p.children && p.children.length > 0 ? (a(), B(n(Re), {
1309
- key: 0,
1310
- index: p.menuUrl
1311
- }, {
1312
- title: M(() => [
1313
- e("span", Xs, [
1314
- e("span", Js, [
1315
- G(N(p.icon)) ? (a(), B(n(U), {
1316
- key: 0,
1317
- name: N(p.icon),
1318
- size: 16
1319
- }, null, 8, ["name"])) : (a(), c("span", Zs, x(A(p.menuName)), 1))
1320
- ]),
1321
- e("span", Qs, x(p.menuName), 1)
1322
- ])
1323
- ]),
1324
- default: M(() => [
1325
- (a(!0), c(K, null, X(p.children, (O) => (a(), B(n(Se), {
1326
- key: O.menuUrl,
1327
- index: O.menuUrl
1328
- }, {
1329
- default: M(() => [
1330
- e("span", eo, [
1331
- e("span", to, [
1332
- G(N(O.icon)) ? (a(), B(n(U), {
1333
- key: 0,
1334
- name: N(O.icon),
1335
- size: 16
1336
- }, null, 8, ["name"])) : (a(), c("span", so, x(A(O.menuName)), 1))
1337
- ]),
1338
- e("span", oo, x(O.menuName), 1)
1339
- ])
1340
- ]),
1341
- _: 2
1342
- }, 1032, ["index"]))), 128))
1343
- ]),
1344
- _: 2
1345
- }, 1032, ["index"])) : (a(), B(n(Se), {
1346
- key: 1,
1347
- index: p.menuUrl
1348
- }, {
1349
- default: M(() => [
1350
- e("span", ao, [
1351
- e("span", no, [
1352
- G(N(p.icon)) ? (a(), B(n(U), {
1353
- key: 0,
1354
- name: N(p.icon),
1355
- size: 16
1356
- }, null, 8, ["name"])) : (a(), c("span", lo, x(A(p.menuName)), 1))
1357
- ]),
1358
- e("span", ro, x(p.menuName), 1)
1359
- ])
1360
- ]),
1361
- _: 2
1362
- }, 1032, ["index"]))
1363
- ], 64))), 128))
1364
- ]),
1365
- _: 2
1366
- }, 1032, ["index"])) : (a(), B(n(Se), {
1367
- key: 1,
1368
- index: r.menuUrl
1369
- }, {
1370
- default: M(() => [
1371
- e("span", io, [
1372
- r.menuName !== "首页" ? (a(), c("span", co, [
1373
- G(N(r.icon)) ? (a(), B(n(U), {
1374
- key: 0,
1375
- name: N(r.icon),
1376
- size: 16
1377
- }, null, 8, ["name"])) : (a(), c("span", uo, x(A(r.menuName)), 1))
1378
- ])) : P("", !0),
1379
- e("span", mo, x(r.menuName), 1)
1380
- ])
1381
- ]),
1382
- _: 2
1383
- }, 1032, ["index"]))
1384
- ], 64))), 128))
1385
- ]),
1386
- _: 1
1387
- }, 8, ["model-value", "background-color", "text-color", "active-text-color"]),
1388
- e("div", po, [
1389
- e("div", {
1390
- class: "top-menu__search",
1391
- ref_key: "searchRef",
1392
- ref: q
1393
- }, [
1394
- k(n(U), {
1395
- name: "search",
1396
- size: 14,
1397
- class: "top-menu__search-icon"
1398
- }),
1399
- Te(e("input", {
1400
- "onUpdate:modelValue": L[0] || (L[0] = (r) => Y.value = r),
1401
- type: "text",
1402
- class: "top-menu__search-input",
1403
- placeholder: "搜索菜单...",
1404
- onFocus: L[1] || (L[1] = (r) => Z.value = !0)
1405
- }, null, 544), [
1406
- [We, Y.value]
1407
- ]),
1408
- k(ke, { name: "search-dropdown" }, {
1409
- default: M(() => [
1410
- Z.value && (_.value.length > 0 || Y.value) ? (a(), c("div", vo, [
1411
- _.value.length > 0 ? (a(), c("div", ho, [
1412
- (a(!0), c(K, null, X(_.value, (r) => (a(), c("div", {
1413
- key: r.path,
1414
- class: "top-menu__search-item",
1415
- onClick: (p) => _e(r.path)
1416
- }, [
1417
- r.title !== "首页" ? (a(), c("span", fo, [
1418
- G(N(r.icon)) ? (a(), B(n(U), {
1419
- key: 0,
1420
- name: N(r.icon),
1421
- size: 16
1422
- }, null, 8, ["name"])) : (a(), c("span", go, x(A(r.title)), 1))
1423
- ])) : P("", !0),
1424
- e("span", yo, x(r.title), 1),
1425
- r.parentTitle ? (a(), c("span", ko, x(r.parentTitle), 1)) : P("", !0)
1426
- ], 8, _o))), 128))
1427
- ])) : (a(), c("div", wo, " 未找到匹配的菜单 "))
1428
- ])) : P("", !0)
1429
- ]),
1430
- _: 1
1431
- })
1432
- ], 512),
1433
- e("div", {
1434
- class: "top-menu__action",
1435
- onClick: se,
1436
- title: F.value ? "退出全屏" : "全屏"
1437
- }, [
1438
- k(n(U), {
1439
- name: F.value ? "fullscreen-exit" : "fullscreen",
1440
- size: 16
1441
- }, null, 8, ["name"])
1442
- ], 8, bo),
1443
- e("div", {
1444
- class: "top-menu__action",
1445
- onClick: ce,
1446
- title: "换肤设置"
1447
- }, [
1448
- k(n(U), {
1449
- name: "skin",
1450
- size: 16
1451
- })
1452
- ]),
1453
- e("div", {
1454
- class: "top-menu__action",
1455
- onClick: R,
1456
- title: "切换主题"
1457
- }, [
1458
- k(n(U), {
1459
- name: n(i).isDark ? "sun" : "moon",
1460
- size: 16
1461
- }, null, 8, ["name"])
1462
- ]),
1463
- e("div", {
1464
- class: "top-menu__user",
1465
- ref_key: "dropdownRef",
1466
- ref: W
1467
- }, [
1468
- e("div", {
1469
- class: "top-menu__user-trigger",
1470
- onClick: Pe(pe, ["stop"])
1471
- }, [
1472
- e("div", xo, [
1473
- e("span", null, x(((te = n(h).userName) == null ? void 0 : te.charAt(0)) || "U"), 1)
1474
- ]),
1475
- e("span", Co, x(n(h).userName), 1),
1476
- e("span", {
1477
- class: J(["top-menu__user-arrow", { "is-active": D.value }])
1478
- }, "▼", 2)
1479
- ]),
1480
- k(ke, { name: "dropdown" }, {
1481
- default: M(() => {
1482
- var r;
1483
- return [
1484
- D.value ? (a(), c("div", $o, [
1485
- e("div", Lo, [
1486
- e("div", Mo, [
1487
- e("span", null, x(((r = n(h).userName) == null ? void 0 : r.charAt(0)) || "U"), 1)
1488
- ]),
1489
- e("div", So, [
1490
- e("div", No, x(n(h).userName), 1),
1491
- e("div", Io, x(n(h).departmentName), 1)
1492
- ])
1493
- ]),
1494
- L[7] || (L[7] = e("div", { class: "top-menu__dropdown-divider" }, null, -1)),
1495
- e("div", Eo, [
1496
- e("div", {
1497
- class: "top-menu__dropdown-item",
1498
- onClick: ge
1499
- }, [
1500
- k(n(U), {
1501
- name: "user",
1502
- size: 16
1503
- }),
1504
- L[3] || (L[3] = e("span", null, "个人信息", -1))
1505
- ]),
1506
- e("div", {
1507
- class: "top-menu__dropdown-item",
1508
- onClick: z
1509
- }, [
1510
- k(n(U), {
1511
- name: "lock",
1512
- size: 16
1513
- }),
1514
- L[4] || (L[4] = e("span", null, "修改密码", -1))
1515
- ]),
1516
- L[6] || (L[6] = e("div", { class: "top-menu__dropdown-divider" }, null, -1)),
1517
- e("div", {
1518
- class: "top-menu__dropdown-item top-menu__dropdown-item--danger",
1519
- onClick: w
1520
- }, [
1521
- k(n(U), {
1522
- name: "logout",
1523
- size: 16
1524
- }),
1525
- L[5] || (L[5] = e("span", null, "退出登录", -1))
1526
- ])
1527
- ])
1528
- ])) : P("", !0)
1529
- ];
1530
- }),
1531
- _: 1
1532
- })
1533
- ], 512)
1534
- ]),
1535
- k(n(Xe), {
1536
- modelValue: V.value,
1537
- "onUpdate:modelValue": L[2] || (L[2] = (r) => V.value = r),
1538
- title: "换肤设置",
1539
- direction: "rtl",
1540
- size: "320px"
1541
- }, {
1542
- default: M(() => [
1543
- e("div", Uo, [
1544
- e("div", zo, [
1545
- L[11] || (L[11] = e("div", { class: "settings-title" }, "布局模式", -1)),
1546
- e("div", To, [
1547
- (a(), c(K, null, X(Ce, (r) => e("div", {
1548
- key: r.value,
1549
- class: J(["layout-option", { "is-active": $e.value === r.value }]),
1550
- onClick: (p) => Le(r.value)
1551
- }, [
1552
- e("div", Ao, [
1553
- r.value === "sidebar" ? (a(), c("div", Do, [...L[8] || (L[8] = [
1554
- e("div", { class: "preview-aside" }, null, -1),
1555
- e("div", { class: "preview-main" }, [
1556
- e("div", { class: "preview-header" }),
1557
- e("div", { class: "preview-content" })
1558
- ], -1)
1559
- ])])) : r.value === "top" ? (a(), c("div", Fo, [...L[9] || (L[9] = [
1560
- e("div", { class: "preview-header-full" }, null, -1),
1561
- e("div", { class: "preview-content-full" }, null, -1)
1562
- ])])) : (a(), c("div", Bo, [...L[10] || (L[10] = [
1563
- e("div", { class: "preview-header-mix" }, [
1564
- e("div", { class: "preview-mix-left" })
1565
- ], -1),
1566
- e("div", { class: "preview-mix-body" }, [
1567
- e("div", { class: "preview-mix-aside" }),
1568
- e("div", { class: "preview-mix-content" })
1569
- ], -1)
1570
- ])]))
1571
- ]),
1572
- e("span", Vo, x(r.label), 1)
1573
- ], 10, Po)), 64))
1574
- ])
1575
- ]),
1576
- e("div", Oo, [
1577
- L[12] || (L[12] = e("div", { class: "settings-title" }, "主题色", -1)),
1578
- e("div", Ro, [
1579
- (a(), c(K, null, X(Me, (r) => e("div", {
1580
- key: r.value,
1581
- class: J(["color-option", { "is-active": n(i).primaryColor === r.value }]),
1582
- style: Ne({ backgroundColor: r.value }),
1583
- title: r.label,
1584
- onClick: (p) => fe(r.value)
1585
- }, [
1586
- n(i).primaryColor === r.value ? (a(), B(n(U), {
1587
- key: 0,
1588
- name: "check",
1589
- size: 12,
1590
- color: "#fff"
1591
- })) : P("", !0)
1592
- ], 14, Ko)), 64))
1593
- ])
1594
- ]),
1595
- e("div", jo, [
1596
- L[17] || (L[17] = e("div", { class: "settings-title" }, "功能设置", -1)),
1597
- e("div", Wo, [
1598
- e("div", qo, [
1599
- L[14] || (L[14] = e("span", null, "灰色模式", -1)),
1600
- e("div", {
1601
- class: J(["switch-wrapper", { "is-checked": H.value }]),
1602
- onClick: ve
1603
- }, [...L[13] || (L[13] = [
1604
- e("span", { class: "switch-core" }, null, -1)
1605
- ])], 2)
1606
- ]),
1607
- e("div", Ho, [
1608
- L[16] || (L[16] = e("span", null, "暗黑模式", -1)),
1609
- e("div", {
1610
- class: J(["switch-wrapper", { "is-checked": n(i).isDark }]),
1611
- onClick: xe
1612
- }, [...L[15] || (L[15] = [
1613
- e("span", { class: "switch-core" }, null, -1)
1614
- ])], 2)
1615
- ])
1616
- ])
1617
- ])
1618
- ])
1619
- ]),
1620
- _: 1
1621
- }, 8, ["modelValue"])
1622
- ]);
1623
- };
1624
- }
1625
- }), Go = /* @__PURE__ */ re(Yo, [["__scopeId", "data-v-98a61fb9"]]), Xo = { class: "mix-top-menu" }, Jo = { class: "mix-top-menu__logo" }, Zo = ["src"], Qo = { class: "mix-top-menu__logo-text" }, ea = { class: "mix-top-menu__menu-content" }, ta = {
1626
- key: 0,
1627
- class: "mix-top-menu__menu-icon"
1628
- }, sa = {
1629
- key: 1,
1630
- class: "mix-top-menu__menu-char"
1631
- }, oa = { class: "mix-top-menu__menu-text" }, aa = { class: "mix-top-menu__actions" }, na = {
1632
- key: 0,
1633
- class: "mix-top-menu__search-dropdown"
1634
- }, la = {
1635
- key: 0,
1636
- class: "mix-top-menu__search-results"
1637
- }, ra = ["onClick"], ia = {
1638
- key: 0,
1639
- class: "mix-top-menu__search-icon-item"
1640
- }, ca = {
1641
- key: 1,
1642
- class: "mix-top-menu__search-char"
1643
- }, ua = { class: "mix-top-menu__search-item-title" }, da = {
1644
- key: 1,
1645
- class: "mix-top-menu__search-item-parent"
1646
- }, ma = {
1647
- key: 1,
1648
- class: "mix-top-menu__search-empty"
1649
- }, pa = ["title"], va = { class: "mix-top-menu__avatar" }, ha = { class: "mix-top-menu__user-name" }, _a = {
1650
- key: 0,
1651
- class: "mix-top-menu__dropdown"
1652
- }, fa = { class: "mix-top-menu__dropdown-header" }, ga = { class: "mix-top-menu__dropdown-avatar" }, ya = { class: "mix-top-menu__dropdown-info" }, ka = { class: "mix-top-menu__dropdown-name" }, wa = { class: "mix-top-menu__dropdown-role" }, ba = { class: "mix-top-menu__dropdown-menu" }, xa = { class: "settings-drawer" }, Ca = { class: "settings-section" }, $a = { class: "settings-layout-options" }, La = ["onClick"], Ma = { class: "layout-option__preview" }, Sa = {
1653
- key: 0,
1654
- class: "layout-preview-sidebar"
1655
- }, Na = {
1656
- key: 1,
1657
- class: "layout-preview-top"
1658
- }, Ia = {
1659
- key: 2,
1660
- class: "layout-preview-mix"
1661
- }, Ea = { class: "layout-option__label" }, Ua = { class: "settings-section" }, za = { class: "settings-color-options" }, Ta = ["title", "onClick"], Pa = { class: "settings-section" }, Aa = { class: "settings-switch-list" }, Da = { class: "settings-switch-item" }, Fa = { class: "settings-switch-item" }, Ba = /* @__PURE__ */ ne({
1662
- __name: "MixTopMenu",
1663
- props: {
1664
- logoSrc: { default: "/vite.svg" }
1665
- },
1666
- setup(t) {
1667
- const l = t, u = be(), s = me(), o = de(), i = ue(), h = le(), v = Ue(), d = y(""), g = (r, p = "") => {
1668
- const O = [];
1669
- return r.forEach(($) => {
1670
- $.children && $.children.length > 0 ? O.push(...g($.children, $.menuName)) : O.push({ ...$, parentTitle: p, title: $.menuName, path: $.menuUrl });
1671
- }), O;
1672
- }, _ = b(() => N.value.trim() ? g(o.menuList).filter(
1673
- (p) => p.title.toLowerCase().includes(N.value.toLowerCase())
1674
- ) : []), f = b(() => {
1675
- const r = o.menuList.find((p) => p.menuUrl === d.value);
1676
- return (r == null ? void 0 : r.children) || [];
1677
- }), m = b(() => o.menuList.find((r) => !!(u.path === r.menuUrl || r.children && r.children.some((p) => u.path.startsWith(p.menuUrl) || u.path === p.menuUrl)))), j = () => {
1678
- m.value ? d.value = m.value.menuUrl : o.menuList.length > 0 && (d.value = o.menuList[0].menuUrl);
1679
- }, D = (r) => {
1680
- d.value = r;
1681
- const p = o.menuList.find((O) => O.menuUrl === r);
1682
- if (p)
1683
- if (p.children && p.children.length > 0) {
1684
- const O = p.children[0].menuUrl;
1685
- u.path !== O && s.push(O);
1686
- } else
1687
- u.path !== r && s.push(r);
1688
- }, W = b(() => i.isDark ? "#1d1e1f" : "#fff"), F = b(() => i.isDark ? "#cfd3dc" : "#303133"), V = b(() => "#409eff"), H = y(!1), Z = y(null), Y = y(!1), q = y(!1), ee = y(!1), T = y(!1), N = y(""), A = y(null);
1689
- ye(() => u.path, () => {
1690
- j(), i.setMixSubMenus(f.value);
1691
- }), ye(() => o.menuList, (r) => {
1692
- r && r.length > 0 && (j(), i.setMixSubMenus(f.value));
1693
- }, { immediate: !0 });
1694
- const G = /* @__PURE__ */ new Set([
1695
- "arrow-up",
1696
- "arrow-down",
1697
- "arrow-left",
1698
- "arrow-right",
1699
- "caret-down",
1700
- "caret-right",
1701
- "plus",
1702
- "minus",
1703
- "close",
1704
- "check",
1705
- "edit",
1706
- "delete",
1707
- "copy",
1708
- "download",
1709
- "upload",
1710
- "refresh",
1711
- "search",
1712
- "filter",
1713
- "more",
1714
- "setting",
1715
- "share",
1716
- "loading",
1717
- "info",
1718
- "success",
1719
- "warning",
1720
- "error",
1721
- "question",
1722
- "user",
1723
- "user-add",
1724
- "user-group",
1725
- "logout",
1726
- "login",
1727
- "file",
1728
- "folder",
1729
- "folder-open",
1730
- "document",
1731
- "image",
1732
- "video",
1733
- "music",
1734
- "camera",
1735
- "mail",
1736
- "phone",
1737
- "chat",
1738
- "bell",
1739
- "message",
1740
- "eye",
1741
- "eye-off",
1742
- "calendar",
1743
- "clock",
1744
- "history",
1745
- "timer",
1746
- "location",
1747
- "map",
1748
- "globe",
1749
- "star",
1750
- "heart",
1751
- "thumb-up",
1752
- "link",
1753
- "external-link",
1754
- "lock",
1755
- "unlock",
1756
- "key",
1757
- "home",
1758
- "menu",
1759
- "menu-fold",
1760
- "menu-unfold",
1761
- "sidebar-fold",
1762
- "sidebar-expand",
1763
- "sidebar-left",
1764
- "dashboard",
1765
- "chart",
1766
- "chart-pie",
1767
- "chart-line",
1768
- "report",
1769
- "analytics",
1770
- "system",
1771
- "permission",
1772
- "role",
1773
- "user-manage",
1774
- "log",
1775
- "notification",
1776
- "app",
1777
- "list",
1778
- "grid",
1779
- "fullscreen",
1780
- "fullscreen-exit",
1781
- "zoom-in",
1782
- "zoom-out",
1783
- "print",
1784
- "bookmark",
1785
- "tag",
1786
- "code",
1787
- "terminal",
1788
- "database",
1789
- "server",
1790
- "cloud",
1791
- "gift",
1792
- "moon",
1793
- "sun",
1794
- "theme",
1795
- "skin"
1796
- ]), R = (r) => {
1797
- if (!r || r === "") return "";
1798
- if (r.startsWith("tineco-icon-")) {
1799
- const O = r.replace("tineco-icon-", "");
1800
- return {
1801
- home: "home",
1802
- dashboard: "dashboard",
1803
- system: "system",
1804
- user: "user",
1805
- role: "role",
1806
- menu: "list",
1807
- setting: "setting",
1808
- file: "file",
1809
- folder: "folder",
1810
- chart: "chart",
1811
- report: "report",
1812
- analytics: "analytics"
1813
- }[O] || O;
1814
- }
1815
- return {
1816
- dashboard: "dashboard",
1817
- system: "system",
1818
- user: "user",
1819
- role: "role",
1820
- menu: "list",
1821
- setting: "setting",
1822
- home: "home",
1823
- chart: "chart",
1824
- report: "report",
1825
- analytics: "analytics",
1826
- permission: "permission",
1827
- log: "log",
1828
- notification: "notification",
1829
- app: "app",
1830
- list: "list",
1831
- grid: "grid"
1832
- }[r] || r;
1833
- }, se = (r) => r ? r.charAt(0) : "", ie = (r) => G.has(r), pe = () => {
1834
- i.toggleTheme(), q.value = !1;
1835
- }, E = () => {
1836
- document.fullscreenElement ? document.exitFullscreen() : document.documentElement.requestFullscreen();
1837
- }, oe = () => {
1838
- Y.value = !!document.fullscreenElement;
1839
- }, _e = () => {
1840
- H.value = !H.value;
1841
- }, ce = () => {
1842
- H.value = !1;
1843
- }, ae = () => {
1844
- T.value = !1, N.value = "";
1845
- }, ve = (r) => {
1846
- s.push(r), ae();
1847
- }, xe = () => {
1848
- q.value = !0;
1849
- }, Ce = (r) => {
1850
- ee.value = r;
1851
- const p = document.documentElement;
1852
- r ? p.classList.add("grey-mode") : p.classList.remove("grey-mode");
1853
- }, $e = () => {
1854
- Ce(!ee.value), q.value = !1;
1855
- }, Le = () => {
1856
- i.toggleTheme(), q.value = !1;
1857
- }, Me = [
1858
- { value: "sidebar", label: "左侧菜单", icon: "sidebar-left" },
1859
- { value: "top", label: "顶部菜单", icon: "menu" },
1860
- { value: "mix", label: "混合菜单", icon: "grid" }
1861
- ], fe = b(() => i.layout), ge = (r) => {
1862
- i.setLayout(r), q.value = !1;
1863
- }, z = [
1864
- { value: "#409eff", label: "默认蓝" },
1865
- { value: "#1890ff", label: "科技蓝" },
1866
- { value: "#52c41a", label: "极光绿" },
1867
- { value: "#faad14", label: "日落橙" },
1868
- { value: "#f5222d", label: "薄暮红" },
1869
- { value: "#722ed1", label: "酱紫" }
1870
- ], w = (r) => {
1871
- i.setPrimaryColor(r), q.value = !1;
1872
- }, Q = () => {
1873
- ce(), s.push("/profile");
1874
- }, C = () => {
1875
- ce(), s.push("/change-password");
1876
- }, S = () => {
1877
- ce(), v.logout(), h.clearUserInfo(), o.clearMenu(), s.push(i.loginPath);
1878
- }, L = (r) => {
1879
- Z.value && !Z.value.contains(r.target) && ce(), A.value && !A.value.contains(r.target) && ae();
1880
- }, te = (r) => {
1881
- r.key === "Escape" && (ae(), ce());
1882
- };
1883
- return Ke(() => {
1884
- document.addEventListener("click", L), document.addEventListener("fullscreenchange", oe), document.addEventListener("keydown", te), ee.value = document.documentElement.classList.contains("grey-mode"), j();
1885
- }), je(() => {
1886
- document.removeEventListener("click", L), document.removeEventListener("fullscreenchange", oe), document.removeEventListener("keydown", te);
1887
- }), (r, p) => {
1888
- var O;
1889
- return a(), c("div", Xo, [
1890
- e("div", Jo, [
1891
- e("img", {
1892
- src: l.logoSrc,
1893
- alt: "Logo",
1894
- class: "mix-top-menu__logo-img"
1895
- }, null, 8, Zo),
1896
- e("span", Qo, x(n(i).appName), 1)
1897
- ]),
1898
- k(n(Ge), {
1899
- "model-value": d.value,
1900
- mode: "horizontal",
1901
- "background-color": W.value,
1902
- "text-color": F.value,
1903
- "active-text-color": V.value,
1904
- class: "mix-top-menu__menu",
1905
- onSelect: D
1906
- }, {
1907
- default: M(() => [
1908
- (a(!0), c(K, null, X(n(o).menuList, ($) => (a(), B(n(Se), {
1909
- key: $.menuUrl,
1910
- index: $.menuUrl
1911
- }, {
1912
- default: M(() => [
1913
- e("span", ea, [
1914
- $.menuName !== "首页" ? (a(), c("span", ta, [
1915
- ie(R($.icon)) ? (a(), B(n(U), {
1916
- key: 0,
1917
- name: R($.icon),
1918
- size: 16
1919
- }, null, 8, ["name"])) : (a(), c("span", sa, x(se($.menuName)), 1))
1920
- ])) : P("", !0),
1921
- e("span", oa, x($.menuName), 1)
1922
- ])
1923
- ]),
1924
- _: 2
1925
- }, 1032, ["index"]))), 128))
1926
- ]),
1927
- _: 1
1928
- }, 8, ["model-value", "background-color", "text-color", "active-text-color"]),
1929
- e("div", aa, [
1930
- e("div", {
1931
- class: "mix-top-menu__search",
1932
- ref_key: "searchRef",
1933
- ref: A
1934
- }, [
1935
- k(n(U), {
1936
- name: "search",
1937
- size: 14,
1938
- class: "mix-top-menu__search-icon"
1939
- }),
1940
- Te(e("input", {
1941
- "onUpdate:modelValue": p[0] || (p[0] = ($) => N.value = $),
1942
- type: "text",
1943
- class: "mix-top-menu__search-input",
1944
- placeholder: "搜索菜单...",
1945
- onFocus: p[1] || (p[1] = ($) => T.value = !0)
1946
- }, null, 544), [
1947
- [We, N.value]
1948
- ]),
1949
- k(ke, { name: "search-dropdown" }, {
1950
- default: M(() => [
1951
- T.value && (_.value.length > 0 || N.value) ? (a(), c("div", na, [
1952
- _.value.length > 0 ? (a(), c("div", la, [
1953
- (a(!0), c(K, null, X(_.value, ($) => (a(), c("div", {
1954
- key: $.path,
1955
- class: "mix-top-menu__search-item",
1956
- onClick: (Ze) => ve($.path)
1957
- }, [
1958
- $.title !== "首页" ? (a(), c("span", ia, [
1959
- ie(R($.icon)) ? (a(), B(n(U), {
1960
- key: 0,
1961
- name: R($.icon),
1962
- size: 16
1963
- }, null, 8, ["name"])) : (a(), c("span", ca, x(se($.title)), 1))
1964
- ])) : P("", !0),
1965
- e("span", ua, x($.title), 1),
1966
- $.parentTitle ? (a(), c("span", da, x($.parentTitle), 1)) : P("", !0)
1967
- ], 8, ra))), 128))
1968
- ])) : (a(), c("div", ma, " 未找到匹配的菜单 "))
1969
- ])) : P("", !0)
1970
- ]),
1971
- _: 1
1972
- })
1973
- ], 512),
1974
- e("div", {
1975
- class: "mix-top-menu__action",
1976
- onClick: E,
1977
- title: Y.value ? "退出全屏" : "全屏"
1978
- }, [
1979
- k(n(U), {
1980
- name: Y.value ? "fullscreen-exit" : "fullscreen",
1981
- size: 16
1982
- }, null, 8, ["name"])
1983
- ], 8, pa),
1984
- e("div", {
1985
- class: "mix-top-menu__action",
1986
- onClick: xe,
1987
- title: "换肤设置"
1988
- }, [
1989
- k(n(U), {
1990
- name: "skin",
1991
- size: 16
1992
- })
1993
- ]),
1994
- e("div", {
1995
- class: "mix-top-menu__action",
1996
- onClick: pe,
1997
- title: "切换主题"
1998
- }, [
1999
- k(n(U), {
2000
- name: n(i).isDark ? "sun" : "moon",
2001
- size: 16
2002
- }, null, 8, ["name"])
2003
- ]),
2004
- e("div", {
2005
- class: "mix-top-menu__user",
2006
- ref_key: "dropdownRef",
2007
- ref: Z
2008
- }, [
2009
- e("div", {
2010
- class: "mix-top-menu__user-trigger",
2011
- onClick: Pe(_e, ["stop"])
2012
- }, [
2013
- e("div", va, [
2014
- e("span", null, x(((O = n(h).userName) == null ? void 0 : O.charAt(0)) || "U"), 1)
2015
- ]),
2016
- e("span", ha, x(n(h).userName), 1),
2017
- e("span", {
2018
- class: J(["mix-top-menu__user-arrow", { "is-active": H.value }])
2019
- }, "▼", 2)
2020
- ]),
2021
- k(ke, { name: "dropdown" }, {
2022
- default: M(() => {
2023
- var $;
2024
- return [
2025
- H.value ? (a(), c("div", _a, [
2026
- e("div", fa, [
2027
- e("div", ga, [
2028
- e("span", null, x((($ = n(h).userName) == null ? void 0 : $.charAt(0)) || "U"), 1)
2029
- ]),
2030
- e("div", ya, [
2031
- e("div", ka, x(n(h).userName), 1),
2032
- e("div", wa, x(n(h).departmentName), 1)
2033
- ])
2034
- ]),
2035
- p[7] || (p[7] = e("div", { class: "mix-top-menu__dropdown-divider" }, null, -1)),
2036
- e("div", ba, [
2037
- e("div", {
2038
- class: "mix-top-menu__dropdown-item",
2039
- onClick: Q
2040
- }, [
2041
- k(n(U), {
2042
- name: "user",
2043
- size: 16
2044
- }),
2045
- p[3] || (p[3] = e("span", null, "个人信息", -1))
2046
- ]),
2047
- e("div", {
2048
- class: "mix-top-menu__dropdown-item",
2049
- onClick: C
2050
- }, [
2051
- k(n(U), {
2052
- name: "lock",
2053
- size: 16
2054
- }),
2055
- p[4] || (p[4] = e("span", null, "修改密码", -1))
2056
- ]),
2057
- p[6] || (p[6] = e("div", { class: "mix-top-menu__dropdown-divider" }, null, -1)),
2058
- e("div", {
2059
- class: "mix-top-menu__dropdown-item mix-top-menu__dropdown-item--danger",
2060
- onClick: S
2061
- }, [
2062
- k(n(U), {
2063
- name: "logout",
2064
- size: 16
2065
- }),
2066
- p[5] || (p[5] = e("span", null, "退出登录", -1))
2067
- ])
2068
- ])
2069
- ])) : P("", !0)
2070
- ];
2071
- }),
2072
- _: 1
2073
- })
2074
- ], 512)
2075
- ]),
2076
- k(n(Xe), {
2077
- modelValue: q.value,
2078
- "onUpdate:modelValue": p[2] || (p[2] = ($) => q.value = $),
2079
- title: "换肤设置",
2080
- direction: "rtl",
2081
- size: "320px"
2082
- }, {
2083
- default: M(() => [
2084
- e("div", xa, [
2085
- e("div", Ca, [
2086
- p[11] || (p[11] = e("div", { class: "settings-title" }, "布局模式", -1)),
2087
- e("div", $a, [
2088
- (a(), c(K, null, X(Me, ($) => e("div", {
2089
- key: $.value,
2090
- class: J(["layout-option", { "is-active": fe.value === $.value }]),
2091
- onClick: (Ze) => ge($.value)
2092
- }, [
2093
- e("div", Ma, [
2094
- $.value === "sidebar" ? (a(), c("div", Sa, [...p[8] || (p[8] = [
2095
- e("div", { class: "preview-aside" }, null, -1),
2096
- e("div", { class: "preview-main" }, [
2097
- e("div", { class: "preview-header" }),
2098
- e("div", { class: "preview-content" })
2099
- ], -1)
2100
- ])])) : $.value === "top" ? (a(), c("div", Na, [...p[9] || (p[9] = [
2101
- e("div", { class: "preview-header-full" }, null, -1),
2102
- e("div", { class: "preview-content-full" }, null, -1)
2103
- ])])) : (a(), c("div", Ia, [...p[10] || (p[10] = [
2104
- e("div", { class: "preview-header-mix" }, [
2105
- e("div", { class: "preview-mix-left" })
2106
- ], -1),
2107
- e("div", { class: "preview-mix-body" }, [
2108
- e("div", { class: "preview-mix-aside" }),
2109
- e("div", { class: "preview-mix-content" })
2110
- ], -1)
2111
- ])]))
2112
- ]),
2113
- e("span", Ea, x($.label), 1)
2114
- ], 10, La)), 64))
2115
- ])
2116
- ]),
2117
- e("div", Ua, [
2118
- p[12] || (p[12] = e("div", { class: "settings-title" }, "主题色", -1)),
2119
- e("div", za, [
2120
- (a(), c(K, null, X(z, ($) => e("div", {
2121
- key: $.value,
2122
- class: J(["color-option", { "is-active": n(i).primaryColor === $.value }]),
2123
- style: Ne({ backgroundColor: $.value }),
2124
- title: $.label,
2125
- onClick: (Ze) => w($.value)
2126
- }, [
2127
- n(i).primaryColor === $.value ? (a(), B(n(U), {
2128
- key: 0,
2129
- name: "check",
2130
- size: 12,
2131
- color: "#fff"
2132
- })) : P("", !0)
2133
- ], 14, Ta)), 64))
2134
- ])
2135
- ]),
2136
- e("div", Pa, [
2137
- p[17] || (p[17] = e("div", { class: "settings-title" }, "功能设置", -1)),
2138
- e("div", Aa, [
2139
- e("div", Da, [
2140
- p[14] || (p[14] = e("span", null, "灰色模式", -1)),
2141
- e("div", {
2142
- class: J(["switch-wrapper", { "is-checked": ee.value }]),
2143
- onClick: $e
2144
- }, [...p[13] || (p[13] = [
2145
- e("span", { class: "switch-core" }, null, -1)
2146
- ])], 2)
2147
- ]),
2148
- e("div", Fa, [
2149
- p[16] || (p[16] = e("span", null, "暗黑模式", -1)),
2150
- e("div", {
2151
- class: J(["switch-wrapper", { "is-checked": n(i).isDark }]),
2152
- onClick: Le
2153
- }, [...p[15] || (p[15] = [
2154
- e("span", { class: "switch-core" }, null, -1)
2155
- ])], 2)
2156
- ])
2157
- ])
2158
- ])
2159
- ])
2160
- ]),
2161
- _: 1
2162
- }, 8, ["modelValue"])
2163
- ]);
2164
- };
2165
- }
2166
- }), Va = /* @__PURE__ */ re(Ba, [["__scopeId", "data-v-90a8792d"]]), Oa = {
2167
- key: 0,
2168
- class: "layout layout--sidebar"
2169
- }, Ra = { class: "layout__main" }, Ka = { class: "layout__header" }, ja = { class: "layout__content" }, Wa = {
2170
- key: 1,
2171
- class: "layout layout--top"
2172
- }, qa = { class: "layout__top-menu" }, Ha = { class: "layout__main" }, Ya = { class: "layout__content" }, Ga = {
2173
- key: 2,
2174
- class: "layout layout--mix"
2175
- }, Xa = { class: "layout__mix-top-menu" }, Ja = { class: "layout__mix-body" }, Za = { class: "layout__content" }, Qa = /* @__PURE__ */ ne({
2176
- __name: "index",
2177
- props: {
2178
- logoSrc: { default: "/vite.svg" }
2179
- },
2180
- setup(t) {
2181
- const l = t, u = ue(), s = de(), o = b(
2182
- () => u.isCollapsed ? "64px" : "210px"
2183
- ), i = b(() => u.layout), h = b(() => i.value === "mix"), v = b(() => i.value === "sidebar" ? s.menuList : i.value === "mix" ? u.mixSubMenus : []), d = b(() => h.value ? v.value.length > 0 : !1);
2184
- return (g, _) => {
2185
- const f = it("router-view");
2186
- return a(), c(K, null, [
2187
- i.value === "sidebar" ? (a(), c("div", Oa, [
2188
- e("aside", {
2189
- class: "layout__aside",
2190
- style: Ne({ width: o.value })
2191
- }, [
2192
- k(st, {
2193
- "menu-list": v.value,
2194
- "show-logo": !0,
2195
- "show-user": !0,
2196
- "logo-src": l.logoSrc
2197
- }, null, 8, ["menu-list", "logo-src"])
2198
- ], 4),
2199
- e("div", Ra, [
2200
- e("header", Ka, [
2201
- k(Os)
2202
- ]),
2203
- e("main", ja, [
2204
- k(f)
2205
- ])
2206
- ])
2207
- ])) : P("", !0),
2208
- i.value === "top" ? (a(), c("div", Wa, [
2209
- e("div", qa, [
2210
- k(Go, {
2211
- "logo-src": l.logoSrc
2212
- }, null, 8, ["logo-src"])
2213
- ]),
2214
- e("div", Ha, [
2215
- e("main", Ya, [
2216
- k(f)
2217
- ])
2218
- ])
2219
- ])) : P("", !0),
2220
- i.value === "mix" ? (a(), c("div", Ga, [
2221
- e("div", Xa, [
2222
- k(Va, {
2223
- "logo-src": l.logoSrc
2224
- }, null, 8, ["logo-src"])
2225
- ]),
2226
- e("div", Ja, [
2227
- d.value ? (a(), c("aside", {
2228
- key: 0,
2229
- class: "layout__aside",
2230
- style: Ne({ width: o.value })
2231
- }, [
2232
- k(st, {
2233
- "menu-list": v.value,
2234
- "show-logo": !1,
2235
- "show-user": !1
2236
- }, null, 8, ["menu-list"])
2237
- ], 4)) : P("", !0),
2238
- e("main", Za, [
2239
- k(f)
2240
- ])
2241
- ])
2242
- ])) : P("", !0)
2243
- ], 64);
2244
- };
2245
- }
2246
- }), ut = /* @__PURE__ */ re(Qa, [["__scopeId", "data-v-9382a033"]]), en = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
2247
- __proto__: null,
2248
- default: ut
2249
- }, Symbol.toStringTag, { value: "Module" })), tn = { class: "tabs-wrapper" }, sn = { class: "tab-label" }, on = ["onClick"], an = /* @__PURE__ */ ne({
2250
- __name: "Tabs",
2251
- setup(t) {
2252
- const l = be(), u = me(), s = b(() => {
2253
- const v = [];
2254
- return l.matched.forEach((d) => {
2255
- var g;
2256
- (g = d.meta) != null && g.affix && v.push({
2257
- name: d.name,
2258
- title: d.meta.title,
2259
- path: d.path,
2260
- affix: !0
2261
- });
2262
- }), v;
2263
- }), o = b(() => l.path), i = (v) => {
2264
- u.push(v);
2265
- }, h = (v) => {
2266
- const d = s.value.find((g) => g.path === v);
2267
- if (!(d != null && d.affix) && v === o.value) {
2268
- const g = s.value.findIndex((f) => f.path === v), _ = s.value[g - 1] || s.value[g + 1];
2269
- _ && u.push(_.path);
2270
- }
2271
- };
2272
- return (v, d) => (a(), c("div", tn, [
2273
- k(n($t), {
2274
- modelValue: o.value,
2275
- "onUpdate:modelValue": d[0] || (d[0] = (g) => o.value = g),
2276
- type: "card",
2277
- onTabClick: i
2278
- }, {
2279
- default: M(() => [
2280
- (a(!0), c(K, null, X(s.value, (g) => (a(), B(n(Lt), {
2281
- key: g.path,
2282
- name: g.path,
2283
- label: g.title,
2284
- closable: !g.affix
2285
- }, {
2286
- label: M(() => [
2287
- e("span", sn, [
2288
- he(x(g.title) + " ", 1),
2289
- g.affix ? P("", !0) : (a(), c("span", {
2290
- key: 0,
2291
- class: "tab-close",
2292
- onClick: Pe((_) => h(g.path), ["stop"])
2293
- }, " ✕ ", 8, on))
2294
- ])
2295
- ]),
2296
- _: 2
2297
- }, 1032, ["name", "label", "closable"]))), 128))
2298
- ]),
2299
- _: 1
2300
- }, 8, ["modelValue"])
2301
- ]));
2302
- }
2303
- }), Yn = /* @__PURE__ */ re(an, [["__scopeId", "data-v-3da3d785"]]), nn = {}, ln = { class: "footer" };
2304
- function rn(t, l) {
2305
- return a(), c("div", ln, [...l[0] || (l[0] = [
2306
- e("span", null, "Copyright © 2024 Xto Demo. All Rights Reserved.", -1)
2307
- ])]);
2308
- }
2309
- const Gn = /* @__PURE__ */ re(nn, [["render", rn], ["__scopeId", "data-v-ac63e349"]]), cn = { class: "login-page" }, un = { class: "login-form-section" }, dn = { class: "form-container" }, mn = { class: "input-wrapper" }, pn = { class: "input-wrapper" }, vn = { class: "form-options" }, hn = { key: 0 }, _n = { key: 1 }, fn = /* @__PURE__ */ ne({
2310
- __name: "index",
2311
- setup(t) {
2312
- const l = me(), u = be(), s = y(!1), o = y(!1), i = qe({
2313
- uid: "",
2314
- password: ""
2315
- }), h = {
2316
- uid: [
2317
- { required: !0, message: "请输入用户名", trigger: "blur" }
2318
- ],
2319
- password: [
2320
- { required: !0, message: "请输入密码", trigger: "blur" },
2321
- { min: 6, message: "密码长度至少6位", trigger: "blur" }
2322
- ]
2323
- }, v = y(), d = async () => {
2324
- var g;
2325
- try {
2326
- await ((g = v.value) == null ? void 0 : g.validate()), s.value = !0;
2327
- const _ = await ht({
2328
- appId: Ie(),
2329
- clientId: rt(),
2330
- uid: i.uid,
2331
- password: i.password,
2332
- code: !0
2333
- });
2334
- lt(_), Mt.success("登录成功");
2335
- const f = u.query.redirect;
2336
- f ? l.push(f) : l.push({ name: "Dashboard" });
2337
- } catch (_) {
2338
- console.error("登录失败:", _);
2339
- } finally {
2340
- s.value = !1;
2341
- }
2342
- };
2343
- return (g, _) => (a(), c("div", cn, [
2344
- _[10] || (_[10] = ze('<div class="login-brand" data-v-92fe80d1><div class="brand-content" data-v-92fe80d1><div class="brand-logo" data-v-92fe80d1><div class="logo-icon" data-v-92fe80d1><svg viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg" data-v-92fe80d1><rect width="48" height="48" rx="12" fill="currentColor" data-v-92fe80d1></rect><path d="M14 24L20 30L34 16" stroke="white" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" data-v-92fe80d1></path></svg></div><span class="logo-text" data-v-92fe80d1>XTO</span></div><div class="brand-slogan" data-v-92fe80d1><h1 data-v-92fe80d1>企业级后台管理解决方案</h1><p data-v-92fe80d1>开箱即用的中后台前端/设计解决方案</p></div><div class="brand-features" data-v-92fe80d1><div class="feature-item" data-v-92fe80d1><div class="feature-icon" data-v-92fe80d1><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" data-v-92fe80d1><path d="M13 2L3 14h9l-1 8 10-12h-9l1-8z" data-v-92fe80d1></path></svg></div><div class="feature-text" data-v-92fe80d1><h4 data-v-92fe80d1>高性能</h4><p data-v-92fe80d1>极致的渲染性能与响应速度</p></div></div><div class="feature-item" data-v-92fe80d1><div class="feature-icon" data-v-92fe80d1><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" data-v-92fe80d1><rect x="3" y="3" width="18" height="18" rx="2" data-v-92fe80d1></rect><path d="M9 9h6M9 12h6M9 15h4" data-v-92fe80d1></path></svg></div><div class="feature-text" data-v-92fe80d1><h4 data-v-92fe80d1>丰富组件</h4><p data-v-92fe80d1>60+ 高质量业务组件</p></div></div><div class="feature-item" data-v-92fe80d1><div class="feature-icon" data-v-92fe80d1><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" data-v-92fe80d1><circle cx="12" cy="12" r="10" data-v-92fe80d1></circle><path d="M12 6v6l4 2" data-v-92fe80d1></path></svg></div><div class="feature-text" data-v-92fe80d1><h4 data-v-92fe80d1>持续更新</h4><p data-v-92fe80d1>活跃的社区与快速迭代</p></div></div></div><div class="brand-decoration" data-v-92fe80d1><div class="decoration-line" data-v-92fe80d1></div><div class="decoration-dots" data-v-92fe80d1><span data-v-92fe80d1></span><span data-v-92fe80d1></span><span data-v-92fe80d1></span></div></div></div><div class="brand-bg" data-v-92fe80d1><div class="bg-grid" data-v-92fe80d1></div><div class="bg-glow" data-v-92fe80d1></div><div class="bg-pattern" data-v-92fe80d1></div></div></div>', 1)),
2345
- e("div", un, [
2346
- e("div", dn, [
2347
- _[7] || (_[7] = e("div", { class: "form-header" }, [
2348
- e("h2", null, "欢迎登录"),
2349
- e("p", null, "请输入您的账户信息")
2350
- ], -1)),
2351
- k(n(St), {
2352
- ref_key: "formRef",
2353
- ref: v,
2354
- model: i,
2355
- rules: h,
2356
- class: "login-form",
2357
- "label-width": "0"
2358
- }, {
2359
- default: M(() => [
2360
- k(n(Ae), { prop: "uid" }, {
2361
- default: M(() => [
2362
- e("div", mn, [
2363
- _[3] || (_[3] = e("label", { class: "input-label" }, "用户名", -1)),
2364
- k(n(tt), {
2365
- modelValue: i.uid,
2366
- "onUpdate:modelValue": _[0] || (_[0] = (f) => i.uid = f),
2367
- placeholder: "请输入用户名",
2368
- size: "large"
2369
- }, {
2370
- prefix: M(() => [
2371
- k(n(U), {
2372
- name: "user",
2373
- size: 18
2374
- })
2375
- ]),
2376
- _: 1
2377
- }, 8, ["modelValue"])
2378
- ])
2379
- ]),
2380
- _: 1
2381
- }),
2382
- k(n(Ae), { prop: "password" }, {
2383
- default: M(() => [
2384
- e("div", pn, [
2385
- _[4] || (_[4] = e("label", { class: "input-label" }, "密码", -1)),
2386
- k(n(tt), {
2387
- modelValue: i.password,
2388
- "onUpdate:modelValue": _[1] || (_[1] = (f) => i.password = f),
2389
- type: "password",
2390
- placeholder: "请输入密码",
2391
- size: "large",
2392
- "show-password": "",
2393
- onKeyup: xt(d, ["enter"])
2394
- }, {
2395
- prefix: M(() => [
2396
- k(n(U), {
2397
- name: "lock",
2398
- size: 18
2399
- })
2400
- ]),
2401
- _: 1
2402
- }, 8, ["modelValue"])
2403
- ])
2404
- ]),
2405
- _: 1
2406
- }),
2407
- e("div", vn, [
2408
- k(n(Nt), {
2409
- modelValue: o.value,
2410
- "onUpdate:modelValue": _[2] || (_[2] = (f) => o.value = f)
2411
- }, {
2412
- default: M(() => [..._[5] || (_[5] = [
2413
- he("记住我", -1)
2414
- ])]),
2415
- _: 1
2416
- }, 8, ["modelValue"]),
2417
- _[6] || (_[6] = e("a", {
2418
- href: "#",
2419
- class: "forgot-link"
2420
- }, "忘记密码?", -1))
2421
- ]),
2422
- k(n(Ae), null, {
2423
- default: M(() => [
2424
- k(n(we), {
2425
- type: "primary",
2426
- size: "large",
2427
- loading: s.value,
2428
- class: "login-btn",
2429
- onClick: d
2430
- }, {
2431
- default: M(() => [
2432
- s.value ? (a(), c("span", _n, "登录中...")) : (a(), c("span", hn, "登 录"))
2433
- ]),
2434
- _: 1
2435
- }, 8, ["loading"])
2436
- ]),
2437
- _: 1
2438
- })
2439
- ]),
2440
- _: 1
2441
- }, 8, ["model"]),
2442
- _[8] || (_[8] = ze('<div class="form-footer" data-v-92fe80d1><p data-v-92fe80d1>其他登录方式</p><div class="social-login" data-v-92fe80d1><button class="social-btn" title="企业微信" data-v-92fe80d1><svg viewBox="0 0 24 24" fill="currentColor" data-v-92fe80d1><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 17.93c-3.95-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L9 15v1c0 1.1.9 2 2 2v1.93zm6.9-2.54c-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H8v-2h2c.55 0 1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41c2.93 1.19 5 4.06 5 7.41 0 2.08-.8 3.97-2.1 5.39z" data-v-92fe80d1></path></svg></button><button class="social-btn" title="钉钉" data-v-92fe80d1><svg viewBox="0 0 24 24" fill="currentColor" data-v-92fe80d1><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm4.64 6.8c-.15 1.58-.8 5.42-1.13 7.19-.14.75-.42 1-.68 1.03-.58.05-1.02-.38-1.58-.75-.88-.58-1.38-.94-2.23-1.5-.99-.65-.35-1.01.22-1.59.15-.15 2.71-2.48 2.76-2.69a.2.2 0 00-.05-.18c-.06-.05-.14-.03-.21-.02-.09.02-1.49.95-4.22 2.79-.4.27-.76.41-1.08.4-.36-.01-1.04-.2-1.55-.37-.63-.2-1.12-.31-1.08-.66.02-.18.27-.36.74-.55 2.92-1.27 4.86-2.11 5.83-2.51 2.78-1.16 3.35-1.36 3.73-1.36.08 0 .27.02.39.12.1.08.13.19.14.27-.01.06.01.24 0 .38z" data-v-92fe80d1></path></svg></button><button class="social-btn" title="飞书" data-v-92fe80d1><svg viewBox="0 0 24 24" fill="currentColor" data-v-92fe80d1><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z" data-v-92fe80d1></path></svg></button></div></div>', 1))
2443
- ]),
2444
- _[9] || (_[9] = e("div", { class: "copyright" }, [
2445
- e("p", null, "© 2024 XTO Team. All rights reserved.")
2446
- ], -1))
2447
- ])
2448
- ]));
2449
- }
2450
- }), gn = /* @__PURE__ */ re(fn, [["__scopeId", "data-v-92fe80d1"]]), yn = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
2451
- __proto__: null,
2452
- default: gn
2453
- }, Symbol.toStringTag, { value: "Module" })), kn = { class: "error-page" }, wn = { class: "error-container" }, bn = { class: "error-content" }, xn = { class: "error-actions" }, Cn = /* @__PURE__ */ ne({
2454
- __name: "404",
2455
- setup(t) {
2456
- const l = me(), u = () => {
2457
- l.push("/");
2458
- };
2459
- return (s, o) => (a(), c("div", kn, [
2460
- e("div", wn, [
2461
- o[7] || (o[7] = e("div", { class: "error-bg" }, [
2462
- e("div", { class: "bg-circle circle-1" }),
2463
- e("div", { class: "bg-circle circle-2" }),
2464
- e("div", { class: "bg-circle circle-3" })
2465
- ], -1)),
2466
- e("div", bn, [
2467
- o[5] || (o[5] = ze('<div class="error-code" data-v-99395185><span class="code-digit" data-v-99395185>4</span><span class="code-zero" data-v-99395185><span class="zero-inner" data-v-99395185>0</span></span><span class="code-digit" data-v-99395185>4</span></div><div class="error-illustration" data-v-99395185><svg viewBox="0 0 200 120" fill="none" xmlns="http://www.w3.org/2000/svg" data-v-99395185><rect x="40" y="20" width="120" height="80" rx="8" fill="var(--xto-fill-color, #F2F3F5)" stroke="var(--xto-border-color, #D9DCE1)" stroke-width="2" data-v-99395185></rect><rect x="50" y="30" width="100" height="60" rx="4" fill="var(--xto-bg-color, #FFFFFF)" data-v-99395185></rect><line x1="60" y1="45" x2="140" y2="45" stroke="var(--xto-border-color-light, #E5E6EB)" stroke-width="2" data-v-99395185></line><line x1="60" y1="55" x2="120" y2="55" stroke="var(--xto-border-color-light, #E5E6EB)" stroke-width="2" data-v-99395185></line><line x1="60" y1="65" x2="100" y2="65" stroke="var(--xto-border-color-light, #E5E6EB)" stroke-width="2" data-v-99395185></line><text x="100" y="75" text-anchor="middle" fill="var(--xto-color-primary, #12B6AF)" font-size="24" font-weight="600" data-v-99395185>?</text><circle cx="150" cy="35" r="12" stroke="var(--xto-color-primary, #12B6AF)" stroke-width="2" fill="none" data-v-99395185></circle><line x1="158" y1="43" x2="168" y2="53" stroke="var(--xto-color-primary, #12B6AF)" stroke-width="2" stroke-linecap="round" data-v-99395185></line></svg></div><h1 class="error-title" data-v-99395185>页面不存在</h1><p class="error-desc" data-v-99395185>抱歉,您访问的页面不存在或已被删除</p>', 4)),
2468
- e("div", xn, [
2469
- k(n(we), {
2470
- type: "primary",
2471
- size: "large",
2472
- onClick: u
2473
- }, {
2474
- icon: M(() => [...o[1] || (o[1] = [
2475
- e("svg", {
2476
- viewBox: "0 0 24 24",
2477
- fill: "none",
2478
- stroke: "currentColor",
2479
- "stroke-width": "2"
2480
- }, [
2481
- e("path", { d: "M3 9l9-7 9 7v11a2 2 0 01-2 2H5a2 2 0 01-2-2V9z" }),
2482
- e("polyline", { points: "9,22 9,12 15,12 15,22" })
2483
- ], -1)
2484
- ])]),
2485
- default: M(() => [
2486
- o[2] || (o[2] = he(" 返回首页 ", -1))
2487
- ]),
2488
- _: 1
2489
- }),
2490
- k(n(we), {
2491
- size: "large",
2492
- onClick: o[0] || (o[0] = (i) => n(l).go(-1))
2493
- }, {
2494
- icon: M(() => [...o[3] || (o[3] = [
2495
- e("svg", {
2496
- viewBox: "0 0 24 24",
2497
- fill: "none",
2498
- stroke: "currentColor",
2499
- "stroke-width": "2"
2500
- }, [
2501
- e("path", { d: "M19 12H5M12 19l-7-7 7-7" })
2502
- ], -1)
2503
- ])]),
2504
- default: M(() => [
2505
- o[4] || (o[4] = he(" 返回上一页 ", -1))
2506
- ]),
2507
- _: 1
2508
- })
2509
- ]),
2510
- o[6] || (o[6] = e("div", { class: "error-tip" }, [
2511
- e("p", null, "您可以尝试:"),
2512
- e("ul", null, [
2513
- e("li", null, "检查您输入的网址是否正确"),
2514
- e("li", null, "返回首页重新浏览"),
2515
- e("li", null, "联系管理员反馈问题")
2516
- ])
2517
- ], -1))
2518
- ])
2519
- ])
2520
- ]));
2521
- }
2522
- }), $n = /* @__PURE__ */ re(Cn, [["__scopeId", "data-v-99395185"]]), dt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
2523
- __proto__: null,
2524
- default: $n
2525
- }, Symbol.toStringTag, { value: "Module" })), Ln = { class: "error-page" }, Mn = { class: "error-container" }, Sn = { class: "error-content" }, Nn = { class: "error-actions" }, In = /* @__PURE__ */ ne({
2526
- __name: "403",
2527
- setup(t) {
2528
- const l = me(), u = () => {
2529
- l.push("/");
2530
- };
2531
- return (s, o) => (a(), c("div", Ln, [
2532
- e("div", Mn, [
2533
- o[7] || (o[7] = e("div", { class: "error-bg" }, [
2534
- e("div", { class: "bg-circle circle-1" }),
2535
- e("div", { class: "bg-circle circle-2" }),
2536
- e("div", { class: "bg-circle circle-3" })
2537
- ], -1)),
2538
- e("div", Sn, [
2539
- o[5] || (o[5] = ze('<div class="error-code" data-v-e6e1f7ac><span class="code-digit" data-v-e6e1f7ac>4</span><span class="code-zero warning" data-v-e6e1f7ac><span class="zero-inner" data-v-e6e1f7ac>0</span></span><span class="code-digit" data-v-e6e1f7ac>3</span></div><div class="error-illustration" data-v-e6e1f7ac><svg viewBox="0 0 200 120" fill="none" xmlns="http://www.w3.org/2000/svg" data-v-e6e1f7ac><path d="M100 15 L150 35 L150 70 C150 95 100 110 100 110 C100 110 50 95 50 70 L50 35 Z" fill="var(--xto-color-warning-light-9, #FFF3E8)" stroke="var(--xto-color-warning, #FF7D00)" stroke-width="2" data-v-e6e1f7ac></path><rect x="85" y="55" width="30" height="25" rx="4" fill="var(--xto-color-warning, #FF7D00)" data-v-e6e1f7ac></rect><path d="M92 55 V48 A8 8 0 0 1 108 48 V55" fill="none" stroke="var(--xto-color-warning, #FF7D00)" stroke-width="3" data-v-e6e1f7ac></path><circle cx="100" cy="67" r="6" fill="none" stroke="#fff" stroke-width="2" data-v-e6e1f7ac></circle><line x1="96" y1="63" x2="104" y2="71" stroke="#fff" stroke-width="2" data-v-e6e1f7ac></line></svg></div><h1 class="error-title" data-v-e6e1f7ac>无访问权限</h1><p class="error-desc" data-v-e6e1f7ac>抱歉,您没有权限访问此页面,请联系管理员获取权限</p>', 4)),
2540
- e("div", Nn, [
2541
- k(n(we), {
2542
- type: "primary",
2543
- size: "large",
2544
- onClick: u
2545
- }, {
2546
- icon: M(() => [...o[1] || (o[1] = [
2547
- e("svg", {
2548
- viewBox: "0 0 24 24",
2549
- fill: "none",
2550
- stroke: "currentColor",
2551
- "stroke-width": "2"
2552
- }, [
2553
- e("path", { d: "M3 9l9-7 9 7v11a2 2 0 01-2 2H5a2 2 0 01-2-2V9z" }),
2554
- e("polyline", { points: "9,22 9,12 15,12 15,22" })
2555
- ], -1)
2556
- ])]),
2557
- default: M(() => [
2558
- o[2] || (o[2] = he(" 返回首页 ", -1))
2559
- ]),
2560
- _: 1
2561
- }),
2562
- k(n(we), {
2563
- size: "large",
2564
- onClick: o[0] || (o[0] = (i) => n(l).go(-1))
2565
- }, {
2566
- icon: M(() => [...o[3] || (o[3] = [
2567
- e("svg", {
2568
- viewBox: "0 0 24 24",
2569
- fill: "none",
2570
- stroke: "currentColor",
2571
- "stroke-width": "2"
2572
- }, [
2573
- e("path", { d: "M19 12H5M12 19l-7-7 7-7" })
2574
- ], -1)
2575
- ])]),
2576
- default: M(() => [
2577
- o[4] || (o[4] = he(" 返回上一页 ", -1))
2578
- ]),
2579
- _: 1
2580
- })
2581
- ]),
2582
- o[6] || (o[6] = e("div", { class: "error-tip" }, [
2583
- e("p", null, "可能的原因:"),
2584
- e("ul", null, [
2585
- e("li", null, "您的账号权限不足"),
2586
- e("li", null, "该页面需要特定角色才能访问"),
2587
- e("li", null, "您的登录状态已过期")
2588
- ])
2589
- ], -1))
2590
- ])
2591
- ])
2592
- ]));
2593
- }
2594
- }), Xn = /* @__PURE__ */ re(In, [["__scopeId", "data-v-e6e1f7ac"]]);
2595
- function Jn() {
2596
- const t = ue(), l = le(), u = Ue(), s = b(() => l.userName || ""), o = b(() => l.userInfo), i = b(() => t.appName), h = b(() => u.isLoggedIn), v = b(() => t.isDark), d = b(() => t.theme), g = b(() => t.isCollapsed), _ = b(() => t.layout);
2597
- return {
2598
- userName: s,
2599
- userInfo: o,
2600
- appName: i,
2601
- isLoggedIn: h,
2602
- isDark: v,
2603
- theme: d,
2604
- isCollapsed: g,
2605
- layout: _,
2606
- toggleTheme: () => {
2607
- t.toggleTheme();
2608
- },
2609
- toggleCollapse: () => {
2610
- t.toggleCollapse();
2611
- }
2612
- };
2613
- }
2614
- function Zn() {
2615
- const t = le();
2616
- return {
2617
- isLoggedIn: b(() => t.isLoggedIn)
2618
- };
2619
- }
2620
- function Qn(t, l = {}) {
2621
- const { rules: u, onSubmit: s } = l, o = y(), i = qe({ ...t }), h = y(!1), v = y(!1), d = y(!1), g = () => {
2622
- m(), d.value = !1, v.value = !0;
2623
- }, _ = (D) => {
2624
- Object.assign(i, D), d.value = !0, v.value = !0;
2625
- }, f = () => {
2626
- v.value = !1, m();
2627
- }, m = () => {
2628
- var D;
2629
- Object.keys(t).forEach((W) => {
2630
- i[W] = t[W];
2631
- }), (D = o.value) == null || D.resetFields();
2632
- };
2633
- return {
2634
- formRef: o,
2635
- formData: i,
2636
- rules: u,
2637
- loading: h,
2638
- visible: v,
2639
- isEdit: d,
2640
- openAdd: g,
2641
- openEdit: _,
2642
- close: f,
2643
- resetForm: m,
2644
- handleSubmit: async () => {
2645
- var D;
2646
- try {
2647
- await ((D = o.value) == null ? void 0 : D.validate()), h.value = !0, await (s == null ? void 0 : s(i)), f();
2648
- } catch (W) {
2649
- console.error(W);
2650
- } finally {
2651
- h.value = !1;
2652
- }
2653
- }
2654
- };
2655
- }
2656
- function el(t) {
2657
- const { fetchData: l, defaultPageSize: u = 10 } = t, s = y(!1), o = y([]), i = y(0), h = y(1), v = y(u), d = qe({}), g = async () => {
2658
- s.value = !0;
2659
- try {
2660
- const F = {
2661
- ...d,
2662
- page: h.value,
2663
- pageSize: v.value
2664
- }, V = await l(F);
2665
- o.value = V.list, i.value = V.total;
2666
- } catch (F) {
2667
- console.error(F);
2668
- } finally {
2669
- s.value = !1;
2670
- }
2671
- }, _ = () => {
2672
- h.value = 1, g();
2673
- }, f = () => {
2674
- Object.keys(d).forEach((F) => {
2675
- d[F] = void 0;
2676
- }), h.value = 1, g();
2677
- }, m = (F) => {
2678
- h.value = F, g();
2679
- }, j = (F) => {
2680
- v.value = F, h.value = 1, g();
2681
- }, D = () => {
2682
- g();
2683
- }, W = b(() => ({
2684
- current: h.value,
2685
- pageSize: v.value,
2686
- total: i.value
2687
- }));
2688
- return {
2689
- loading: s,
2690
- data: o,
2691
- total: i,
2692
- currentPage: h,
2693
- pageSize: v,
2694
- searchParams: d,
2695
- pagination: W,
2696
- getData: g,
2697
- handleSearch: _,
2698
- handleReset: f,
2699
- handlePageChange: m,
2700
- handleSizeChange: j,
2701
- refresh: D
2702
- };
2703
- }
2704
- const Je = Ee("locale", () => {
2705
- const t = I.get("locale") || "zh-CN", l = It(t), u = y(t), s = Et(), { t: o, messages: i, setLocale: h, mergeMessages: v } = Ut(), d = b(() => {
2706
- const m = s.find((j) => j.code === u.value);
2707
- return (m == null ? void 0 : m.name) || u.value;
2708
- });
2709
- return {
2710
- locale: u,
2711
- localeName: d,
2712
- locales: s,
2713
- messages: i,
2714
- t: o,
2715
- changeLocale: (m) => {
2716
- u.value = m, h(m), I.set("locale", m), l.setLocale(m);
2717
- },
2718
- addMessages: (m) => {
2719
- v(m);
2720
- },
2721
- initLocale: () => {
2722
- h(t);
2723
- },
2724
- provider: l
2725
- };
2726
- }), En = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
2727
- __proto__: null,
2728
- useLocaleStore: Je
2729
- }, Symbol.toStringTag, { value: "Module" }));
2730
- function tl() {
2731
- const t = Je();
2732
- return {
2733
- /** 当前语言代码 */
2734
- locale: t.locale,
2735
- /** 当前语言名称 */
2736
- localeName: t.localeName,
2737
- /** 支持的语言列表 */
2738
- locales: t.locales,
2739
- /** 翻译函数 */
2740
- t: t.t,
2741
- /** 当前语言包 */
2742
- messages: t.messages,
2743
- /** 切换语言 */
2744
- setLocale: t.changeLocale,
2745
- /** 添加自定义翻译 */
2746
- addMessages: t.addMessages
2747
- };
2748
- }
2749
- function sl() {
2750
- return Je().t;
2751
- }
2752
- function ol(t) {
2753
- const l = le(), u = de();
2754
- return l.isLoggedIn ? u.hasPermission(t) : !1;
2755
- }
2756
- function al(t) {
2757
- return le().isLoggedIn;
2758
- }
2759
- function nl() {
2760
- return !0;
2761
- }
2762
- const mt = [
2763
- {
2764
- path: "/login",
2765
- name: "Login",
2766
- component: () => Promise.resolve().then(() => yn),
2767
- meta: {
2768
- title: "登录",
2769
- hidden: !0
2770
- }
2771
- }
2772
- ], pt = {
2773
- path: "/",
2774
- name: "Layout",
2775
- component: () => Promise.resolve().then(() => en),
2776
- redirect: "/dashboard",
2777
- children: [
2778
- {
2779
- path: "/dashboard",
2780
- name: "Dashboard",
2781
- component: () => import("./index-D4K3OfZa.js"),
2782
- meta: {
2783
- title: "仪表盘",
2784
- icon: "dashboard",
2785
- keepAlive: !0,
2786
- affix: !0
2787
- }
2788
- },
2789
- {
2790
- path: "/system/user",
2791
- name: "SystemUser",
2792
- component: () => import("./index-BO31bICK.js"),
2793
- meta: {
2794
- title: "用户管理",
2795
- icon: "user",
2796
- keepAlive: !0
2797
- }
2798
- },
2799
- {
2800
- path: "/system/role",
2801
- name: "SystemRole",
2802
- component: () => import("./index-QdDB_2uu.js"),
2803
- meta: {
2804
- title: "角色管理",
2805
- icon: "role",
2806
- keepAlive: !0
2807
- }
2808
- },
2809
- {
2810
- path: "/system/menu",
2811
- name: "SystemMenu",
2812
- component: () => import("./index-DkG24eV5.js"),
2813
- meta: {
2814
- title: "菜单管理",
2815
- icon: "menu",
2816
- keepAlive: !0
2817
- }
2818
- },
2819
- // catch-all 路由:让 404 在 Layout 内部渲染,保持左侧菜单显示
2820
- {
2821
- path: "/:pathMatch(.*)*",
2822
- name: "CatchAll",
2823
- component: () => Promise.resolve().then(() => dt),
2824
- meta: {
2825
- title: "404",
2826
- hidden: !0
2827
- }
2828
- }
2829
- ]
2830
- }, ll = [
2831
- {
2832
- path: "/dashboard",
2833
- name: "Dashboard",
2834
- component: () => import("./index-D4K3OfZa.js"),
2835
- meta: {
2836
- title: "仪表盘",
2837
- icon: "dashboard",
2838
- keepAlive: !0,
2839
- affix: !0
2840
- }
2841
- },
2842
- {
2843
- path: "/system",
2844
- name: "System",
2845
- redirect: "/system/user",
2846
- meta: {
2847
- title: "系统管理",
2848
- icon: "setting"
2849
- },
2850
- children: [
2851
- {
2852
- path: "user",
2853
- name: "SystemUser",
2854
- component: () => import("./index-BO31bICK.js"),
2855
- meta: {
2856
- title: "用户管理",
2857
- icon: "user",
2858
- keepAlive: !0
2859
- }
2860
- },
2861
- {
2862
- path: "role",
2863
- name: "SystemRole",
2864
- component: () => import("./index-QdDB_2uu.js"),
2865
- meta: {
2866
- title: "角色管理",
2867
- icon: "role",
2868
- keepAlive: !0
2869
- }
2870
- },
2871
- {
2872
- path: "menu",
2873
- name: "SystemMenu",
2874
- component: () => import("./index-DkG24eV5.js"),
2875
- meta: {
2876
- title: "菜单管理",
2877
- icon: "menu",
2878
- keepAlive: !0
2879
- }
2880
- }
2881
- ]
2882
- }
2883
- ], Un = [
2884
- {
2885
- menuCode: "dashboard",
2886
- menuName: "仪表盘",
2887
- menuUrl: "/dashboard",
2888
- icon: "dashboard",
2889
- closable: !0,
2890
- isDefault: !0,
2891
- isOut: !1
2892
- },
2893
- {
2894
- menuCode: "system",
2895
- menuName: "系统管理",
2896
- menuUrl: "/system",
2897
- icon: "setting",
2898
- closable: !1,
2899
- isDefault: !1,
2900
- isOut: !1,
2901
- children: [
2902
- {
2903
- menuCode: "system_user",
2904
- menuName: "用户管理",
2905
- menuUrl: "/system/user",
2906
- icon: "user",
2907
- closable: !0,
2908
- isDefault: !1,
2909
- isOut: !1
2910
- },
2911
- {
2912
- menuCode: "system_role",
2913
- menuName: "角色管理",
2914
- menuUrl: "/system/role",
2915
- icon: "role",
2916
- closable: !0,
2917
- isDefault: !1,
2918
- isOut: !1
2919
- },
2920
- {
2921
- menuCode: "system_menu",
2922
- menuName: "菜单管理",
2923
- menuUrl: "/system/menu",
2924
- icon: "menu",
2925
- closable: !0,
2926
- isDefault: !1,
2927
- isOut: !1
2928
- }
2929
- ]
2930
- }
2931
- ], vt = He({
2932
- history: Ye(),
2933
- routes: [...mt, pt],
2934
- scrollBehavior: () => ({ left: 0, top: 0 })
2935
- }), zn = ["/login"];
2936
- vt.beforeEach(async (t, l, u) => {
2937
- const s = ue();
2938
- if (s.initTheme(), at())
2939
- if (t.path === "/login")
2940
- u({ path: "/" });
2941
- else {
2942
- const o = le();
2943
- o.isLoggedIn || (o.setUserInfo({
2944
- appId: Ie(),
2945
- userId: "1",
2946
- userName: "管理员",
2947
- departmentName: "技术部",
2948
- email: "admin@example.com",
2949
- mobilePhone: "13800138000",
2950
- positionName: "管理员",
2951
- avatar: ""
2952
- }), de().setMenuList(Un)), t.name && t.meta.keepAlive && s.addCachedView(t.name), u();
2953
- }
2954
- else
2955
- zn.includes(t.path) ? u() : u("/login");
2956
- });
2957
- function rl() {
2958
- const t = He({
2959
- history: Ye(),
2960
- routes: [...mt, pt]
2961
- });
2962
- vt.matcher = t.matcher;
2963
- }
2964
- function il(t, l = {}) {
2965
- const u = l.indexPath || "/dashboard", s = l.logoSrc || "/vite.svg", o = {
2966
- path: "/:pathMatch(.*)*",
2967
- name: "CatchAll",
2968
- component: () => Promise.resolve().then(() => dt),
2969
- meta: {
2970
- title: "404"
2971
- }
2972
- };
2973
- return {
2974
- path: "/",
2975
- name: "Layout",
2976
- component: ne({
2977
- name: "LayoutWrapper",
2978
- render() {
2979
- return Ct(ut, { logoSrc: s });
2980
- }
2981
- }),
2982
- redirect: u,
2983
- children: [...t, o]
2984
- };
2985
- }
2986
- function cl(t, l = {}) {
2987
- const u = l.base || _t();
2988
- return He({
2989
- history: Ye(u),
2990
- routes: t,
2991
- scrollBehavior: () => ({ left: 0, top: 0 })
2992
- });
2993
- }
2994
- const Tn = ["login", "404", "403", "/login", "/404", "/403"];
2995
- function Pn(t, l) {
2996
- if (l.includes(t)) return !0;
2997
- const u = t.startsWith("/") ? t.slice(1) : t;
2998
- return l.includes(u);
2999
- }
3000
- function ul(t, l = {}) {
3001
- const u = l.whiteList || Tn;
3002
- t.beforeEach(async (s, o, i) => {
3003
- const h = ue(), v = le(), d = de(), g = h.loginPath || l.loginPath || "/login";
3004
- if (h.initTheme(), ot())
3005
- if (s.path === g || s.name === "Login")
3006
- i({ name: "Dashboard" });
3007
- else if (v.isLoggedIn) {
3008
- if (!d.hasMenu)
3009
- try {
3010
- const f = l.fetchMenu ? await l.fetchMenu() : await Qe(l.appId);
3011
- d.setMenuList(f);
3012
- } catch (f) {
3013
- console.warn("补拉菜单失败:", f);
3014
- }
3015
- s.name && s.meta.keepAlive && h.addCachedView(s.name), i();
3016
- } else
3017
- try {
3018
- if (l.fetchUserInfo) {
3019
- const f = await l.fetchUserInfo();
3020
- v.setUserInfo(f);
3021
- } else {
3022
- const f = await ft();
3023
- v.setUserInfo(f);
3024
- }
3025
- if (l.fetchMenu) {
3026
- const f = await l.fetchMenu();
3027
- d.setMenuList(f);
3028
- } else {
3029
- const f = await Qe(l.appId);
3030
- d.setMenuList(f);
3031
- }
3032
- l.onLoginSuccess && l.onLoginSuccess(), s.name && s.meta.keepAlive && h.addCachedView(s.name), i({ ...s, replace: !0 });
3033
- } catch (f) {
3034
- console.error("获取用户信息失败:", f), v.clearUserInfo(), d.clearMenu(), nt(), i({ name: "Login", query: { redirect: s.fullPath } });
3035
- }
3036
- else
3037
- Pn(s.path, u) || s.name === "Login" || s.name === "NotFound" || s.name === "Forbidden" ? i() : i({ name: "Login", query: { redirect: s.fullPath } });
3038
- }), t.afterEach(() => {
3039
- });
3040
- }
3041
- var An = /* @__PURE__ */ ((t) => (t[t.ENABLED = 1] = "ENABLED", t[t.DISABLED = 0] = "DISABLED", t))(An || {}), Dn = /* @__PURE__ */ ((t) => (t[t.UNKNOWN = 0] = "UNKNOWN", t[t.MALE = 1] = "MALE", t[t.FEMALE = 2] = "FEMALE", t))(Dn || {}), Fn = /* @__PURE__ */ ((t) => (t[t.DIRECTORY = 0] = "DIRECTORY", t[t.MENU = 1] = "MENU", t[t.BUTTON = 2] = "BUTTON", t))(Fn || {});
3042
- const dl = {
3043
- 1: "启用",
3044
- 0: "禁用"
3045
- }, ml = {
3046
- 0: "未知",
3047
- 1: "男",
3048
- 2: "女"
3049
- }, pl = {
3050
- 0: "目录",
3051
- 1: "菜单",
3052
- 2: "按钮"
3053
- }, vl = [
3054
- {
3055
- label: "启用",
3056
- value: 1
3057
- /* ENABLED */
3058
- },
3059
- {
3060
- label: "禁用",
3061
- value: 0
3062
- /* DISABLED */
3063
- }
3064
- ], hl = [
3065
- {
3066
- label: "未知",
3067
- value: 0
3068
- /* UNKNOWN */
3069
- },
3070
- {
3071
- label: "男",
3072
- value: 1
3073
- /* MALE */
3074
- },
3075
- {
3076
- label: "女",
3077
- value: 2
3078
- /* FEMALE */
3079
- }
3080
- ], _l = [
3081
- {
3082
- label: "目录",
3083
- value: 0
3084
- /* DIRECTORY */
3085
- },
3086
- {
3087
- label: "菜单",
3088
- value: 1
3089
- /* MENU */
3090
- },
3091
- {
3092
- label: "按钮",
3093
- value: 2
3094
- /* BUTTON */
3095
- }
3096
- ], fl = {
3097
- mounted(t, l) {
3098
- var h, v;
3099
- const u = le(), s = de();
3100
- if (!u.isLoggedIn) {
3101
- (h = t.parentNode) == null || h.removeChild(t);
3102
- return;
3103
- }
3104
- const o = l.value, i = Array.isArray(o) ? o : [o];
3105
- s.hasPermission(i) || (v = t.parentNode) == null || v.removeChild(t);
3106
- }
3107
- };
3108
- async function gl(t) {
3109
- await gt(t.basePath);
3110
- const l = et();
3111
- return l && yt(l), kt({
3112
- appId: t.appId,
3113
- clientId: t.clientId,
3114
- apiBaseUrl: l || t.apiBaseUrl,
3115
- basePath: t.basePath
3116
- }), t.basePath && wt(t.basePath), Promise.resolve().then(() => zt).then(({ useAppStore: u }) => {
3117
- const s = u();
3118
- t.appName && s.setAppName(t.appName), t.indexPath && s.setIndexPath(t.indexPath), t.loginPath && s.setLoginPath(t.loginPath);
3119
- }), t.locale && Promise.resolve().then(() => En).then(({ useLocaleStore: u }) => {
3120
- u().changeLocale(t.locale);
3121
- }), {
3122
- config: {
3123
- appName: t.appName || "XTO App",
3124
- appId: Ie(),
3125
- clientId: rt(),
3126
- apiBaseUrl: et(),
3127
- basePath: t.basePath || "/",
3128
- indexPath: t.indexPath || "/dashboard",
3129
- loginPath: t.loginPath || "/login",
3130
- locale: t.locale || "zh-CN"
3131
- }
3132
- };
3133
- }
3134
- export {
3135
- ue as A,
3136
- Zn as B,
3137
- Ue as C,
3138
- Qn as D,
3139
- tl as E,
3140
- Gn as F,
3141
- Dn as G,
3142
- Os as H,
3143
- Je as I,
3144
- de as J,
3145
- el as K,
3146
- ut as L,
3147
- Fn as M,
3148
- le as N,
3149
- An as S,
3150
- Yn as T,
3151
- re as _,
3152
- vl as a,
3153
- _l as b,
3154
- Xn as c,
3155
- hl as d,
3156
- ml as e,
3157
- pl as f,
3158
- $n as g,
3159
- st as h,
3160
- gn as i,
3161
- dl as j,
3162
- il as k,
3163
- cl as l,
3164
- sl as m,
3165
- gl as n,
3166
- ll as o,
3167
- ol as p,
3168
- al as q,
3169
- nl as r,
3170
- pt as s,
3171
- Un as t,
3172
- fl as u,
3173
- rl as v,
3174
- vt as w,
3175
- ul as x,
3176
- mt as y,
3177
- Jn as z
3178
- };