xto-fronted 0.9.3 → 0.9.5

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