xto-fronted 0.4.111 → 0.4.112

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 (91) hide show
  1. package/dist/assets/404-Cw_4ZCL6.css +1 -0
  2. package/dist/assets/404-G0TYnM2t.js +1 -0
  3. package/dist/assets/_plugin-vue_export-helper-DlAUqK2U.js +1 -0
  4. package/dist/assets/index-8nuVIlbv.css +1 -0
  5. package/dist/assets/index-BRR97dc6.js +1 -0
  6. package/dist/assets/index-BlRslYYI.css +1 -0
  7. package/dist/assets/index-Br0rA9ST.js +1 -0
  8. package/dist/assets/index-BudArKxR.css +1 -0
  9. package/dist/assets/index-CEwTCJMr.js +1 -0
  10. package/dist/assets/index-CFhWBbxk.css +1 -0
  11. package/dist/assets/index-Cm58iTuj.js +1 -0
  12. package/dist/assets/index-Cno3g_Ca.js +1 -0
  13. package/dist/assets/index-Cpew6d-v.css +1 -0
  14. package/dist/assets/index-D1AzIZb6.js +1 -0
  15. package/dist/assets/index-DCn9x-He.js +2 -0
  16. package/dist/assets/index-Dk64JJvN.js +1 -0
  17. package/dist/assets/index-rQHcgyhm.css +1 -0
  18. package/dist/assets/index-vfvEFrCH.css +1 -0
  19. package/dist/assets/vendor-CWD9azq9.js +16 -0
  20. package/dist/assets/vue-vendor-gcK82_Kd.js +29 -0
  21. package/dist/assets/xto-base-CL2NKZJJ.css +1 -0
  22. package/dist/assets/xto-base-wYW0Uxvr.js +1 -0
  23. package/dist/assets/xto-business--V1F5Gwb.css +1 -0
  24. package/dist/assets/xto-core-DtPNWVUu.js +1 -0
  25. package/dist/assets/xto-data-2diO2SyB.js +1 -0
  26. package/dist/assets/xto-data-Bi03KULC.css +1 -0
  27. package/dist/assets/xto-feedback-BOOXC1Ev.js +1 -0
  28. package/dist/assets/xto-feedback-Bxx38c3P.css +1 -0
  29. package/dist/assets/xto-form-BBugNbnQ.js +1 -0
  30. package/dist/assets/xto-form-Cu6q3VLG.css +1 -0
  31. package/dist/assets/xto-layout-BDD6sSlM.css +1 -0
  32. package/dist/assets/xto-navigation-D_LFy9y9.js +1 -0
  33. package/dist/assets/xto-navigation-XfpyMpEo.css +1 -0
  34. package/dist/index.html +28 -0
  35. package/package.json +1 -1
  36. package/src/utils/request.ts +1 -1
  37. package/dist/App.vue.d.ts +0 -2
  38. package/dist/api/auth.d.ts +0 -8
  39. package/dist/api/index.d.ts +0 -6
  40. package/dist/api/index.js +0 -26
  41. package/dist/api/system.d.ts +0 -16
  42. package/dist/api/user.d.ts +0 -13
  43. package/dist/api.d.ts +0 -2
  44. package/dist/components/Layout/Footer.vue.d.ts +0 -2
  45. package/dist/components/Layout/Header.vue.d.ts +0 -5
  46. package/dist/components/Layout/MixTopMenu.vue.d.ts +0 -10
  47. package/dist/components/Layout/Sidebar.vue.d.ts +0 -13
  48. package/dist/components/Layout/SidebarMenuItem.vue.d.ts +0 -5
  49. package/dist/components/Layout/Tabs.vue.d.ts +0 -2
  50. package/dist/components/Layout/TopMenu.vue.d.ts +0 -10
  51. package/dist/components/Layout/index.vue.d.ts +0 -7
  52. package/dist/composables/useApp.d.ts +0 -30
  53. package/dist/composables/useAuth.d.ts +0 -6
  54. package/dist/composables/useForm.d.ts +0 -20
  55. package/dist/composables/useI18n.d.ts +0 -30
  56. package/dist/composables/useTable.d.ts +0 -29
  57. package/dist/directives/permission.d.ts +0 -4
  58. package/dist/enums/index.d.ts +0 -32
  59. package/dist/index-BNLsx1WO.js +0 -641
  60. package/dist/index-Cjel_bu8.js +0 -3171
  61. package/dist/index-DB43988M.js +0 -479
  62. package/dist/index-DKHtW-p9.js +0 -189
  63. package/dist/index-q2D-YeQK.js +0 -515
  64. package/dist/index.d.ts +0 -63
  65. package/dist/index.js +0 -99
  66. package/dist/main.d.ts +0 -0
  67. package/dist/router/dynamicRoutes.d.ts +0 -30
  68. package/dist/router/guards.d.ts +0 -17
  69. package/dist/router/index.d.ts +0 -6
  70. package/dist/router/layoutRoute.d.ts +0 -23
  71. package/dist/router/staticRoutes.d.ts +0 -2
  72. package/dist/stores/app.d.ts +0 -99
  73. package/dist/stores/auth.d.ts +0 -41
  74. package/dist/stores/index.d.ts +0 -10
  75. package/dist/stores/locale.d.ts +0 -42
  76. package/dist/stores/menu.d.ts +0 -83
  77. package/dist/stores/user.d.ts +0 -101
  78. package/dist/style.css +0 -1
  79. package/dist/user-Dr3u-kRk.js +0 -1186
  80. package/dist/utils/auth.d.ts +0 -27
  81. package/dist/utils/config.d.ts +0 -51
  82. package/dist/utils/permission.d.ts +0 -17
  83. package/dist/utils/request.d.ts +0 -34
  84. package/dist/utils/storage.d.ts +0 -24
  85. package/dist/views/dashboard/index.vue.d.ts +0 -2
  86. package/dist/views/error/403.vue.d.ts +0 -2
  87. package/dist/views/error/404.vue.d.ts +0 -2
  88. package/dist/views/login/index.vue.d.ts +0 -4
  89. package/dist/views/system/menu/index.vue.d.ts +0 -4
  90. package/dist/views/system/role/index.vue.d.ts +0 -4
  91. package/dist/views/system/user/index.vue.d.ts +0 -4
@@ -1,3171 +0,0 @@
1
- import { x as I, y as st, z as ot, A as at, B as nt, o as vt, C as lt, D as Fe, E as ht, m as _t, i as ft, F as gt, G as Qe, H as yt, I as kt, J as wt } from "./user-Dr3u-kRk.js";
2
- import { ref as y, computed as b, watch as ye, defineComponent as ne, resolveComponent as rt, openBlock as a, createBlock as O, 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 Ee, normalizeStyle as Ne, reactive as qe, createStaticVNode as ze, withKeys as xt, h as Ct } from "vue";
3
- import { defineStore as Ie } 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 z, Button as we } from "@xto/base";
7
- import { Drawer as Xe, Message as Mt } from "@xto/feedback";
8
- import { Form as St, FormItem as Pe, Input as et, Checkbox as Nt } from "@xto/form";
9
- import { createLocaleProvider as It, getSupportedLocales as Ut, useLocale as zt } from "@xto/core/locale";
10
- const ue = Ie("app", () => {
11
- const t = y(I.get("appName") || "XTO App"), r = 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), f = y(I.get("showBreadcrumb") ?? !0), _ = y(I.get("primaryColor") || "#409eff"), g = y([]), m = y([]), j = b(() => s.value ? "dark" : "light"), D = (U) => {
12
- t.value = U, I.set("appName", U);
13
- }, W = (U) => {
14
- r.value = U, I.set("indexPath", U);
15
- }, V = (U) => {
16
- u.value = U, I.set("loginPath", U);
17
- }, B = () => {
18
- s.value = !s.value, o.value = s.value ? "dark" : "light", Z();
19
- }, H = (U) => {
20
- o.value = U, s.value = U === "dark", Z();
21
- }, Z = () => {
22
- const U = document.documentElement;
23
- s.value ? U.classList.add("dark") : U.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 = (U) => {
27
- i.value = U, I.set("layout", U);
28
- }, ee = () => {
29
- v.value = !v.value, I.set("showTabs", v.value);
30
- }, E = () => {
31
- d.value = !d.value, I.set("showFooter", d.value);
32
- }, N = () => {
33
- f.value = !f.value, I.set("showBreadcrumb", f.value);
34
- }, A = (U) => {
35
- _.value = U, document.documentElement.style.setProperty("--color-primary", U), I.set("primaryColor", U);
36
- }, G = (U) => {
37
- g.value.includes(U) || g.value.push(U);
38
- }, F = (U) => {
39
- const oe = g.value.indexOf(U);
40
- oe > -1 && g.value.splice(oe, 1);
41
- }, se = () => {
42
- g.value = [];
43
- }, ie = (U) => {
44
- m.value = U;
45
- }, pe = () => {
46
- Z(), _.value !== "#409eff" && document.documentElement.style.setProperty("--color-primary", _.value);
47
- };
48
- return ye(s, Z), {
49
- appName: t,
50
- indexPath: r,
51
- loginPath: u,
52
- isDark: s,
53
- theme: o,
54
- layout: i,
55
- isCollapsed: h,
56
- showTabs: v,
57
- showFooter: d,
58
- showBreadcrumb: f,
59
- primaryColor: _,
60
- cachedViews: g,
61
- mixSubMenus: m,
62
- themeClass: j,
63
- setAppName: D,
64
- setIndexPath: W,
65
- setLoginPath: V,
66
- toggleTheme: B,
67
- toggleCollapse: Y,
68
- setTheme: H,
69
- setLayout: q,
70
- toggleTabs: ee,
71
- toggleFooter: E,
72
- toggleBreadcrumb: N,
73
- setPrimaryColor: A,
74
- addCachedView: G,
75
- removeCachedView: F,
76
- clearCachedViews: se,
77
- setMixSubMenus: ie,
78
- initTheme: pe
79
- };
80
- }), Tt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
81
- __proto__: null,
82
- useAppStore: ue
83
- }, Symbol.toStringTag, { value: "Module" })), Ae = "menu_list", De = "permission_list", Et = {
84
- menuCode: "home",
85
- menuName: "首页",
86
- menuUrl: "/dashboard",
87
- icon: "home",
88
- closable: !1,
89
- isDefault: !1,
90
- isOut: !1
91
- };
92
- function it(t) {
93
- return t.filter((r) => r.type !== 1).map((r) => ({
94
- ...r,
95
- children: r.children ? it(r.children) : void 0
96
- }));
97
- }
98
- function Pt(t) {
99
- const r = [];
100
- function u(s) {
101
- s.forEach((o) => {
102
- o.type === 1 && o.menuCode && r.push(o.menuCode), o.children && u(o.children);
103
- });
104
- }
105
- return u(t), r;
106
- }
107
- const de = Ie("menu", () => {
108
- const t = y(I.get(Ae) || []), r = y(I.get(De) || []), u = b(() => t.value.length > 0);
109
- return {
110
- menuList: t,
111
- permissions: r,
112
- hasMenu: u,
113
- setMenuList: (h) => {
114
- r.value = Pt(h), I.set(De, r.value);
115
- const v = it(h);
116
- t.value = [Et, ...v], I.set(Ae, t.value);
117
- },
118
- clearMenu: () => {
119
- t.value = [], r.value = [], I.remove(Ae), I.remove(De);
120
- },
121
- hasPermission: (h) => Array.isArray(h) ? h.some((v) => r.value.includes(v)) : r.value.includes(h)
122
- };
123
- }), Ve = "user_info", le = Ie("user", () => {
124
- const t = y(I.get(Ve)), r = 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
- }), f = b(() => {
146
- var m;
147
- return ((m = t.value) == null ? void 0 : m.avatar) || "";
148
- });
149
- return {
150
- userInfo: t,
151
- isLoggedIn: r,
152
- userId: u,
153
- userName: s,
154
- departmentName: o,
155
- roleName: i,
156
- email: h,
157
- mobilePhone: v,
158
- positionName: d,
159
- avatar: f,
160
- setUserInfo: (m) => {
161
- t.value = m, I.set(Ve, m);
162
- },
163
- clearUserInfo: () => {
164
- t.value = null, I.remove(Ve);
165
- }
166
- };
167
- }), Ue = Ie("auth", () => {
168
- const t = y(st()), r = b(() => ot()), u = y(""), s = y(""), o = y(""), i = y("/login");
169
- return {
170
- token: t,
171
- isLoggedIn: r,
172
- baseUrl: u,
173
- appId: s,
174
- clientId: o,
175
- loginPath: i,
176
- login: (m) => {
177
- t.value = m.access_token, nt(m);
178
- },
179
- logout: () => {
180
- t.value = null, at();
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
- }), At = { class: "menu-item__content" }, Dt = { class: "menu-item__icon" }, Vt = {
196
- key: 1,
197
- class: "menu-item__char"
198
- }, Ot = { class: "menu-item__text" }, Bt = { class: "menu-item__content" }, Rt = {
199
- key: 0,
200
- class: "menu-item__icon"
201
- }, Ft = {
202
- key: 1,
203
- class: "menu-item__char"
204
- }, Kt = { class: "menu-item__text" }, jt = /* @__PURE__ */ ne({
205
- __name: "SidebarMenuItem",
206
- props: {
207
- menu: {}
208
- },
209
- setup(t) {
210
- const r = 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(() => r.menu.menuId || r.menu.menuCode || r.menu.menuUrl || ""), v = b(() => r.menu.children && r.menu.children.length > 0);
350
- return (d, f) => {
351
- const _ = rt("SidebarMenuItem", !0);
352
- return v.value ? (a(), O(n(Re), {
353
- key: 0,
354
- index: h.value
355
- }, {
356
- title: M(() => [
357
- e("span", At, [
358
- e("span", Dt, [
359
- i(s(t.menu.icon)) ? (a(), O(n(z), {
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, (g) => (a(), O(_, {
370
- key: g.menuId || g.menuCode || g.menuUrl,
371
- menu: g
372
- }, null, 8, ["menu"]))), 128))
373
- ]),
374
- _: 1
375
- }, 8, ["index"])) : (a(), O(n(Se), {
376
- key: 1,
377
- index: t.menu.menuUrl || h.value
378
- }, {
379
- default: M(() => [
380
- e("span", Bt, [
381
- t.menu.menuName !== "首页" ? (a(), c("span", Rt, [
382
- i(s(t.menu.icon)) ? (a(), O(n(z), {
383
- key: 0,
384
- name: s(t.menu.icon),
385
- size: 16
386
- }, null, 8, ["name"])) : (a(), c("span", Ft, x(o(t.menu.menuName)), 1))
387
- ])) : P("", !0),
388
- e("span", Kt, x(t.menu.menuName), 1)
389
- ])
390
- ]),
391
- _: 1
392
- }, 8, ["index"]));
393
- };
394
- }
395
- }), re = (t, r) => {
396
- const u = t.__vccOpts || t;
397
- for (const [s, o] of r)
398
- u[s] = o;
399
- return u;
400
- }, Wt = /* @__PURE__ */ re(jt, [["__scopeId", "data-v-f5865e28"]]), qt = {
401
- key: 0,
402
- class: "sidebar__logo"
403
- }, Ht = ["src"], Yt = {
404
- key: 1,
405
- class: "sidebar__user"
406
- }, Gt = { class: "sidebar__user-info" }, Xt = { class: "sidebar__user-name" }, Jt = { class: "sidebar__user-role" }, Oe = "sidebar_opened_menus", Be = "sidebar_menu_list_key", Zt = /* @__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 r = t, u = be(), s = me(), o = de(), i = le(), h = Ue(), v = ue(), d = b(() => r.menuList.length > 0 ? r.menuList : o.menuList), f = b(() => v.isCollapsed), _ = b(() => u.path), g = (E) => E.menuId || E.menuCode || E.menuUrl || "", m = () => d.value.map(g).join(","), j = I.get(Be) || "", D = m(), W = j === D ? I.get(Oe) || [] : [], V = y(W);
416
- ye(V, (E) => {
417
- I.set(Oe, E), I.set(Be, m());
418
- }, { deep: !0 });
419
- const B = (E, N, A = []) => {
420
- var G;
421
- for (const F of E) {
422
- if (F.menuUrl && (N === F.menuUrl || N.startsWith(F.menuUrl + "/")))
423
- return [...A, g(F)];
424
- if ((G = F.children) != null && G.length) {
425
- const se = B(F.children, N, [...A, g(F)]);
426
- if (se) return se;
427
- }
428
- }
429
- return null;
430
- };
431
- ye([() => u.path, d], ([E, N]) => {
432
- if (N.length > 0) {
433
- const A = B(N, E);
434
- if (A) {
435
- const G = A.slice(0, -1), F = /* @__PURE__ */ new Set([...V.value, ...G]);
436
- V.value = Array.from(F);
437
- }
438
- }
439
- }, { immediate: !0 }), ye(d, (E, N) => {
440
- E !== N && (V.value = [], I.set(Oe, []), I.set(Be, m()));
441
- }, { immediate: !1 });
442
- const H = b(() => v.isDark ? "#1d1e1f" : "#fff"), Z = b(() => v.isDark ? "#cfd3dc" : "#303133"), Y = b(() => "#409eff"), q = (E) => {
443
- E && E !== u.path && s.push(E);
444
- }, ee = () => {
445
- h.logout(), i.clearUserInfo(), o.clearMenu(), s.push(v.loginPath);
446
- };
447
- return (E, N) => (a(), c("div", {
448
- class: J(["sidebar", { "sidebar--collapsed": f.value }])
449
- }, [
450
- r.showLogo ? (a(), c("div", qt, [
451
- e("img", {
452
- src: r.logoSrc,
453
- alt: "Logo",
454
- class: "sidebar__logo-img"
455
- }, null, 8, Ht),
456
- Te(e("span", { class: "sidebar__logo-text" }, x(n(v).appName), 513), [
457
- [bt, !f.value]
458
- ])
459
- ])) : P("", !0),
460
- k(n(Ge), {
461
- modelValue: _.value,
462
- "onUpdate:modelValue": N[0] || (N[0] = (A) => _.value = A),
463
- openeds: V.value,
464
- "onUpdate:openeds": N[1] || (N[1] = (A) => V.value = A),
465
- mode: "vertical",
466
- collapse: f.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(), O(Wt, {
476
- key: g(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
- r.showUser && !f.value ? (a(), c("div", Yt, [
483
- e("div", Gt, [
484
- e("span", Xt, x(n(i).userName), 1),
485
- e("span", Jt, 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
- }), tt = /* @__PURE__ */ re(Zt, [["__scopeId", "data-v-2ecab012"]]), Qt = { class: "header" }, es = { class: "header__left" }, ts = {
501
- key: 0,
502
- class: "header__breadcrumb"
503
- }, ss = {
504
- key: 0,
505
- class: "breadcrumb-separator"
506
- }, os = { class: "header__right" }, as = {
507
- key: 0,
508
- class: "header__search-dropdown"
509
- }, ns = {
510
- key: 0,
511
- class: "header__search-results"
512
- }, ls = ["onClick"], rs = {
513
- key: 0,
514
- class: "header__search-icon"
515
- }, is = {
516
- key: 1,
517
- class: "header__search-char"
518
- }, cs = { class: "header__search-item-title" }, us = {
519
- key: 1,
520
- class: "header__search-item-parent"
521
- }, ds = {
522
- key: 1,
523
- class: "header__search-empty"
524
- }, ms = ["title"], ps = { class: "header__avatar" }, vs = { class: "header__user-name" }, hs = {
525
- key: 0,
526
- class: "header__dropdown"
527
- }, _s = { class: "header__dropdown-header" }, fs = { class: "header__dropdown-avatar" }, gs = { class: "header__dropdown-info" }, ys = { class: "header__dropdown-name" }, ks = { class: "header__dropdown-role" }, ws = { class: "header__dropdown-menu" }, bs = { class: "settings-drawer" }, xs = { class: "settings-section" }, Cs = { class: "settings-layout-options" }, $s = ["onClick"], Ls = { class: "layout-option__preview" }, Ms = {
528
- key: 0,
529
- class: "layout-preview-sidebar"
530
- }, Ss = {
531
- key: 1,
532
- class: "layout-preview-top"
533
- }, Ns = {
534
- key: 2,
535
- class: "layout-preview-mix"
536
- }, Is = { class: "layout-option__label" }, Us = { class: "settings-section" }, zs = { class: "settings-color-options" }, Ts = ["title", "onClick"], Es = { class: "settings-section" }, Ps = { class: "settings-switch-list" }, As = { class: "settings-switch-item" }, Ds = { class: "settings-switch-item" }, Vs = /* @__PURE__ */ ne({
537
- __name: "Header",
538
- setup(t) {
539
- const r = be(), u = me(), s = ue(), o = le(), i = Ue(), h = de(), v = y(!1), d = y(!1), f = y(null), _ = y(!1), g = 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
- ], V = [
544
- { value: "#409eff", label: "默认蓝" },
545
- { value: "#1890ff", label: "科技蓝" },
546
- { value: "#52c41a", label: "极光绿" },
547
- { value: "#faad14", label: "日落橙" },
548
- { value: "#f5222d", label: "薄暮红" },
549
- { value: "#722ed1", label: "酱紫" }
550
- ], B = b(() => r.matched.filter((w) => w.meta && w.meta.title).map((w) => ({
551
- title: w.meta.title,
552
- path: w.path
553
- }))), H = (T, w = "") => {
554
- const Q = [];
555
- return T.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 = (T) => {
661
- if (!T || T === "") return "";
662
- if (T.startsWith("tineco-icon-")) {
663
- const Q = T.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
- }[T] || T;
697
- }, q = (T) => T ? T.charAt(0) : "", ee = (T) => Z.has(T), E = 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
- }, F = () => {
704
- d.value = !0;
705
- }, se = (T) => {
706
- s.setLayout(T), d.value = !1;
707
- }, ie = (T) => {
708
- D.value = T;
709
- const w = document.documentElement;
710
- T ? w.classList.add("grey-mode") : w.classList.remove("grey-mode");
711
- }, pe = () => {
712
- ie(!D.value), d.value = !1;
713
- }, U = () => {
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
- g.value = !1, m.value = "";
725
- }, xe = (T) => {
726
- u.push(T), ve();
727
- }, Ce = (T) => {
728
- s.setPrimaryColor(T), 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 = (T) => {
736
- f.value && !f.value.contains(T.target) && ae(), j.value && !j.value.contains(T.target) && ve();
737
- }, ge = (T) => {
738
- T.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
- }), (T, w) => {
745
- var Q;
746
- return a(), c("div", Qt, [
747
- e("div", es, [
748
- e("div", {
749
- class: "header__collapse",
750
- onClick: A
751
- }, [
752
- k(n(z), {
753
- name: n(s).isCollapsed ? "menu-unfold" : "menu-fold",
754
- size: 18
755
- }, null, 8, ["name"])
756
- ]),
757
- n(s).showBreadcrumb ? (a(), c("div", ts, [
758
- (a(!0), c(K, null, X(B.value, (C, S) => (a(), c("span", {
759
- key: C.path
760
- }, [
761
- S > 0 ? (a(), c("span", ss, "/")) : P("", !0),
762
- e("span", {
763
- class: J({ "is-current": S === B.value.length - 1 })
764
- }, x(C.title), 3)
765
- ]))), 128))
766
- ])) : P("", !0)
767
- ]),
768
- e("div", os, [
769
- e("div", {
770
- class: "header__search",
771
- ref_key: "searchRef",
772
- ref: j
773
- }, [
774
- k(n(z), {
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) => g.value = !0)
785
- }, null, 544), [
786
- [We, m.value]
787
- ]),
788
- k(ke, { name: "search-dropdown" }, {
789
- default: M(() => [
790
- g.value && (E.value.length > 0 || m.value) ? (a(), c("div", as, [
791
- E.value.length > 0 ? (a(), c("div", ns, [
792
- (a(!0), c(K, null, X(E.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", rs, [
798
- ee(Y(C.icon)) ? (a(), O(n(z), {
799
- key: 0,
800
- name: Y(C.icon),
801
- size: 16
802
- }, null, 8, ["name"])) : (a(), c("span", is, x(q(C.title)), 1))
803
- ])) : P("", !0),
804
- e("span", cs, x(C.title), 1),
805
- C.parentTitle ? (a(), c("span", us, x(C.parentTitle), 1)) : P("", !0)
806
- ], 8, ls))), 128))
807
- ])) : (a(), c("div", ds, " 未找到匹配的菜单 "))
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(z), {
819
- name: _.value ? "fullscreen-exit" : "fullscreen",
820
- size: 16
821
- }, null, 8, ["name"])
822
- ], 8, ms),
823
- e("div", {
824
- class: "header__action",
825
- onClick: F,
826
- title: "换肤设置"
827
- }, [
828
- k(n(z), {
829
- name: "skin",
830
- size: 16
831
- })
832
- ]),
833
- e("div", {
834
- class: "header__action",
835
- onClick: G,
836
- title: "切换主题"
837
- }, [
838
- k(n(z), {
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: f
847
- }, [
848
- e("div", {
849
- class: "header__user-trigger",
850
- onClick: Ee(ce, ["stop"])
851
- }, [
852
- e("div", ps, [
853
- e("span", null, x(((Q = n(o).userName) == null ? void 0 : Q.charAt(0)) || "U"), 1)
854
- ]),
855
- e("span", vs, 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", hs, [
865
- e("div", _s, [
866
- e("div", fs, [
867
- e("span", null, x(((C = n(o).userName) == null ? void 0 : C.charAt(0)) || "U"), 1)
868
- ]),
869
- e("div", gs, [
870
- e("div", ys, x(n(o).userName), 1),
871
- e("div", ks, 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", ws, [
876
- e("div", {
877
- class: "header__dropdown-item",
878
- onClick: $e
879
- }, [
880
- k(n(z), {
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(z), {
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(z), {
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", bs, [
924
- e("div", xs, [
925
- w[11] || (w[11] = e("div", { class: "settings-title" }, "布局模式", -1)),
926
- e("div", Cs, [
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", Ls, [
933
- C.value === "sidebar" ? (a(), c("div", Ms, [...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", Ss, [...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", Ns, [...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", Is, x(C.label), 1)
953
- ], 10, $s)), 64))
954
- ])
955
- ]),
956
- e("div", Us, [
957
- w[12] || (w[12] = e("div", { class: "settings-title" }, "主题色", -1)),
958
- e("div", zs, [
959
- (a(), c(K, null, X(V, (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(), O(n(z), {
967
- key: 0,
968
- name: "check",
969
- size: 12,
970
- color: "#fff"
971
- })) : P("", !0)
972
- ], 14, Ts)), 64))
973
- ])
974
- ]),
975
- e("div", Es, [
976
- w[17] || (w[17] = e("div", { class: "settings-title" }, "功能设置", -1)),
977
- e("div", Ps, [
978
- e("div", As, [
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", Ds, [
988
- w[16] || (w[16] = e("span", null, "暗黑模式", -1)),
989
- e("div", {
990
- class: J(["switch-wrapper", { "is-checked": n(s).isDark }]),
991
- onClick: U
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-9ff678f3"]]), Bs = { class: "top-menu" }, Rs = { class: "top-menu__logo" }, Fs = ["src"], Ks = { class: "top-menu__logo-text" }, js = { class: "top-menu__menu-content" }, Ws = {
1006
- key: 0,
1007
- class: "top-menu__menu-icon"
1008
- }, qs = {
1009
- key: 1,
1010
- class: "top-menu__menu-char"
1011
- }, Hs = { class: "top-menu__menu-text" }, Ys = { class: "top-menu__menu-content" }, Gs = { class: "top-menu__menu-icon" }, Xs = {
1012
- key: 1,
1013
- class: "top-menu__menu-char"
1014
- }, Js = { class: "top-menu__menu-text" }, Zs = { class: "top-menu__menu-content" }, Qs = { class: "top-menu__menu-icon" }, eo = {
1015
- key: 1,
1016
- class: "top-menu__menu-char"
1017
- }, to = { class: "top-menu__menu-text" }, so = { class: "top-menu__menu-content" }, oo = { class: "top-menu__menu-icon" }, ao = {
1018
- key: 1,
1019
- class: "top-menu__menu-char"
1020
- }, no = { class: "top-menu__menu-text" }, lo = { class: "top-menu__menu-content" }, ro = {
1021
- key: 0,
1022
- class: "top-menu__menu-icon"
1023
- }, io = {
1024
- key: 1,
1025
- class: "top-menu__menu-char"
1026
- }, co = { class: "top-menu__menu-text" }, uo = { class: "top-menu__actions" }, mo = {
1027
- key: 0,
1028
- class: "top-menu__search-dropdown"
1029
- }, po = {
1030
- key: 0,
1031
- class: "top-menu__search-results"
1032
- }, vo = ["onClick"], ho = {
1033
- key: 0,
1034
- class: "top-menu__search-icon-item"
1035
- }, _o = {
1036
- key: 1,
1037
- class: "top-menu__search-char"
1038
- }, fo = { class: "top-menu__search-item-title" }, go = {
1039
- key: 1,
1040
- class: "top-menu__search-item-parent"
1041
- }, yo = {
1042
- key: 1,
1043
- class: "top-menu__search-empty"
1044
- }, ko = ["title"], wo = { class: "top-menu__avatar" }, bo = { class: "top-menu__user-name" }, xo = {
1045
- key: 0,
1046
- class: "top-menu__dropdown"
1047
- }, Co = { class: "top-menu__dropdown-header" }, $o = { class: "top-menu__dropdown-avatar" }, Lo = { class: "top-menu__dropdown-info" }, Mo = { class: "top-menu__dropdown-name" }, So = { class: "top-menu__dropdown-role" }, No = { class: "top-menu__dropdown-menu" }, Io = { class: "settings-drawer" }, Uo = { class: "settings-section" }, zo = { class: "settings-layout-options" }, To = ["onClick"], Eo = { class: "layout-option__preview" }, Po = {
1048
- key: 0,
1049
- class: "layout-preview-sidebar"
1050
- }, Ao = {
1051
- key: 1,
1052
- class: "layout-preview-top"
1053
- }, Do = {
1054
- key: 2,
1055
- class: "layout-preview-mix"
1056
- }, Vo = { class: "layout-option__label" }, Oo = { class: "settings-section" }, Bo = { class: "settings-color-options" }, Ro = ["title", "onClick"], Fo = { class: "settings-section" }, Ko = { class: "settings-switch-list" }, jo = { class: "settings-switch-item" }, Wo = { class: "settings-switch-item" }, qo = /* @__PURE__ */ ne({
1057
- __name: "TopMenu",
1058
- props: {
1059
- logoSrc: { default: "/vite.svg" }
1060
- },
1061
- setup(t) {
1062
- const r = t, u = be(), s = me(), o = de(), i = ue(), h = le(), v = Ue(), d = b(() => u.path), f = (S, L = "") => {
1063
- const te = [];
1064
- return S.forEach((l) => {
1065
- l.children && l.children.length > 0 ? te.push(...f(l.children, l.menuName)) : te.push({ ...l, parentTitle: L, title: l.menuName, path: l.menuUrl });
1066
- }), te;
1067
- }, _ = b(() => Y.value.trim() ? f(o.menuList).filter(
1068
- (L) => L.title.toLowerCase().includes(Y.value.toLowerCase())
1069
- ) : []), g = b(() => i.isDark ? "#1d1e1f" : "#fff"), m = b(() => i.isDark ? "#cfd3dc" : "#303133"), j = b(() => "#409eff"), D = y(!1), W = y(null), V = y(!1), B = y(!1), H = y(!1), Z = y(!1), Y = y(""), q = y(null), ee = (S) => {
1070
- S && S !== u.path && s.push(S);
1071
- }, E = /* @__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) => E.has(S), F = () => {
1211
- i.toggleTheme(), B.value = !1;
1212
- }, se = () => {
1213
- document.fullscreenElement ? document.exitFullscreen() : document.documentElement.requestFullscreen();
1214
- }, ie = () => {
1215
- V.value = !!document.fullscreenElement;
1216
- }, pe = () => {
1217
- D.value = !D.value;
1218
- }, U = () => {
1219
- D.value = !1;
1220
- }, oe = () => {
1221
- Z.value = !1, Y.value = "";
1222
- }, _e = (S) => {
1223
- s.push(S), oe();
1224
- }, ce = () => {
1225
- B.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), B.value = !1;
1232
- }, xe = () => {
1233
- i.toggleTheme(), B.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), B.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), B.value = !1;
1249
- }, ge = () => {
1250
- U(), s.push("/profile");
1251
- }, T = () => {
1252
- U(), s.push("/change-password");
1253
- }, w = () => {
1254
- U(), v.logout(), h.clearUserInfo(), o.clearMenu(), s.push(i.loginPath);
1255
- }, Q = (S) => {
1256
- W.value && !W.value.contains(S.target) && U(), q.value && !q.value.contains(S.target) && oe();
1257
- }, C = (S) => {
1258
- S.key === "Escape" && (oe(), U());
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", Bs, [
1267
- e("div", Rs, [
1268
- e("img", {
1269
- src: r.logoSrc,
1270
- alt: "Logo",
1271
- class: "top-menu__logo-img"
1272
- }, null, 8, Fs),
1273
- e("span", Ks, x(n(i).appName), 1)
1274
- ]),
1275
- k(n(Ge), {
1276
- "model-value": d.value,
1277
- mode: "horizontal",
1278
- "background-color": g.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, (l) => (a(), c(K, {
1286
- key: l.menuUrl
1287
- }, [
1288
- l.children && l.children.length > 0 ? (a(), O(n(Re), {
1289
- key: 0,
1290
- index: l.menuUrl
1291
- }, {
1292
- title: M(() => [
1293
- e("span", js, [
1294
- l.menuName !== "首页" ? (a(), c("span", Ws, [
1295
- G(N(l.icon)) ? (a(), O(n(z), {
1296
- key: 0,
1297
- name: N(l.icon),
1298
- size: 16
1299
- }, null, 8, ["name"])) : (a(), c("span", qs, x(A(l.menuName)), 1))
1300
- ])) : P("", !0),
1301
- e("span", Hs, x(l.menuName), 1)
1302
- ])
1303
- ]),
1304
- default: M(() => [
1305
- (a(!0), c(K, null, X(l.children, (p) => (a(), c(K, {
1306
- key: p.menuUrl
1307
- }, [
1308
- p.children && p.children.length > 0 ? (a(), O(n(Re), {
1309
- key: 0,
1310
- index: p.menuUrl
1311
- }, {
1312
- title: M(() => [
1313
- e("span", Ys, [
1314
- e("span", Gs, [
1315
- G(N(p.icon)) ? (a(), O(n(z), {
1316
- key: 0,
1317
- name: N(p.icon),
1318
- size: 16
1319
- }, null, 8, ["name"])) : (a(), c("span", Xs, x(A(p.menuName)), 1))
1320
- ]),
1321
- e("span", Js, x(p.menuName), 1)
1322
- ])
1323
- ]),
1324
- default: M(() => [
1325
- (a(!0), c(K, null, X(p.children, (R) => (a(), O(n(Se), {
1326
- key: R.menuUrl,
1327
- index: R.menuUrl
1328
- }, {
1329
- default: M(() => [
1330
- e("span", Zs, [
1331
- e("span", Qs, [
1332
- G(N(R.icon)) ? (a(), O(n(z), {
1333
- key: 0,
1334
- name: N(R.icon),
1335
- size: 16
1336
- }, null, 8, ["name"])) : (a(), c("span", eo, x(A(R.menuName)), 1))
1337
- ]),
1338
- e("span", to, x(R.menuName), 1)
1339
- ])
1340
- ]),
1341
- _: 2
1342
- }, 1032, ["index"]))), 128))
1343
- ]),
1344
- _: 2
1345
- }, 1032, ["index"])) : (a(), O(n(Se), {
1346
- key: 1,
1347
- index: p.menuUrl
1348
- }, {
1349
- default: M(() => [
1350
- e("span", so, [
1351
- e("span", oo, [
1352
- G(N(p.icon)) ? (a(), O(n(z), {
1353
- key: 0,
1354
- name: N(p.icon),
1355
- size: 16
1356
- }, null, 8, ["name"])) : (a(), c("span", ao, x(A(p.menuName)), 1))
1357
- ]),
1358
- e("span", no, x(p.menuName), 1)
1359
- ])
1360
- ]),
1361
- _: 2
1362
- }, 1032, ["index"]))
1363
- ], 64))), 128))
1364
- ]),
1365
- _: 2
1366
- }, 1032, ["index"])) : (a(), O(n(Se), {
1367
- key: 1,
1368
- index: l.menuUrl
1369
- }, {
1370
- default: M(() => [
1371
- e("span", lo, [
1372
- l.menuName !== "首页" ? (a(), c("span", ro, [
1373
- G(N(l.icon)) ? (a(), O(n(z), {
1374
- key: 0,
1375
- name: N(l.icon),
1376
- size: 16
1377
- }, null, 8, ["name"])) : (a(), c("span", io, x(A(l.menuName)), 1))
1378
- ])) : P("", !0),
1379
- e("span", co, x(l.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", uo, [
1389
- e("div", {
1390
- class: "top-menu__search",
1391
- ref_key: "searchRef",
1392
- ref: q
1393
- }, [
1394
- k(n(z), {
1395
- name: "search",
1396
- size: 14,
1397
- class: "top-menu__search-icon"
1398
- }),
1399
- Te(e("input", {
1400
- "onUpdate:modelValue": L[0] || (L[0] = (l) => Y.value = l),
1401
- type: "text",
1402
- class: "top-menu__search-input",
1403
- placeholder: "搜索菜单...",
1404
- onFocus: L[1] || (L[1] = (l) => 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", mo, [
1411
- _.value.length > 0 ? (a(), c("div", po, [
1412
- (a(!0), c(K, null, X(_.value, (l) => (a(), c("div", {
1413
- key: l.path,
1414
- class: "top-menu__search-item",
1415
- onClick: (p) => _e(l.path)
1416
- }, [
1417
- l.title !== "首页" ? (a(), c("span", ho, [
1418
- G(N(l.icon)) ? (a(), O(n(z), {
1419
- key: 0,
1420
- name: N(l.icon),
1421
- size: 16
1422
- }, null, 8, ["name"])) : (a(), c("span", _o, x(A(l.title)), 1))
1423
- ])) : P("", !0),
1424
- e("span", fo, x(l.title), 1),
1425
- l.parentTitle ? (a(), c("span", go, x(l.parentTitle), 1)) : P("", !0)
1426
- ], 8, vo))), 128))
1427
- ])) : (a(), c("div", yo, " 未找到匹配的菜单 "))
1428
- ])) : P("", !0)
1429
- ]),
1430
- _: 1
1431
- })
1432
- ], 512),
1433
- e("div", {
1434
- class: "top-menu__action",
1435
- onClick: se,
1436
- title: V.value ? "退出全屏" : "全屏"
1437
- }, [
1438
- k(n(z), {
1439
- name: V.value ? "fullscreen-exit" : "fullscreen",
1440
- size: 16
1441
- }, null, 8, ["name"])
1442
- ], 8, ko),
1443
- e("div", {
1444
- class: "top-menu__action",
1445
- onClick: ce,
1446
- title: "换肤设置"
1447
- }, [
1448
- k(n(z), {
1449
- name: "skin",
1450
- size: 16
1451
- })
1452
- ]),
1453
- e("div", {
1454
- class: "top-menu__action",
1455
- onClick: F,
1456
- title: "切换主题"
1457
- }, [
1458
- k(n(z), {
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: Ee(pe, ["stop"])
1471
- }, [
1472
- e("div", wo, [
1473
- e("span", null, x(((te = n(h).userName) == null ? void 0 : te.charAt(0)) || "U"), 1)
1474
- ]),
1475
- e("span", bo, 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 l;
1483
- return [
1484
- D.value ? (a(), c("div", xo, [
1485
- e("div", Co, [
1486
- e("div", $o, [
1487
- e("span", null, x(((l = n(h).userName) == null ? void 0 : l.charAt(0)) || "U"), 1)
1488
- ]),
1489
- e("div", Lo, [
1490
- e("div", Mo, x(n(h).userName), 1),
1491
- e("div", So, x(n(h).departmentName), 1)
1492
- ])
1493
- ]),
1494
- L[7] || (L[7] = e("div", { class: "top-menu__dropdown-divider" }, null, -1)),
1495
- e("div", No, [
1496
- e("div", {
1497
- class: "top-menu__dropdown-item",
1498
- onClick: ge
1499
- }, [
1500
- k(n(z), {
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: T
1509
- }, [
1510
- k(n(z), {
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(z), {
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: B.value,
1537
- "onUpdate:modelValue": L[2] || (L[2] = (l) => B.value = l),
1538
- title: "换肤设置",
1539
- direction: "rtl",
1540
- size: "320px"
1541
- }, {
1542
- default: M(() => [
1543
- e("div", Io, [
1544
- e("div", Uo, [
1545
- L[11] || (L[11] = e("div", { class: "settings-title" }, "布局模式", -1)),
1546
- e("div", zo, [
1547
- (a(), c(K, null, X(Ce, (l) => e("div", {
1548
- key: l.value,
1549
- class: J(["layout-option", { "is-active": $e.value === l.value }]),
1550
- onClick: (p) => Le(l.value)
1551
- }, [
1552
- e("div", Eo, [
1553
- l.value === "sidebar" ? (a(), c("div", Po, [...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
- ])])) : l.value === "top" ? (a(), c("div", Ao, [...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", Do, [...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(l.label), 1)
1573
- ], 10, To)), 64))
1574
- ])
1575
- ]),
1576
- e("div", Oo, [
1577
- L[12] || (L[12] = e("div", { class: "settings-title" }, "主题色", -1)),
1578
- e("div", Bo, [
1579
- (a(), c(K, null, X(Me, (l) => e("div", {
1580
- key: l.value,
1581
- class: J(["color-option", { "is-active": n(i).primaryColor === l.value }]),
1582
- style: Ne({ backgroundColor: l.value }),
1583
- title: l.label,
1584
- onClick: (p) => fe(l.value)
1585
- }, [
1586
- n(i).primaryColor === l.value ? (a(), O(n(z), {
1587
- key: 0,
1588
- name: "check",
1589
- size: 12,
1590
- color: "#fff"
1591
- })) : P("", !0)
1592
- ], 14, Ro)), 64))
1593
- ])
1594
- ]),
1595
- e("div", Fo, [
1596
- L[17] || (L[17] = e("div", { class: "settings-title" }, "功能设置", -1)),
1597
- e("div", Ko, [
1598
- e("div", jo, [
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", Wo, [
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
- }), Ho = /* @__PURE__ */ re(qo, [["__scopeId", "data-v-15f7b516"]]), Yo = { class: "mix-top-menu" }, Go = { class: "mix-top-menu__logo" }, Xo = ["src"], Jo = { class: "mix-top-menu__logo-text" }, Zo = { class: "mix-top-menu__menu-content" }, Qo = {
1626
- key: 0,
1627
- class: "mix-top-menu__menu-icon"
1628
- }, ea = {
1629
- key: 1,
1630
- class: "mix-top-menu__menu-char"
1631
- }, ta = { class: "mix-top-menu__menu-text" }, sa = { class: "mix-top-menu__actions" }, oa = {
1632
- key: 0,
1633
- class: "mix-top-menu__search-dropdown"
1634
- }, aa = {
1635
- key: 0,
1636
- class: "mix-top-menu__search-results"
1637
- }, na = ["onClick"], la = {
1638
- key: 0,
1639
- class: "mix-top-menu__search-icon-item"
1640
- }, ra = {
1641
- key: 1,
1642
- class: "mix-top-menu__search-char"
1643
- }, ia = { class: "mix-top-menu__search-item-title" }, ca = {
1644
- key: 1,
1645
- class: "mix-top-menu__search-item-parent"
1646
- }, ua = {
1647
- key: 1,
1648
- class: "mix-top-menu__search-empty"
1649
- }, da = ["title"], ma = { class: "mix-top-menu__avatar" }, pa = { class: "mix-top-menu__user-name" }, va = {
1650
- key: 0,
1651
- class: "mix-top-menu__dropdown"
1652
- }, ha = { class: "mix-top-menu__dropdown-header" }, _a = { class: "mix-top-menu__dropdown-avatar" }, fa = { class: "mix-top-menu__dropdown-info" }, ga = { class: "mix-top-menu__dropdown-name" }, ya = { class: "mix-top-menu__dropdown-role" }, ka = { class: "mix-top-menu__dropdown-menu" }, wa = { class: "settings-drawer" }, ba = { class: "settings-section" }, xa = { class: "settings-layout-options" }, Ca = ["onClick"], $a = { class: "layout-option__preview" }, La = {
1653
- key: 0,
1654
- class: "layout-preview-sidebar"
1655
- }, Ma = {
1656
- key: 1,
1657
- class: "layout-preview-top"
1658
- }, Sa = {
1659
- key: 2,
1660
- class: "layout-preview-mix"
1661
- }, Na = { class: "layout-option__label" }, Ia = { class: "settings-section" }, Ua = { class: "settings-color-options" }, za = ["title", "onClick"], Ta = { class: "settings-section" }, Ea = { class: "settings-switch-list" }, Pa = { class: "settings-switch-item" }, Aa = { class: "settings-switch-item" }, Da = /* @__PURE__ */ ne({
1662
- __name: "MixTopMenu",
1663
- props: {
1664
- logoSrc: { default: "/vite.svg" }
1665
- },
1666
- setup(t) {
1667
- const r = t, u = be(), s = me(), o = de(), i = ue(), h = le(), v = Ue(), d = y(""), f = (l, p = "") => {
1668
- const R = [];
1669
- return l.forEach(($) => {
1670
- $.children && $.children.length > 0 ? R.push(...f($.children, $.menuName)) : R.push({ ...$, parentTitle: p, title: $.menuName, path: $.menuUrl });
1671
- }), R;
1672
- }, _ = b(() => N.value.trim() ? f(o.menuList).filter(
1673
- (p) => p.title.toLowerCase().includes(N.value.toLowerCase())
1674
- ) : []), g = b(() => {
1675
- const l = o.menuList.find((p) => p.menuUrl === d.value);
1676
- return (l == null ? void 0 : l.children) || [];
1677
- }), m = b(() => o.menuList.find((l) => !!(u.path === l.menuUrl || l.children && l.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 = (l) => {
1680
- d.value = l;
1681
- const p = o.menuList.find((R) => R.menuUrl === l);
1682
- if (p)
1683
- if (p.children && p.children.length > 0) {
1684
- const R = p.children[0].menuUrl;
1685
- u.path !== R && s.push(R);
1686
- } else
1687
- u.path !== l && s.push(l);
1688
- }, W = b(() => i.isDark ? "#1d1e1f" : "#fff"), V = b(() => i.isDark ? "#cfd3dc" : "#303133"), B = b(() => "#409eff"), H = y(!1), Z = y(null), Y = y(!1), q = y(!1), ee = y(!1), E = y(!1), N = y(""), A = y(null);
1689
- ye(() => u.path, () => {
1690
- j(), i.setMixSubMenus(g.value);
1691
- }), ye(() => o.menuList, (l) => {
1692
- l && l.length > 0 && (j(), i.setMixSubMenus(g.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
- ]), F = (l) => {
1797
- if (!l || l === "") return "";
1798
- if (l.startsWith("tineco-icon-")) {
1799
- const R = l.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
- }[R] || R;
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
- }[l] || l;
1833
- }, se = (l) => l ? l.charAt(0) : "", ie = (l) => G.has(l), pe = () => {
1834
- i.toggleTheme(), q.value = !1;
1835
- }, U = () => {
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
- E.value = !1, N.value = "";
1845
- }, ve = (l) => {
1846
- s.push(l), ae();
1847
- }, xe = () => {
1848
- q.value = !0;
1849
- }, Ce = (l) => {
1850
- ee.value = l;
1851
- const p = document.documentElement;
1852
- l ? 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 = (l) => {
1862
- i.setLayout(l), q.value = !1;
1863
- }, T = [
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 = (l) => {
1871
- i.setPrimaryColor(l), 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 = (l) => {
1879
- Z.value && !Z.value.contains(l.target) && ce(), A.value && !A.value.contains(l.target) && ae();
1880
- }, te = (l) => {
1881
- l.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
- }), (l, p) => {
1888
- var R;
1889
- return a(), c("div", Yo, [
1890
- e("div", Go, [
1891
- e("img", {
1892
- src: r.logoSrc,
1893
- alt: "Logo",
1894
- class: "mix-top-menu__logo-img"
1895
- }, null, 8, Xo),
1896
- e("span", Jo, 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": V.value,
1903
- "active-text-color": B.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(), O(n(Se), {
1909
- key: $.menuUrl,
1910
- index: $.menuUrl
1911
- }, {
1912
- default: M(() => [
1913
- e("span", Zo, [
1914
- $.menuName !== "首页" ? (a(), c("span", Qo, [
1915
- ie(F($.icon)) ? (a(), O(n(z), {
1916
- key: 0,
1917
- name: F($.icon),
1918
- size: 16
1919
- }, null, 8, ["name"])) : (a(), c("span", ea, x(se($.menuName)), 1))
1920
- ])) : P("", !0),
1921
- e("span", ta, 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", sa, [
1930
- e("div", {
1931
- class: "mix-top-menu__search",
1932
- ref_key: "searchRef",
1933
- ref: A
1934
- }, [
1935
- k(n(z), {
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] = ($) => E.value = !0)
1946
- }, null, 544), [
1947
- [We, N.value]
1948
- ]),
1949
- k(ke, { name: "search-dropdown" }, {
1950
- default: M(() => [
1951
- E.value && (_.value.length > 0 || N.value) ? (a(), c("div", oa, [
1952
- _.value.length > 0 ? (a(), c("div", aa, [
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", la, [
1959
- ie(F($.icon)) ? (a(), O(n(z), {
1960
- key: 0,
1961
- name: F($.icon),
1962
- size: 16
1963
- }, null, 8, ["name"])) : (a(), c("span", ra, x(se($.title)), 1))
1964
- ])) : P("", !0),
1965
- e("span", ia, x($.title), 1),
1966
- $.parentTitle ? (a(), c("span", ca, x($.parentTitle), 1)) : P("", !0)
1967
- ], 8, na))), 128))
1968
- ])) : (a(), c("div", ua, " 未找到匹配的菜单 "))
1969
- ])) : P("", !0)
1970
- ]),
1971
- _: 1
1972
- })
1973
- ], 512),
1974
- e("div", {
1975
- class: "mix-top-menu__action",
1976
- onClick: U,
1977
- title: Y.value ? "退出全屏" : "全屏"
1978
- }, [
1979
- k(n(z), {
1980
- name: Y.value ? "fullscreen-exit" : "fullscreen",
1981
- size: 16
1982
- }, null, 8, ["name"])
1983
- ], 8, da),
1984
- e("div", {
1985
- class: "mix-top-menu__action",
1986
- onClick: xe,
1987
- title: "换肤设置"
1988
- }, [
1989
- k(n(z), {
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(z), {
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: Ee(_e, ["stop"])
2012
- }, [
2013
- e("div", ma, [
2014
- e("span", null, x(((R = n(h).userName) == null ? void 0 : R.charAt(0)) || "U"), 1)
2015
- ]),
2016
- e("span", pa, 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", va, [
2026
- e("div", ha, [
2027
- e("div", _a, [
2028
- e("span", null, x((($ = n(h).userName) == null ? void 0 : $.charAt(0)) || "U"), 1)
2029
- ]),
2030
- e("div", fa, [
2031
- e("div", ga, x(n(h).userName), 1),
2032
- e("div", ya, 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", ka, [
2037
- e("div", {
2038
- class: "mix-top-menu__dropdown-item",
2039
- onClick: Q
2040
- }, [
2041
- k(n(z), {
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(z), {
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(z), {
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", wa, [
2085
- e("div", ba, [
2086
- p[11] || (p[11] = e("div", { class: "settings-title" }, "布局模式", -1)),
2087
- e("div", xa, [
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", $a, [
2094
- $.value === "sidebar" ? (a(), c("div", La, [...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", Ma, [...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", Sa, [...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", Na, x($.label), 1)
2114
- ], 10, Ca)), 64))
2115
- ])
2116
- ]),
2117
- e("div", Ia, [
2118
- p[12] || (p[12] = e("div", { class: "settings-title" }, "主题色", -1)),
2119
- e("div", Ua, [
2120
- (a(), c(K, null, X(T, ($) => 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(), O(n(z), {
2128
- key: 0,
2129
- name: "check",
2130
- size: 12,
2131
- color: "#fff"
2132
- })) : P("", !0)
2133
- ], 14, za)), 64))
2134
- ])
2135
- ]),
2136
- e("div", Ta, [
2137
- p[17] || (p[17] = e("div", { class: "settings-title" }, "功能设置", -1)),
2138
- e("div", Ea, [
2139
- e("div", Pa, [
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", Aa, [
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(Da, [["__scopeId", "data-v-d5fb6d2a"]]), Oa = {
2167
- key: 0,
2168
- class: "layout layout--sidebar"
2169
- }, Ba = { class: "layout__main" }, Ra = { class: "layout__header" }, Fa = { class: "layout__content" }, Ka = {
2170
- key: 1,
2171
- class: "layout layout--top"
2172
- }, ja = { class: "layout__top-menu" }, Wa = { class: "layout__main" }, qa = { class: "layout__content" }, Ha = {
2173
- key: 2,
2174
- class: "layout layout--mix"
2175
- }, Ya = { class: "layout__mix-top-menu" }, Ga = { class: "layout__mix-body" }, Xa = { class: "layout__content" }, Ja = /* @__PURE__ */ ne({
2176
- __name: "index",
2177
- props: {
2178
- logoSrc: { default: "/vite.svg" }
2179
- },
2180
- setup(t) {
2181
- const r = 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 (f, _) => {
2185
- const g = rt("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(tt, {
2193
- "menu-list": v.value,
2194
- "show-logo": !0,
2195
- "show-user": !0,
2196
- "logo-src": r.logoSrc
2197
- }, null, 8, ["menu-list", "logo-src"])
2198
- ], 4),
2199
- e("div", Ba, [
2200
- e("header", Ra, [
2201
- k(Os)
2202
- ]),
2203
- e("main", Fa, [
2204
- k(g)
2205
- ])
2206
- ])
2207
- ])) : P("", !0),
2208
- i.value === "top" ? (a(), c("div", Ka, [
2209
- e("div", ja, [
2210
- k(Ho, {
2211
- "logo-src": r.logoSrc
2212
- }, null, 8, ["logo-src"])
2213
- ]),
2214
- e("div", Wa, [
2215
- e("main", qa, [
2216
- k(g)
2217
- ])
2218
- ])
2219
- ])) : P("", !0),
2220
- i.value === "mix" ? (a(), c("div", Ha, [
2221
- e("div", Ya, [
2222
- k(Va, {
2223
- "logo-src": r.logoSrc
2224
- }, null, 8, ["logo-src"])
2225
- ]),
2226
- e("div", Ga, [
2227
- d.value ? (a(), c("aside", {
2228
- key: 0,
2229
- class: "layout__aside",
2230
- style: Ne({ width: o.value })
2231
- }, [
2232
- k(tt, {
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", Xa, [
2239
- k(g)
2240
- ])
2241
- ])
2242
- ])) : P("", !0)
2243
- ], 64);
2244
- };
2245
- }
2246
- }), ct = /* @__PURE__ */ re(Ja, [["__scopeId", "data-v-38f2fc61"]]), Za = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
2247
- __proto__: null,
2248
- default: ct
2249
- }, Symbol.toStringTag, { value: "Module" })), Qa = { class: "tabs-wrapper" }, en = { class: "tab-label" }, tn = ["onClick"], sn = /* @__PURE__ */ ne({
2250
- __name: "Tabs",
2251
- setup(t) {
2252
- const r = be(), u = me(), s = b(() => {
2253
- const v = [];
2254
- return r.matched.forEach((d) => {
2255
- var f;
2256
- (f = d.meta) != null && f.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(() => r.path), i = (v) => {
2264
- u.push(v);
2265
- }, h = (v) => {
2266
- const d = s.value.find((f) => f.path === v);
2267
- if (!(d != null && d.affix) && v === o.value) {
2268
- const f = s.value.findIndex((g) => g.path === v), _ = s.value[f - 1] || s.value[f + 1];
2269
- _ && u.push(_.path);
2270
- }
2271
- };
2272
- return (v, d) => (a(), c("div", Qa, [
2273
- k(n($t), {
2274
- modelValue: o.value,
2275
- "onUpdate:modelValue": d[0] || (d[0] = (f) => o.value = f),
2276
- type: "card",
2277
- onTabClick: i
2278
- }, {
2279
- default: M(() => [
2280
- (a(!0), c(K, null, X(s.value, (f) => (a(), O(n(Lt), {
2281
- key: f.path,
2282
- name: f.path,
2283
- label: f.title,
2284
- closable: !f.affix
2285
- }, {
2286
- label: M(() => [
2287
- e("span", en, [
2288
- he(x(f.title) + " ", 1),
2289
- f.affix ? P("", !0) : (a(), c("span", {
2290
- key: 0,
2291
- class: "tab-close",
2292
- onClick: Ee((_) => h(f.path), ["stop"])
2293
- }, " ✕ ", 8, tn))
2294
- ])
2295
- ]),
2296
- _: 2
2297
- }, 1032, ["name", "label", "closable"]))), 128))
2298
- ]),
2299
- _: 1
2300
- }, 8, ["modelValue"])
2301
- ]));
2302
- }
2303
- }), qn = /* @__PURE__ */ re(sn, [["__scopeId", "data-v-9156d8cd"]]), on = {}, an = { class: "footer" };
2304
- function nn(t, r) {
2305
- return a(), c("div", an, [...r[0] || (r[0] = [
2306
- e("span", null, "Copyright © 2024 Xto Demo. All Rights Reserved.", -1)
2307
- ])]);
2308
- }
2309
- const Hn = /* @__PURE__ */ re(on, [["render", nn], ["__scopeId", "data-v-4852826a"]]), ln = { class: "login-page" }, rn = { class: "login-form-section" }, cn = { class: "form-container" }, un = { class: "input-wrapper" }, dn = { class: "input-wrapper" }, mn = { class: "form-options" }, pn = { key: 0 }, vn = { key: 1 }, hn = /* @__PURE__ */ ne({
2310
- __name: "index",
2311
- setup(t) {
2312
- const r = 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 f;
2325
- try {
2326
- await ((f = v.value) == null ? void 0 : f.validate()), s.value = !0;
2327
- const _ = await vt({
2328
- appId: Fe(),
2329
- clientId: lt(),
2330
- uid: i.uid,
2331
- password: i.password,
2332
- code: !0
2333
- });
2334
- nt(_), Mt.success("登录成功");
2335
- const g = u.query.redirect;
2336
- g ? r.push(g) : r.push({ name: "Dashboard" });
2337
- } catch (_) {
2338
- console.error("登录失败:", _);
2339
- } finally {
2340
- s.value = !1;
2341
- }
2342
- };
2343
- return (f, _) => (a(), c("div", ln, [
2344
- _[10] || (_[10] = ze('<div class="login-brand" data-v-ef91e533><div class="brand-content" data-v-ef91e533><div class="brand-logo" data-v-ef91e533><div class="logo-icon" data-v-ef91e533><svg viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg" data-v-ef91e533><rect width="48" height="48" rx="12" fill="currentColor" data-v-ef91e533></rect><path d="M14 24L20 30L34 16" stroke="white" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" data-v-ef91e533></path></svg></div><span class="logo-text" data-v-ef91e533>XTO</span></div><div class="brand-slogan" data-v-ef91e533><h1 data-v-ef91e533>企业级后台管理解决方案</h1><p data-v-ef91e533>开箱即用的中后台前端/设计解决方案</p></div><div class="brand-features" data-v-ef91e533><div class="feature-item" data-v-ef91e533><div class="feature-icon" data-v-ef91e533><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" data-v-ef91e533><path d="M13 2L3 14h9l-1 8 10-12h-9l1-8z" data-v-ef91e533></path></svg></div><div class="feature-text" data-v-ef91e533><h4 data-v-ef91e533>高性能</h4><p data-v-ef91e533>极致的渲染性能与响应速度</p></div></div><div class="feature-item" data-v-ef91e533><div class="feature-icon" data-v-ef91e533><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" data-v-ef91e533><rect x="3" y="3" width="18" height="18" rx="2" data-v-ef91e533></rect><path d="M9 9h6M9 12h6M9 15h4" data-v-ef91e533></path></svg></div><div class="feature-text" data-v-ef91e533><h4 data-v-ef91e533>丰富组件</h4><p data-v-ef91e533>60+ 高质量业务组件</p></div></div><div class="feature-item" data-v-ef91e533><div class="feature-icon" data-v-ef91e533><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" data-v-ef91e533><circle cx="12" cy="12" r="10" data-v-ef91e533></circle><path d="M12 6v6l4 2" data-v-ef91e533></path></svg></div><div class="feature-text" data-v-ef91e533><h4 data-v-ef91e533>持续更新</h4><p data-v-ef91e533>活跃的社区与快速迭代</p></div></div></div><div class="brand-decoration" data-v-ef91e533><div class="decoration-line" data-v-ef91e533></div><div class="decoration-dots" data-v-ef91e533><span data-v-ef91e533></span><span data-v-ef91e533></span><span data-v-ef91e533></span></div></div></div><div class="brand-bg" data-v-ef91e533><div class="bg-grid" data-v-ef91e533></div><div class="bg-glow" data-v-ef91e533></div><div class="bg-pattern" data-v-ef91e533></div></div></div>', 1)),
2345
- e("div", rn, [
2346
- e("div", cn, [
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(Pe), { prop: "uid" }, {
2361
- default: M(() => [
2362
- e("div", un, [
2363
- _[3] || (_[3] = e("label", { class: "input-label" }, "用户名", -1)),
2364
- k(n(et), {
2365
- modelValue: i.uid,
2366
- "onUpdate:modelValue": _[0] || (_[0] = (g) => i.uid = g),
2367
- placeholder: "请输入用户名",
2368
- size: "large"
2369
- }, {
2370
- prefix: M(() => [
2371
- k(n(z), {
2372
- name: "user",
2373
- size: 18
2374
- })
2375
- ]),
2376
- _: 1
2377
- }, 8, ["modelValue"])
2378
- ])
2379
- ]),
2380
- _: 1
2381
- }),
2382
- k(n(Pe), { prop: "password" }, {
2383
- default: M(() => [
2384
- e("div", dn, [
2385
- _[4] || (_[4] = e("label", { class: "input-label" }, "密码", -1)),
2386
- k(n(et), {
2387
- modelValue: i.password,
2388
- "onUpdate:modelValue": _[1] || (_[1] = (g) => i.password = g),
2389
- type: "password",
2390
- placeholder: "请输入密码",
2391
- size: "large",
2392
- "show-password": "",
2393
- onKeyup: xt(d, ["enter"])
2394
- }, {
2395
- prefix: M(() => [
2396
- k(n(z), {
2397
- name: "lock",
2398
- size: 18
2399
- })
2400
- ]),
2401
- _: 1
2402
- }, 8, ["modelValue"])
2403
- ])
2404
- ]),
2405
- _: 1
2406
- }),
2407
- e("div", mn, [
2408
- k(n(Nt), {
2409
- modelValue: o.value,
2410
- "onUpdate:modelValue": _[2] || (_[2] = (g) => o.value = g)
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(Pe), 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", vn, "登录中...")) : (a(), c("span", pn, "登 录"))
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-ef91e533><p data-v-ef91e533>其他登录方式</p><div class="social-login" data-v-ef91e533><button class="social-btn" title="企业微信" data-v-ef91e533><svg viewBox="0 0 24 24" fill="currentColor" data-v-ef91e533><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-ef91e533></path></svg></button><button class="social-btn" title="钉钉" data-v-ef91e533><svg viewBox="0 0 24 24" fill="currentColor" data-v-ef91e533><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-ef91e533></path></svg></button><button class="social-btn" title="飞书" data-v-ef91e533><svg viewBox="0 0 24 24" fill="currentColor" data-v-ef91e533><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-ef91e533></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
- }), _n = /* @__PURE__ */ re(hn, [["__scopeId", "data-v-ef91e533"]]), fn = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
2451
- __proto__: null,
2452
- default: _n
2453
- }, Symbol.toStringTag, { value: "Module" })), gn = { class: "error-page" }, yn = { class: "error-container" }, kn = { class: "error-content" }, wn = { class: "error-actions" }, bn = /* @__PURE__ */ ne({
2454
- __name: "404",
2455
- setup(t) {
2456
- const r = me(), u = () => {
2457
- r.push("/");
2458
- };
2459
- return (s, o) => (a(), c("div", gn, [
2460
- e("div", yn, [
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", kn, [
2467
- o[5] || (o[5] = ze('<div class="error-code" data-v-1b083153><span class="code-digit" data-v-1b083153>4</span><span class="code-zero" data-v-1b083153><span class="zero-inner" data-v-1b083153>0</span></span><span class="code-digit" data-v-1b083153>4</span></div><div class="error-illustration" data-v-1b083153><svg viewBox="0 0 200 120" fill="none" xmlns="http://www.w3.org/2000/svg" data-v-1b083153><rect x="40" y="20" width="120" height="80" rx="8" fill="var(--color-fill)" stroke="var(--color-border)" stroke-width="2" data-v-1b083153></rect><rect x="50" y="30" width="100" height="60" rx="4" fill="var(--bg-color)" data-v-1b083153></rect><line x1="60" y1="45" x2="140" y2="45" stroke="var(--color-border-light)" stroke-width="2" data-v-1b083153></line><line x1="60" y1="55" x2="120" y2="55" stroke="var(--color-border-light)" stroke-width="2" data-v-1b083153></line><line x1="60" y1="65" x2="100" y2="65" stroke="var(--color-border-light)" stroke-width="2" data-v-1b083153></line><text x="100" y="75" text-anchor="middle" fill="var(--color-primary)" font-size="24" font-weight="600" data-v-1b083153>?</text><circle cx="150" cy="35" r="12" stroke="var(--color-primary)" stroke-width="2" fill="none" data-v-1b083153></circle><line x1="158" y1="43" x2="168" y2="53" stroke="var(--color-primary)" stroke-width="2" stroke-linecap="round" data-v-1b083153></line></svg></div><h1 class="error-title" data-v-1b083153>页面不存在</h1><p class="error-desc" data-v-1b083153>抱歉,您访问的页面不存在或已被删除</p>', 4)),
2468
- e("div", wn, [
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(r).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
- }), xn = /* @__PURE__ */ re(bn, [["__scopeId", "data-v-1b083153"]]), ut = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
2523
- __proto__: null,
2524
- default: xn
2525
- }, Symbol.toStringTag, { value: "Module" })), Cn = { class: "error-page" }, $n = { class: "error-container" }, Ln = { class: "error-content" }, Mn = { class: "error-actions" }, Sn = /* @__PURE__ */ ne({
2526
- __name: "403",
2527
- setup(t) {
2528
- const r = me(), u = () => {
2529
- r.push("/");
2530
- };
2531
- return (s, o) => (a(), c("div", Cn, [
2532
- e("div", $n, [
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", Ln, [
2539
- o[5] || (o[5] = ze('<div class="error-code" data-v-d167f981><span class="code-digit" data-v-d167f981>4</span><span class="code-zero warning" data-v-d167f981><span class="zero-inner" data-v-d167f981>0</span></span><span class="code-digit" data-v-d167f981>3</span></div><div class="error-illustration" data-v-d167f981><svg viewBox="0 0 200 120" fill="none" xmlns="http://www.w3.org/2000/svg" data-v-d167f981><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(--color-warning-lighter)" stroke="var(--color-warning)" stroke-width="2" data-v-d167f981></path><rect x="85" y="55" width="30" height="25" rx="4" fill="var(--color-warning)" data-v-d167f981></rect><path d="M92 55 V48 A8 8 0 0 1 108 48 V55" fill="none" stroke="var(--color-warning)" stroke-width="3" data-v-d167f981></path><circle cx="100" cy="67" r="6" fill="none" stroke="#fff" stroke-width="2" data-v-d167f981></circle><line x1="96" y1="63" x2="104" y2="71" stroke="#fff" stroke-width="2" data-v-d167f981></line></svg></div><h1 class="error-title" data-v-d167f981>无访问权限</h1><p class="error-desc" data-v-d167f981>抱歉,您没有权限访问此页面,请联系管理员获取权限</p>', 4)),
2540
- e("div", Mn, [
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(r).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
- }), Yn = /* @__PURE__ */ re(Sn, [["__scopeId", "data-v-d167f981"]]);
2595
- function Gn() {
2596
- const t = ue(), r = le(), u = Ue(), s = b(() => r.userName || ""), o = b(() => r.userInfo), i = b(() => t.appName), h = b(() => u.isLoggedIn), v = b(() => t.isDark), d = b(() => t.theme), f = 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: f,
2605
- layout: _,
2606
- toggleTheme: () => {
2607
- t.toggleTheme();
2608
- },
2609
- toggleCollapse: () => {
2610
- t.toggleCollapse();
2611
- }
2612
- };
2613
- }
2614
- function Xn() {
2615
- const t = le();
2616
- return {
2617
- isLoggedIn: b(() => t.isLoggedIn)
2618
- };
2619
- }
2620
- function Jn(t, r = {}) {
2621
- const { rules: u, onSubmit: s } = r, o = y(), i = qe({ ...t }), h = y(!1), v = y(!1), d = y(!1), f = () => {
2622
- m(), d.value = !1, v.value = !0;
2623
- }, _ = (D) => {
2624
- Object.assign(i, D), d.value = !0, v.value = !0;
2625
- }, g = () => {
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: f,
2641
- openEdit: _,
2642
- close: g,
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)), g();
2648
- } catch (W) {
2649
- console.error(W);
2650
- } finally {
2651
- h.value = !1;
2652
- }
2653
- }
2654
- };
2655
- }
2656
- function Zn(t) {
2657
- const { fetchData: r, defaultPageSize: u = 10 } = t, s = y(!1), o = y([]), i = y(0), h = y(1), v = y(u), d = qe({}), f = async () => {
2658
- s.value = !0;
2659
- try {
2660
- const V = {
2661
- ...d,
2662
- page: h.value,
2663
- pageSize: v.value
2664
- }, B = await r(V);
2665
- o.value = B.list, i.value = B.total;
2666
- } catch (V) {
2667
- console.error(V);
2668
- } finally {
2669
- s.value = !1;
2670
- }
2671
- }, _ = () => {
2672
- h.value = 1, f();
2673
- }, g = () => {
2674
- Object.keys(d).forEach((V) => {
2675
- d[V] = void 0;
2676
- }), h.value = 1, f();
2677
- }, m = (V) => {
2678
- h.value = V, f();
2679
- }, j = (V) => {
2680
- v.value = V, h.value = 1, f();
2681
- }, D = () => {
2682
- f();
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: f,
2697
- handleSearch: _,
2698
- handleReset: g,
2699
- handlePageChange: m,
2700
- handleSizeChange: j,
2701
- refresh: D
2702
- };
2703
- }
2704
- const Je = Ie("locale", () => {
2705
- const t = I.get("locale") || "zh-CN", r = It(t), u = y(t), s = Ut(), { t: o, messages: i, setLocale: h, mergeMessages: v } = zt(), 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), r.setLocale(m);
2717
- },
2718
- addMessages: (m) => {
2719
- v(m);
2720
- },
2721
- initLocale: () => {
2722
- h(t);
2723
- },
2724
- provider: r
2725
- };
2726
- }), Nn = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
2727
- __proto__: null,
2728
- useLocaleStore: Je
2729
- }, Symbol.toStringTag, { value: "Module" }));
2730
- function Qn() {
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 el() {
2750
- return Je().t;
2751
- }
2752
- function tl(t) {
2753
- const r = le(), u = de();
2754
- return r.isLoggedIn ? u.hasPermission(t) : !1;
2755
- }
2756
- function sl(t) {
2757
- return le().isLoggedIn;
2758
- }
2759
- function ol() {
2760
- return !0;
2761
- }
2762
- const dt = [
2763
- {
2764
- path: "/login",
2765
- name: "Login",
2766
- component: () => Promise.resolve().then(() => fn),
2767
- meta: {
2768
- title: "登录",
2769
- hidden: !0
2770
- }
2771
- }
2772
- ], mt = {
2773
- path: "/",
2774
- name: "Layout",
2775
- component: () => Promise.resolve().then(() => Za),
2776
- redirect: "/dashboard",
2777
- children: [
2778
- {
2779
- path: "/dashboard",
2780
- name: "Dashboard",
2781
- component: () => import("./index-DKHtW-p9.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-q2D-YeQK.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-DB43988M.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-BNLsx1WO.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(() => ut),
2824
- meta: {
2825
- title: "404",
2826
- hidden: !0
2827
- }
2828
- }
2829
- ]
2830
- }, al = [
2831
- {
2832
- path: "/dashboard",
2833
- name: "Dashboard",
2834
- component: () => import("./index-DKHtW-p9.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-q2D-YeQK.js"),
2855
- meta: {
2856
- title: "用户管理",
2857
- icon: "user",
2858
- keepAlive: !0
2859
- }
2860
- },
2861
- {
2862
- path: "role",
2863
- name: "SystemRole",
2864
- component: () => import("./index-DB43988M.js"),
2865
- meta: {
2866
- title: "角色管理",
2867
- icon: "role",
2868
- keepAlive: !0
2869
- }
2870
- },
2871
- {
2872
- path: "menu",
2873
- name: "SystemMenu",
2874
- component: () => import("./index-BNLsx1WO.js"),
2875
- meta: {
2876
- title: "菜单管理",
2877
- icon: "menu",
2878
- keepAlive: !0
2879
- }
2880
- }
2881
- ]
2882
- }
2883
- ], In = [
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
- ], pt = He({
2932
- history: Ye(),
2933
- routes: [...dt, mt],
2934
- scrollBehavior: () => ({ left: 0, top: 0 })
2935
- }), Un = ["/login"];
2936
- pt.beforeEach(async (t, r, u) => {
2937
- const s = ue();
2938
- if (s.initTheme(), ot())
2939
- if (t.path === "/login")
2940
- u({ path: "/" });
2941
- else {
2942
- const o = le();
2943
- o.isLoggedIn || (o.setUserInfo({
2944
- appId: Fe(),
2945
- userId: "1",
2946
- userName: "管理员",
2947
- departmentName: "技术部",
2948
- email: "admin@example.com",
2949
- mobilePhone: "13800138000",
2950
- positionName: "管理员",
2951
- avatar: ""
2952
- }), de().setMenuList(In)), t.name && t.meta.keepAlive && s.addCachedView(t.name), u();
2953
- }
2954
- else
2955
- Un.includes(t.path) ? u() : u("/login");
2956
- });
2957
- function nl() {
2958
- const t = He({
2959
- history: Ye(),
2960
- routes: [...dt, mt]
2961
- });
2962
- pt.matcher = t.matcher;
2963
- }
2964
- function ll(t, r = {}) {
2965
- const u = r.indexPath || "/dashboard", s = r.logoSrc || "/vite.svg", o = {
2966
- path: "/:pathMatch(.*)*",
2967
- name: "CatchAll",
2968
- component: () => Promise.resolve().then(() => ut),
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(ct, { logoSrc: s });
2980
- }
2981
- }),
2982
- redirect: u,
2983
- children: [...t, o]
2984
- };
2985
- }
2986
- function rl(t, r = {}) {
2987
- const u = r.base || ht();
2988
- return He({
2989
- history: Ye(u),
2990
- routes: t,
2991
- scrollBehavior: () => ({ left: 0, top: 0 })
2992
- });
2993
- }
2994
- const zn = ["login", "404", "403", "/login", "/404", "/403"];
2995
- function Tn(t, r) {
2996
- if (r.includes(t)) return !0;
2997
- const u = t.startsWith("/") ? t.slice(1) : t;
2998
- return r.includes(u);
2999
- }
3000
- function il(t, r = {}) {
3001
- const u = r.whiteList || zn;
3002
- t.beforeEach(async (s, o, i) => {
3003
- const h = ue(), v = le(), d = de(), f = h.loginPath || r.loginPath || "/login";
3004
- if (h.initTheme(), st())
3005
- if (s.path === f || s.name === "Login")
3006
- i({ name: "Dashboard" });
3007
- else if (v.isLoggedIn)
3008
- s.name && s.meta.keepAlive && h.addCachedView(s.name), i();
3009
- else
3010
- try {
3011
- if (r.fetchUserInfo) {
3012
- const g = await r.fetchUserInfo();
3013
- v.setUserInfo(g);
3014
- } else {
3015
- const g = await _t();
3016
- v.setUserInfo(g);
3017
- }
3018
- if (r.fetchMenu) {
3019
- const g = await r.fetchMenu();
3020
- d.setMenuList(g);
3021
- } else {
3022
- const g = await ft(r.appId);
3023
- d.setMenuList(g);
3024
- }
3025
- r.onLoginSuccess && r.onLoginSuccess(), s.name && s.meta.keepAlive && h.addCachedView(s.name), i({ ...s, replace: !0 });
3026
- } catch (g) {
3027
- console.error("获取用户信息失败:", g), v.clearUserInfo(), d.clearMenu(), at(), i({ name: "Login", query: { redirect: s.fullPath } });
3028
- }
3029
- else
3030
- Tn(s.path, u) || s.name === "Login" || s.name === "NotFound" || s.name === "Forbidden" ? i() : i({ name: "Login", query: { redirect: s.fullPath } });
3031
- }), t.afterEach(() => {
3032
- });
3033
- }
3034
- var En = /* @__PURE__ */ ((t) => (t[t.ENABLED = 1] = "ENABLED", t[t.DISABLED = 0] = "DISABLED", t))(En || {}), Pn = /* @__PURE__ */ ((t) => (t[t.UNKNOWN = 0] = "UNKNOWN", t[t.MALE = 1] = "MALE", t[t.FEMALE = 2] = "FEMALE", t))(Pn || {}), An = /* @__PURE__ */ ((t) => (t[t.DIRECTORY = 0] = "DIRECTORY", t[t.MENU = 1] = "MENU", t[t.BUTTON = 2] = "BUTTON", t))(An || {});
3035
- const cl = {
3036
- 1: "启用",
3037
- 0: "禁用"
3038
- }, ul = {
3039
- 0: "未知",
3040
- 1: "男",
3041
- 2: "女"
3042
- }, dl = {
3043
- 0: "目录",
3044
- 1: "菜单",
3045
- 2: "按钮"
3046
- }, ml = [
3047
- {
3048
- label: "启用",
3049
- value: 1
3050
- /* ENABLED */
3051
- },
3052
- {
3053
- label: "禁用",
3054
- value: 0
3055
- /* DISABLED */
3056
- }
3057
- ], pl = [
3058
- {
3059
- label: "未知",
3060
- value: 0
3061
- /* UNKNOWN */
3062
- },
3063
- {
3064
- label: "男",
3065
- value: 1
3066
- /* MALE */
3067
- },
3068
- {
3069
- label: "女",
3070
- value: 2
3071
- /* FEMALE */
3072
- }
3073
- ], vl = [
3074
- {
3075
- label: "目录",
3076
- value: 0
3077
- /* DIRECTORY */
3078
- },
3079
- {
3080
- label: "菜单",
3081
- value: 1
3082
- /* MENU */
3083
- },
3084
- {
3085
- label: "按钮",
3086
- value: 2
3087
- /* BUTTON */
3088
- }
3089
- ], hl = {
3090
- mounted(t, r) {
3091
- var h, v;
3092
- const u = le(), s = de();
3093
- if (!u.isLoggedIn) {
3094
- (h = t.parentNode) == null || h.removeChild(t);
3095
- return;
3096
- }
3097
- const o = r.value, i = Array.isArray(o) ? o : [o];
3098
- s.hasPermission(i) || (v = t.parentNode) == null || v.removeChild(t);
3099
- }
3100
- };
3101
- async function _l(t) {
3102
- await gt(t.basePath);
3103
- const r = Qe();
3104
- return r && yt(r), kt({
3105
- appId: t.appId,
3106
- clientId: t.clientId,
3107
- apiBaseUrl: r || t.apiBaseUrl,
3108
- basePath: t.basePath
3109
- }), t.basePath && wt(t.basePath), Promise.resolve().then(() => Tt).then(({ useAppStore: u }) => {
3110
- const s = u();
3111
- t.appName && s.setAppName(t.appName), t.indexPath && s.setIndexPath(t.indexPath), t.loginPath && s.setLoginPath(t.loginPath);
3112
- }), t.locale && Promise.resolve().then(() => Nn).then(({ useLocaleStore: u }) => {
3113
- u().changeLocale(t.locale);
3114
- }), {
3115
- config: {
3116
- appName: t.appName || "XTO App",
3117
- appId: Fe(),
3118
- clientId: lt(),
3119
- apiBaseUrl: Qe(),
3120
- basePath: t.basePath || "/",
3121
- indexPath: t.indexPath || "/dashboard",
3122
- loginPath: t.loginPath || "/login",
3123
- locale: t.locale || "zh-CN"
3124
- }
3125
- };
3126
- }
3127
- export {
3128
- ue as A,
3129
- Xn as B,
3130
- Ue as C,
3131
- Jn as D,
3132
- Qn as E,
3133
- Hn as F,
3134
- Pn as G,
3135
- Os as H,
3136
- Je as I,
3137
- de as J,
3138
- Zn as K,
3139
- ct as L,
3140
- An as M,
3141
- le as N,
3142
- En as S,
3143
- qn as T,
3144
- re as _,
3145
- ml as a,
3146
- vl as b,
3147
- Yn as c,
3148
- pl as d,
3149
- ul as e,
3150
- dl as f,
3151
- xn as g,
3152
- tt as h,
3153
- _n as i,
3154
- cl as j,
3155
- ll as k,
3156
- rl as l,
3157
- el as m,
3158
- _l as n,
3159
- al as o,
3160
- tl as p,
3161
- sl as q,
3162
- ol as r,
3163
- mt as s,
3164
- In as t,
3165
- hl as u,
3166
- nl as v,
3167
- pt as w,
3168
- il as x,
3169
- dt as y,
3170
- Gn as z
3171
- };