mamba-layout 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/dist/index.css +1 -0
  2. package/dist/index.js.js +2560 -0
  3. package/dist/layout/hooks/useTheme.d.ts +6 -14
  4. package/dist/layout.es.js +5734 -5735
  5. package/dist/layout.global.js +30 -30
  6. package/package.json +1 -1
  7. package/dist/_virtual/_plugin-vue_export-helper.js +0 -9
  8. package/dist/assets/logo.png.js +0 -4
  9. package/dist/components/UserAvatar/index.js +0 -5
  10. package/dist/components/UserAvatar/src/UserAvatar.css +0 -1
  11. package/dist/components/UserAvatar/src/UserAvatar.vue.js +0 -7
  12. package/dist/components/UserAvatar/src/UserAvatar.vue2.js +0 -61
  13. package/dist/components/index.js +0 -10
  14. package/dist/index.js +0 -35
  15. package/dist/layout/BaseLayout.css +0 -1
  16. package/dist/layout/BaseLayout.vue.js +0 -7
  17. package/dist/layout/BaseLayout.vue2.js +0 -111
  18. package/dist/layout/components/AppSelect.css +0 -1
  19. package/dist/layout/components/AppSelect.vue.js +0 -7
  20. package/dist/layout/components/AppSelect.vue2.js +0 -69
  21. package/dist/layout/components/AsideBar.css +0 -1
  22. package/dist/layout/components/AsideBar.vue.js +0 -7
  23. package/dist/layout/components/AsideBar.vue2.js +0 -49
  24. package/dist/layout/components/AsideSubMenuItem.vue.js +0 -84
  25. package/dist/layout/components/AsideSubMenuItem.vue2.js +0 -4
  26. package/dist/layout/components/AsideSubMenus.vue.js +0 -36
  27. package/dist/layout/components/AsideSubMenus.vue2.js +0 -4
  28. package/dist/layout/components/HeaderBar.css +0 -1
  29. package/dist/layout/components/HeaderBar.vue.js +0 -7
  30. package/dist/layout/components/HeaderBar.vue2.js +0 -55
  31. package/dist/layout/components/LanguageSelect.css +0 -1
  32. package/dist/layout/components/LanguageSelect.vue.js +0 -8
  33. package/dist/layout/components/LanguageSelect.vue2.js +0 -100
  34. package/dist/layout/components/LanguageSelect2.css +0 -1
  35. package/dist/layout/components/LayoutBreadcrumb.css +0 -1
  36. package/dist/layout/components/LayoutBreadcrumb.vue.js +0 -7
  37. package/dist/layout/components/LayoutBreadcrumb.vue2.js +0 -189
  38. package/dist/layout/components/MenuItemIcon.css +0 -1
  39. package/dist/layout/components/MenuItemIcon.vue.js +0 -7
  40. package/dist/layout/components/MenuItemIcon.vue2.js +0 -23
  41. package/dist/layout/components/NavIconBtn.css +0 -1
  42. package/dist/layout/components/NavIconBtn.vue.js +0 -7
  43. package/dist/layout/components/NavIconBtn.vue2.js +0 -23
  44. package/dist/layout/components/SHeaderRight.css +0 -1
  45. package/dist/layout/components/SHeaderRight.vue.js +0 -7
  46. package/dist/layout/components/SHeaderRight.vue2.js +0 -68
  47. package/dist/layout/components/ThemeToggle.css +0 -1
  48. package/dist/layout/components/ThemeToggle.vue.js +0 -7
  49. package/dist/layout/components/ThemeToggle.vue2.js +0 -30
  50. package/dist/layout/components/TimezoneSelect.css +0 -1
  51. package/dist/layout/components/TimezoneSelect.vue.js +0 -8
  52. package/dist/layout/components/TimezoneSelect.vue2.js +0 -78
  53. package/dist/layout/components/TimezoneSelect2.css +0 -1
  54. package/dist/layout/components/UserInfo.css +0 -1
  55. package/dist/layout/components/UserInfo.vue.js +0 -8
  56. package/dist/layout/components/UserInfo.vue2.js +0 -111
  57. package/dist/layout/components/UserInfo2.css +0 -1
  58. package/dist/layout/components/index.js +0 -8
  59. package/dist/layout/components/mobile/AppSelectMobile.vue.js +0 -60
  60. package/dist/layout/components/mobile/AppSelectMobile.vue2.js +0 -4
  61. package/dist/layout/components/mobile/AsideBarMobile.css +0 -1
  62. package/dist/layout/components/mobile/AsideBarMobile.vue.js +0 -7
  63. package/dist/layout/components/mobile/AsideBarMobile.vue2.js +0 -49
  64. package/dist/layout/components/mobile/AsideUserMobile.css +0 -1
  65. package/dist/layout/components/mobile/AsideUserMobile.vue.js +0 -7
  66. package/dist/layout/components/mobile/AsideUserMobile.vue2.js +0 -56
  67. package/dist/layout/components/mobile/AsideUserMobilePopover.css +0 -1
  68. package/dist/layout/components/mobile/AsideUserMobilePopover.vue.js +0 -7
  69. package/dist/layout/components/mobile/AsideUserMobilePopover.vue2.js +0 -52
  70. package/dist/layout/components/mobile/HeaderRightMobile.css +0 -1
  71. package/dist/layout/components/mobile/HeaderRightMobile.vue.js +0 -7
  72. package/dist/layout/components/mobile/HeaderRightMobile.vue2.js +0 -46
  73. package/dist/layout/components/mobile/MobileMenuToggle.css +0 -1
  74. package/dist/layout/components/mobile/MobileMenuToggle.vue.js +0 -7
  75. package/dist/layout/components/mobile/MobileMenuToggle.vue2.js +0 -33
  76. package/dist/layout/hooks/index.js +0 -21
  77. package/dist/layout/hooks/useApp.js +0 -20
  78. package/dist/layout/hooks/useSetting.js +0 -24
  79. package/dist/layout/hooks/useState.js +0 -100
  80. package/dist/layout/hooks/useTheme.js +0 -48
  81. package/dist/layout/utils/index.js +0 -54
  82. package/dist/locales/en/account.js +0 -12
  83. package/dist/locales/en/admin.js +0 -209
  84. package/dist/locales/en/common.js +0 -42
  85. package/dist/locales/en/components.js +0 -39
  86. package/dist/locales/en/constant.js +0 -153
  87. package/dist/locales/en/filterBox.js +0 -13
  88. package/dist/locales/en/index.js +0 -22
  89. package/dist/locales/en/instanceForm.js +0 -19
  90. package/dist/locales/en/password.js +0 -20
  91. package/dist/locales/index.js +0 -12
  92. package/dist/locales/messages.js +0 -9
  93. package/dist/locales/zh-cn/account.js +0 -12
  94. package/dist/locales/zh-cn/admin.js +0 -207
  95. package/dist/locales/zh-cn/common.js +0 -42
  96. package/dist/locales/zh-cn/components.js +0 -39
  97. package/dist/locales/zh-cn/constant.js +0 -153
  98. package/dist/locales/zh-cn/filterBox.js +0 -13
  99. package/dist/locales/zh-cn/index.js +0 -22
  100. package/dist/locales/zh-cn/instanceForm.js +0 -19
  101. package/dist/locales/zh-cn/password.js +0 -20
  102. package/dist/utils/createContext.js +0 -14
  103. package/dist/utils/repoUtils.js +0 -160
@@ -0,0 +1,2560 @@
1
+ import { inject as Ve, provide as $e, ref as R, readonly as et, computed as T, unref as m, onActivated as tt, onMounted as Le, onUnmounted as xe, watch as le, defineComponent as N, openBlock as l, createElementBlock as v, normalizeClass as F, resolveComponent as E, Fragment as K, createBlock as I, resolveDynamicComponent as he, mergeProps as Ee, withCtx as w, createCommentVNode as x, createElementVNode as d, toDisplayString as M, renderList as H, withDirectives as nt, vShow as ot, createVNode as _, renderSlot as V, watchEffect as Me, Transition as Se } from "vue";
2
+ import { Fold as De, ArrowDown as ge, Moon as at, Sunny as st, Expand as rt, User as lt, ArrowLeft as it, ArrowRight as pe, Clock as ct } from "@element-plus/icons-vue";
3
+ import { useRoute as Ne, useRouter as Be } from "vue-router";
4
+ import { createI18n as ut } from "vue-i18n";
5
+ function dt(o, e) {
6
+ const t = `${o}Context`, n = Symbol(t);
7
+ return [(r) => {
8
+ const c = Ve(n, r);
9
+ if (c || c === null) return c;
10
+ throw new Error(
11
+ `Injection \`${n.toString()}\` not found. Component must be used within ${Array.isArray(o) ? `one of the following components: ${o.join(", ")}` : `\`${o}\``}`
12
+ );
13
+ }, (r) => ($e(n, r), r)];
14
+ }
15
+ const pt = 3600 * 24 * 7, fe = "UTC", Ue = "timezone", mt = [
16
+ "UTC",
17
+ "Asia/Shanghai",
18
+ "Asia/Hong_Kong",
19
+ "Asia/Singapore",
20
+ "Asia/Tokyo",
21
+ "Europe/London",
22
+ "Europe/Berlin",
23
+ "America/New_York",
24
+ "America/Los_Angeles"
25
+ ], Pe = /* @__PURE__ */ new Map(), de = () => {
26
+ try {
27
+ return globalThis.localStorage;
28
+ } catch {
29
+ return;
30
+ }
31
+ }, te = {
32
+ get(o, e = null) {
33
+ const t = de(), n = t == null ? void 0 : t.getItem(o.toUpperCase());
34
+ if (!n) return e;
35
+ try {
36
+ const a = JSON.parse(n);
37
+ if (a.expire === null || a.expire >= Date.now())
38
+ return a.value;
39
+ t == null || t.removeItem(o.toUpperCase());
40
+ } catch {
41
+ return e;
42
+ }
43
+ return e;
44
+ },
45
+ set(o, e, t = pt) {
46
+ const n = de(), a = {
47
+ value: e,
48
+ expire: t === null ? null : Date.now() + t * 1e3
49
+ };
50
+ n == null || n.setItem(o.toUpperCase(), JSON.stringify(a));
51
+ },
52
+ clear() {
53
+ var o;
54
+ (o = de()) == null || o.clear();
55
+ }
56
+ }, ht = (o) => typeof o == "object" && o !== null, Te = (o) => {
57
+ if (!ht(o) || Object.prototype.toString.call(o) !== "[object Object]") return !1;
58
+ const e = Object.getPrototypeOf(o);
59
+ return e === null || e === Object.prototype;
60
+ };
61
+ function Re(o, e) {
62
+ if (!Te(o)) return e;
63
+ if (!Te(e)) return o;
64
+ const t = o;
65
+ return Object.keys(e).concat(Object.getOwnPropertySymbols(e)).forEach((n) => {
66
+ t[n] = Re(
67
+ t[n],
68
+ e[n]
69
+ );
70
+ }), t;
71
+ }
72
+ function Ke() {
73
+ const o = typeof navigator > "u" ? "en-US" : navigator.language;
74
+ return String(te.get("locale", o)).includes("zh") ? "zh-CN" : "en-US";
75
+ }
76
+ const ke = (o, e, t) => {
77
+ var n;
78
+ return ((n = e == null ? void 0 : e[t]) == null ? void 0 : n[o]) || "";
79
+ }, ae = (o, e, t = "") => {
80
+ const n = o;
81
+ return ke(e, n, Ke()) || t || ke(e, n, "en-US");
82
+ }, ie = (o = "") => o.replace(/【.*】/, ""), Je = (o, e, t) => {
83
+ var n, a, s, r, c;
84
+ for (const h of e) {
85
+ const i = ((n = h.path) == null ? void 0 : n.replace(/\/:(\w+)/g, "/([^/]+)")) || "", g = new RegExp(`^${i}$`);
86
+ if (((a = h.path) == null ? void 0 : a.toLowerCase()) === o || g.test(o))
87
+ return ((s = h.meta) == null ? void 0 : s.visible) === "0" && (t == null ? void 0 : t.path) || "";
88
+ if ((r = h.children) != null && r.length) {
89
+ const f = Je(
90
+ o,
91
+ h.children,
92
+ ((c = h.meta) == null ? void 0 : c.visible) === "1" ? h : t
93
+ );
94
+ if (f) return f;
95
+ }
96
+ }
97
+ return "";
98
+ }, gt = (o, e) => {
99
+ const t = o.resolve(e);
100
+ if (!(t != null && t.name)) return !1;
101
+ const n = String(t.name).split("-").filter((s) => !!s && s !== "index"), a = t.path.split("-").join("/").split("/").filter(Boolean);
102
+ return n.length === a.length && n.every((s, r) => s === a[r]);
103
+ }, se = (o) => typeof o == "string" && Oe(o) ? o : "", Oe = (o) => {
104
+ try {
105
+ return new Intl.DateTimeFormat("en-US", { timeZone: o }).format(/* @__PURE__ */ new Date()), !0;
106
+ } catch {
107
+ return !1;
108
+ }
109
+ }, Fe = () => se(Intl.DateTimeFormat().resolvedOptions().timeZone) || fe, ve = R(
110
+ se(te.get(Ue)) || Fe()
111
+ ), ft = () => et(ve);
112
+ function vt(o) {
113
+ const e = se(o);
114
+ e && (ve.value = e, te.set(Ue, e, null));
115
+ }
116
+ const yt = (o) => {
117
+ const e = se(o) || fe, t = Pe.get(e);
118
+ if (t) return t;
119
+ const n = new Intl.DateTimeFormat("en-US", {
120
+ timeZone: e,
121
+ year: "numeric",
122
+ month: "2-digit",
123
+ day: "2-digit",
124
+ hour: "2-digit",
125
+ minute: "2-digit",
126
+ second: "2-digit",
127
+ hourCycle: "h23"
128
+ });
129
+ return Pe.set(e, n), n;
130
+ }, bt = (o, e) => yt(e).formatToParts(o).reduce((n, a) => (a.type !== "literal" && (n[a.type] = Number(a.value)), n), {}), At = (o, e = /* @__PURE__ */ new Date()) => {
131
+ const t = se(o) || fe, n = bt(e, t), a = Date.UTC(
132
+ n.year || 0,
133
+ (n.month || 1) - 1,
134
+ n.day || 1,
135
+ n.hour || 0,
136
+ n.minute || 0,
137
+ n.second || 0,
138
+ e.getMilliseconds()
139
+ );
140
+ return Math.round((a - e.getTime()) / 6e4);
141
+ }, He = (o, e = /* @__PURE__ */ new Date()) => {
142
+ const t = At(o, e), n = t >= 0 ? "+" : "-", a = Math.abs(t), s = Math.floor(a / 60), r = a % 60;
143
+ return `UTC${n}${String(s).padStart(2, "0")}:${String(
144
+ r
145
+ ).padStart(2, "0")}`;
146
+ }, _t = (o, e = /* @__PURE__ */ new Date()) => `${o} (${He(o, e)})`, Ct = (o = /* @__PURE__ */ new Date()) => {
147
+ const e = new Set(
148
+ [Fe(), ...mt, ve.value].filter(
149
+ Oe
150
+ )
151
+ );
152
+ return Array.from(e).map((t) => {
153
+ const n = He(t, o);
154
+ return {
155
+ value: t,
156
+ label: `${t} (${n})`,
157
+ offset: n
158
+ };
159
+ });
160
+ }, oe = R("light");
161
+ function Qe() {
162
+ const o = "theme", e = "(prefers-color-scheme: dark)", t = R(!1);
163
+ let n = !1;
164
+ const a = (b) => b === "dark" || b === "light" ? b : null, s = () => typeof window > "u" || typeof window.matchMedia != "function" ? "light" : window.matchMedia(e).matches ? "dark" : "light", r = (b) => {
165
+ const P = a(te.get(o, null));
166
+ return P ? (t.value = !0, P) : b || s();
167
+ }, c = (b) => {
168
+ typeof document > "u" || document.documentElement.classList.toggle("dark", b === "dark");
169
+ }, h = (b) => {
170
+ const P = r(b);
171
+ return oe.value = P, c(P), n = !0, P;
172
+ }, i = (b, P) => {
173
+ oe.value = b, c(b), (P == null ? void 0 : P.persist) !== !1 && (te.set(o, b, null), t.value = !0);
174
+ }, g = () => {
175
+ i(oe.value === "dark" ? "light" : "dark");
176
+ }, p = (b) => {
177
+ if (!n) {
178
+ h(b);
179
+ return;
180
+ }
181
+ !t.value && b && i(b, { persist: !1 });
182
+ }, f = T(() => oe.value === "dark");
183
+ return {
184
+ theme: oe,
185
+ isDark: f,
186
+ initTheme: h,
187
+ setTheme: i,
188
+ toggleTheme: g,
189
+ syncThemeFromSetting: p
190
+ };
191
+ }
192
+ const wt = () => typeof location > "u" ? "" : location.href, je = (o) => (o == null ? void 0 : o.loginPath) || `/login?redirect=${encodeURIComponent(wt())}`, ce = (o) => {
193
+ typeof location > "u" || (location.href = je(o));
194
+ }, St = (o) => (o == null ? void 0 : o.userCenterPath) || "/usercenter/home", Pt = (o) => {
195
+ var s;
196
+ const e = o.themeColor, t = {};
197
+ if (e)
198
+ for (const r in e) {
199
+ if (!e[r]) continue;
200
+ const c = "--layout-" + r.replace(/([A-Z])/g, "-$1").toLocaleLowerCase();
201
+ t[c] = e[r], r == "colorPrimary" && Tt(e[r]);
202
+ }
203
+ let n = document.getElementById("layout-style");
204
+ n && ((s = n.parentNode) == null || s.removeChild(n)), n = document.createElement("style"), n.id = "layout-style", document.head.appendChild(n);
205
+ const a = Object.keys(t).map((r) => r + ":" + t[r]).join(";");
206
+ n.innerHTML = `html:root{${a}}`;
207
+ };
208
+ function Tt(o) {
209
+ var a;
210
+ let e = document.getElementById("primary-style");
211
+ if (o == "theme-default" && e) {
212
+ (a = e.parentNode) == null || a.removeChild(e);
213
+ return;
214
+ }
215
+ const t = kt(o);
216
+ e || (e = document.createElement("style"), e.id = "primary-style", document.head.appendChild(e));
217
+ const n = Object.keys(t).map((s) => s + ":" + t[s]).join(";");
218
+ e.innerHTML = `html:root{${n}}`;
219
+ }
220
+ function kt(o) {
221
+ var h;
222
+ const e = ((h = o.match(/\d+/g)) == null ? void 0 : h.map(Number)) || [], [t, n, a] = e, s = `rgb(${t}, ${n}, ${a})`, r = (i) => {
223
+ const g = i / 100, p = Math.min(255, t + (255 - t) * g), f = Math.min(255, n + (255 - n) * g), b = Math.min(255, a + (255 - a) * g);
224
+ return `rgb(${p.toFixed(1)}, ${f.toFixed(1)}, ${b.toFixed(1)})`;
225
+ }, c = (i) => {
226
+ const g = 1 - i / 100;
227
+ return `rgb(${Math.round(t * g)} ${Math.round(n * g)} ${Math.round(a * g)})`;
228
+ };
229
+ return {
230
+ "--el-color-primary": s,
231
+ "--el-color-primary-light-3": r(30),
232
+ "--el-color-primary-light-5": r(50),
233
+ "--el-color-primary-light-7": r(70),
234
+ "--el-color-primary-light-8": r(80),
235
+ "--el-color-primary-light-9": r(90),
236
+ "--el-color-primary-dark-2": c(20)
237
+ };
238
+ }
239
+ const me = R({
240
+ menus: [],
241
+ layout: "classic",
242
+ title: "",
243
+ logo: "",
244
+ tabs: "tab",
245
+ pageType: "common"
246
+ });
247
+ function Q() {
248
+ return me;
249
+ }
250
+ const It = (o) => {
251
+ const e = Q(), t = o && m(o) || {};
252
+ if (!(e != null && e.value)) return t;
253
+ me.value = Re(e.value, t);
254
+ const { syncThemeFromSetting: n } = Qe();
255
+ n(), Pt(me.value);
256
+ }, Lt = 1024, [W, xt] = dt("LayoutRoot");
257
+ function Et() {
258
+ const o = Ne(), e = R([]), t = R(), n = R(), a = R(""), s = R(""), r = R(""), c = Q(), h = R(!0), i = R(!1), g = R(), p = () => {
259
+ var k;
260
+ return ((k = c.value.menus) == null ? void 0 : k.filter((U) => {
261
+ var J;
262
+ return ((J = U.meta) == null ? void 0 : J.appId) == s.value;
263
+ })) || [];
264
+ }, f = (k, U, J = 0, z) => {
265
+ var u, y, C, S;
266
+ const Z = z ? [...z] : [], q = [], X = [];
267
+ for (const A in k) {
268
+ [...Z], k[A];
269
+ const D = ((u = o.meta) == null ? void 0 : u.parent) || o.path, O = ((y = k[A].path) == null ? void 0 : y.replace(/\/:(\w+)/g, "/([^/]+)")) || "", Y = new RegExp(`^${O}$`);
270
+ D == k[A].path ? q.push({ index: A, item: k[A] }) : Y.test(D) && X.push({ index: A, item: k[A] });
271
+ }
272
+ const j = q.length > 0 ? q : X;
273
+ if (j.length > 0) {
274
+ const A = j[0], D = [...Z];
275
+ D[J] = A.item, t.value = {
276
+ ...A.item,
277
+ paths: D.slice(0, J + 1)
278
+ }, s.value = ((C = A.item.meta) == null ? void 0 : C.appId) || "", n.value = U;
279
+ }
280
+ for (const A in k)
281
+ if (k[A].children && ((S = k[A].children) != null && S.length)) {
282
+ const D = k[A].children || [], O = [...Z];
283
+ O[J] = k[A], f(D, k[A], J + 1, O);
284
+ }
285
+ r.value = o.meta.parentPath || Je(
286
+ o.path.toLowerCase(),
287
+ c.value.menus || []
288
+ ) || o.path;
289
+ }, b = () => {
290
+ var z, Z, q, X, j, u, y, C, S, A;
291
+ f(c.value.menus || []), s.value || (s.value = ((q = (Z = (z = c.value.menus) == null ? void 0 : z.find(
292
+ (D) => {
293
+ var O;
294
+ return (O = D.path) == null ? void 0 : O.startsWith(a.value);
295
+ }
296
+ )) == null ? void 0 : Z.meta) == null ? void 0 : q.appId) || "");
297
+ const k = ((X = t.value) == null ? void 0 : X.paths) || [], U = ie(
298
+ ae(((u = (j = t.value) == null ? void 0 : j.meta) == null ? void 0 : u.translations) || {}, "name")
299
+ ), J = ((y = t.value) == null ? void 0 : y.path) == ((C = k[1]) == null ? void 0 : C.path) ? "" : ie(ae(((A = (S = k[1]) == null ? void 0 : S.meta) == null ? void 0 : A.translations) || {}, "name"));
300
+ document.title = U + (J ? ` - ${J}` : "");
301
+ }, P = () => {
302
+ a.value = "/" + (o.path.split("/").filter(Boolean).shift() || ""), b(), e.value = p();
303
+ };
304
+ P(), tt(() => {
305
+ P();
306
+ });
307
+ const L = () => {
308
+ const k = window.innerWidth < Lt;
309
+ i.value = k, h.value = !k;
310
+ };
311
+ return L(), Le(() => {
312
+ window.addEventListener("resize", L);
313
+ }), xe(() => {
314
+ window.removeEventListener("resize", L);
315
+ }), le(
316
+ () => a.value,
317
+ () => void (e.value = p())
318
+ ), le(
319
+ () => [o.path, c.value.menus],
320
+ () => {
321
+ r.value = "", t.value = void 0, a.value = "/" + (o.path.split("/").filter(Boolean).shift() || ""), b(), e.value = p(), i.value && (h.value = !1);
322
+ }
323
+ ), xt({
324
+ menus: e,
325
+ currentEndRoute: t,
326
+ currentTabPath: a,
327
+ currentAppId: s,
328
+ defaultParentActive: r,
329
+ sideOpen: h,
330
+ isMobile: i,
331
+ getMenus: p,
332
+ currentEndParentRoute: n
333
+ }), {
334
+ menus: e,
335
+ currentEndRoute: t,
336
+ currentTabPath: a,
337
+ currentAppId: s,
338
+ defaultParentActive: r,
339
+ sideOpen: h,
340
+ isMobile: i,
341
+ getMenus: p,
342
+ currentEndParentRoute: n,
343
+ leftScrollRef: g
344
+ };
345
+ }
346
+ const Mt = { class: "menu-item-icon" }, Dt = ["innerHTML"], Nt = /* @__PURE__ */ N({
347
+ __name: "MenuItemIcon",
348
+ props: {
349
+ icon: { default: "metisicon-yingyong" }
350
+ },
351
+ setup(o) {
352
+ const e = o, t = T(() => e.icon || "metisicon-yingyong"), n = /^\s*<svg[\s>]/i, a = /\son[a-z]+\s*=\s*("[^"]*"|'[^']*'|[^\s>]+)/gi, s = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, r = /\s(?:href|xlink:href)\s*=\s*("\s*javascript:[^"]*"|'\s*javascript:[^']*')/gi, c = (g) => !!g && n.test(g), h = (g) => !g || !c(g) ? "" : g.replace(s, "").replace(a, "").replace(r, ""), i = T(() => h(t.value));
353
+ return (g, p) => (l(), v("div", Mt, [
354
+ c(t.value) ? (l(), v("span", {
355
+ key: 0,
356
+ class: "menu-item-icon__svg",
357
+ innerHTML: i.value
358
+ }, null, 8, Dt)) : (l(), v("i", {
359
+ key: 1,
360
+ class: F(t.value)
361
+ }, null, 2))
362
+ ]));
363
+ }
364
+ }), B = (o, e) => {
365
+ const t = o.__vccOpts || o;
366
+ for (const [n, a] of e)
367
+ t[n] = a;
368
+ return t;
369
+ }, ze = /* @__PURE__ */ B(Nt, [["__scopeId", "data-v-ed060390"]]), Bt = { key: 0 }, Ut = /* @__PURE__ */ N({
370
+ __name: "AsideSubMenuItem",
371
+ props: {
372
+ menu: {
373
+ type: Object,
374
+ default: () => ({})
375
+ },
376
+ level: {
377
+ type: Number,
378
+ default: 1
379
+ }
380
+ },
381
+ setup(o) {
382
+ const e = o, t = T(
383
+ () => {
384
+ var i;
385
+ return (i = e.menu.children) == null ? void 0 : i.filter((g) => {
386
+ var p;
387
+ return ((p = g.meta) == null ? void 0 : p.visible) != "0";
388
+ });
389
+ }
390
+ ), { defaultParentActive: n, currentTabPath: a } = W(), s = Be(), r = T(() => {
391
+ var i;
392
+ return e.level == 1 && !gt(s, e.menu.path || "") ? "div" : /^http/.test(e.menu.path || "") || !((i = e.menu.path) != null && i.startsWith(a.value)) ? "a" : "router-link";
393
+ }), c = T(() => {
394
+ var i;
395
+ return /^http/.test(e.menu.path || "") || !((i = e.menu.path) != null && i.startsWith(a.value)) ? {
396
+ href: e.menu.path || ""
397
+ } : {
398
+ to: e.menu.path || ""
399
+ };
400
+ }), h = T(
401
+ () => {
402
+ var i;
403
+ return String(e.menu.icon || ((i = e.menu.meta) == null ? void 0 : i.icon) || "metisicon-yingyong");
404
+ }
405
+ );
406
+ return (i, g) => {
407
+ var f, b;
408
+ const p = E("AsideSubMenuItem", !0);
409
+ return l(), v(K, null, [
410
+ (l(), I(he(r.value), Ee({
411
+ class: ["pt-1 pb-1 pl-3 pr-3 flex items-center gap-2 rounded-md", [
412
+ e.menu.path == m(n) ? "bg-[var(--ui-sidebar-active-bg,var(--el-fill-color))] text-[var(--ui-sidebar-active-fg)] font-medium" : "text-[var(--ui-sidebar-foreground)]",
413
+ (f = t.value) != null && f.length ? " h-7" : " h-9.5 cursor-pointer hover:bg-[var(--ui-sidebar-hover-bg)]"
414
+ ]],
415
+ style: { paddingLeft: "calc(var(--spacing) * 3)" }
416
+ }, c.value), {
417
+ default: w(() => {
418
+ var P, L, k, U;
419
+ return [
420
+ (P = t.value) != null && P.length ? x("", !0) : (l(), I(ze, {
421
+ key: 0,
422
+ icon: h.value,
423
+ class: F(["text-md", [
424
+ e.menu.path == m(n) ? "opacity-100" : "opacity-60"
425
+ ]])
426
+ }, null, 8, ["icon", "class"])),
427
+ d("div", {
428
+ class: F(["truncate", (L = t.value) != null && L.length ? "text-xs text-gray-400" : ""])
429
+ }, M(m(ie)(m(ae)(((U = (k = e.menu) == null ? void 0 : k.meta) == null ? void 0 : U.translations) || {}, "name"))), 3)
430
+ ];
431
+ }),
432
+ _: 1
433
+ }, 16, ["class"])),
434
+ (b = t.value) != null && b.length ? (l(), v("div", Bt, [
435
+ (l(!0), v(K, null, H(t.value, (P, L) => (l(), I(p, {
436
+ menu: P,
437
+ key: L,
438
+ level: e.level + 1
439
+ }, null, 8, ["menu", "level"]))), 128))
440
+ ])) : x("", !0)
441
+ ], 64);
442
+ };
443
+ }
444
+ }), Rt = { class: "h-full" }, Kt = {
445
+ key: 0,
446
+ class: ""
447
+ }, Ze = /* @__PURE__ */ N({
448
+ __name: "AsideSubMenus",
449
+ props: {
450
+ menus: {
451
+ type: Array,
452
+ default: () => []
453
+ }
454
+ },
455
+ setup(o) {
456
+ const e = o;
457
+ return (t, n) => {
458
+ var a;
459
+ return nt((l(), v("div", Rt, [
460
+ (a = e.menus) != null && a.length ? (l(), v("div", Kt, [
461
+ (l(!0), v(K, null, H(e.menus.filter((s) => {
462
+ var r;
463
+ return ((r = s.meta) == null ? void 0 : r.visible) != "0";
464
+ }), (s, r) => (l(), I(Ut, {
465
+ key: r,
466
+ menu: s
467
+ }, null, 8, ["menu"]))), 128))
468
+ ])) : x("", !0)
469
+ ], 512)), [
470
+ [ot, e.menus.length]
471
+ ]);
472
+ };
473
+ }
474
+ }), Jt = {
475
+ key: 0,
476
+ class: "aside-bar__mobile-head flex justify-between items-center pt-4 pb-4 px-4"
477
+ }, Ot = { class: "p-3" }, Ft = /* @__PURE__ */ N({
478
+ __name: "AsideBar",
479
+ setup(o) {
480
+ const { menus: e, isMobile: t, sideOpen: n } = W(), a = () => void (n.value = !n.value);
481
+ return (s, r) => {
482
+ const c = E("el-icon"), h = E("el-scrollbar");
483
+ return m(e).length && !s.$route.meta.hideSidebar ? (l(), v("div", {
484
+ key: 0,
485
+ class: F(["aside-bar flex flex-col h-full min-h-0 w-64 min-width-50", [
486
+ m(t) ? "fixed top-0 left-0 z-200 transition-all" : "",
487
+ m(n) ? "translate-x-[0px]" : "translate-x-[-100%]"
488
+ ]])
489
+ }, [
490
+ m(t) ? (l(), v("div", Jt, [
491
+ d("div", {
492
+ class: "aside-bar__close text-lg cursor-pointer p-2 leading-4",
493
+ onClick: a
494
+ }, [
495
+ _(c, null, {
496
+ default: w(() => [
497
+ _(m(De))
498
+ ]),
499
+ _: 1
500
+ })
501
+ ])
502
+ ])) : x("", !0),
503
+ _(h, { ref: "leftScrollRef" }, {
504
+ default: w(() => [
505
+ d("div", Ot, [
506
+ _(Ze, { menus: m(e) }, null, 8, ["menus"])
507
+ ])
508
+ ]),
509
+ _: 1
510
+ }, 512),
511
+ V(s.$slots, "sidebar-foot", {}, void 0, !0)
512
+ ], 2)) : x("", !0);
513
+ };
514
+ }
515
+ }), Ht = /* @__PURE__ */ B(Ft, [["__scopeId", "data-v-f328029c"]]);
516
+ function qe() {
517
+ const o = Q(), e = T(() => o.value.appList || []);
518
+ return {
519
+ appList: e,
520
+ getAppPath: (a) => (a == null ? void 0 : a.path) || "",
521
+ findAppById: (a) => {
522
+ if (a)
523
+ return Ye(e.value, a);
524
+ }
525
+ };
526
+ }
527
+ const Ye = (o, e) => o.reduce(
528
+ (t, n) => t || (n.appId === e ? n : Ye(n.children || [], e)),
529
+ void 0
530
+ ), Qt = {
531
+ key: 0,
532
+ class: "app-select"
533
+ }, jt = ["href"], zt = {
534
+ key: 0,
535
+ class: "app-select__dropdown"
536
+ }, Zt = ["href"], qt = { class: "app-select__dropdown-icon text-xl" }, Yt = { class: "app-select__dropdown-desc" }, Wt = /* @__PURE__ */ N({
537
+ __name: "AppSelect",
538
+ setup(o) {
539
+ const { currentAppId: e } = W(), { appList: t, getAppPath: n } = qe(), a = (s) => {
540
+ var r;
541
+ return e.value === s.appId || !!((r = s.children) != null && r.some((c) => c.appId === e.value));
542
+ };
543
+ return (s, r) => {
544
+ var h;
545
+ const c = E("el-icon");
546
+ return (h = m(t)) != null && h.length ? (l(), v("div", Qt, [
547
+ (l(!0), v(K, null, H(m(t), (i) => {
548
+ var g, p;
549
+ return l(), v("div", {
550
+ key: i.appId,
551
+ class: "app-select__group"
552
+ }, [
553
+ d("a", {
554
+ class: F(["app-select__link", {
555
+ "app-select__link--active": a(i)
556
+ }]),
557
+ href: m(n)(i) || void 0
558
+ }, [
559
+ d("span", null, M(i.name), 1),
560
+ (g = i.children) != null && g.length ? (l(), I(c, { key: 0 }, {
561
+ default: w(() => [
562
+ _(m(ge))
563
+ ]),
564
+ _: 1
565
+ })) : x("", !0)
566
+ ], 10, jt),
567
+ (p = i.children) != null && p.length ? (l(), v("div", zt, [
568
+ (l(!0), v(K, null, H(i.children, (f) => (l(), v("a", {
569
+ key: f.appId,
570
+ class: F(["app-select__dropdown-item", {
571
+ "app-select__dropdown-item--active": a(f)
572
+ }]),
573
+ href: m(n)(f) || void 0
574
+ }, [
575
+ d("span", qt, [
576
+ d("i", {
577
+ class: F(f.icon || "metisicon-moxingku")
578
+ }, null, 2)
579
+ ]),
580
+ d("div", null, [
581
+ d("div", null, M(f.name), 1),
582
+ d("div", Yt, M(f.desc), 1)
583
+ ])
584
+ ], 10, Zt))), 128))
585
+ ])) : x("", !0)
586
+ ]);
587
+ }), 128))
588
+ ])) : x("", !0);
589
+ };
590
+ }
591
+ }), Xt = /* @__PURE__ */ B(Wt, [["__scopeId", "data-v-b6da0897"]]), Gt = /* @__PURE__ */ N({
592
+ __name: "NavIconBtn",
593
+ props: {
594
+ tag: { default: "button" },
595
+ type: { default: "button" },
596
+ iconOnly: { type: Boolean, default: !0 }
597
+ },
598
+ setup(o) {
599
+ return (e, t) => (l(), I(he(o.tag), {
600
+ type: o.tag === "button" ? o.type : void 0,
601
+ class: F(["nav-icon-btn", { "nav-icon-btn--icon-only": o.iconOnly }])
602
+ }, {
603
+ default: w(() => [
604
+ V(e.$slots, "default", {}, void 0, !0)
605
+ ]),
606
+ _: 3
607
+ }, 8, ["type", "class"]));
608
+ }
609
+ }), ne = /* @__PURE__ */ B(Gt, [["__scopeId", "data-v-824bbddc"]]), Vt = /* @__PURE__ */ N({
610
+ __name: "ThemeToggle",
611
+ setup(o) {
612
+ const e = Q(), { theme: t, isDark: n, toggleTheme: a } = Qe();
613
+ return Me(() => {
614
+ e.value.theme = t.value;
615
+ }), (s, r) => {
616
+ const c = E("el-icon");
617
+ return l(), I(ne, { onClick: m(a) }, {
618
+ default: w(() => [
619
+ _(c, null, {
620
+ default: w(() => [
621
+ m(n) ? (l(), I(m(st), { key: 1 })) : (l(), I(m(at), { key: 0 }))
622
+ ]),
623
+ _: 1
624
+ })
625
+ ]),
626
+ _: 1
627
+ }, 8, ["onClick"]);
628
+ };
629
+ }
630
+ }), We = /* @__PURE__ */ B(Vt, [["__scopeId", "data-v-e6ea60b7"]]), $t = {
631
+ label: {
632
+ clickToChangeImage: "Click to change image"
633
+ },
634
+ msg: {
635
+ uploadIng: "Uploading...",
636
+ agreementTip1: "Terms of Service and Privacy Policy"
637
+ }
638
+ }, en = {
639
+ label: {
640
+ agreement: "I agree to",
641
+ and: "and",
642
+ privacy: "Privacy Policy",
643
+ userPolicy: "User Agreement",
644
+ profile: "Profile",
645
+ dataValue: "Data Value",
646
+ tagName: "Tag Name",
647
+ sort: "Sort",
648
+ notes: "Notes",
649
+ query: "Search",
650
+ type: "Type",
651
+ describe: "Description",
652
+ creationTime: "Created At",
653
+ description: "Description",
654
+ status: "Status",
655
+ user: "User",
656
+ userId: "User ID",
657
+ userName: "Username",
658
+ fullName: "Full Name",
659
+ contactNum: "Contact Number",
660
+ email: "Email",
661
+ password: "Password",
662
+ confirmPassword: "Confirm Password",
663
+ role: "Role",
664
+ companyName: "Company Name",
665
+ tenantId: "Tenant ID",
666
+ adminUsername: "Admin Username",
667
+ adminName: "Admin Name",
668
+ adminPhone: "Admin Phone",
669
+ adminEmail: "Admin Email",
670
+ adminInfo: "Administrator Info",
671
+ belongService: "Associated Service",
672
+ roleName: "Role Name",
673
+ roleCode: "Role Code",
674
+ roleDesc: "Role Description",
675
+ roleAuth: "Role Permissions",
676
+ menuAuth: "Menu Permissions",
677
+ menuName: "Menu Name",
678
+ menu: "Menu",
679
+ button: "Button",
680
+ rootMenu: "Root Menu",
681
+ parent: "Parent",
682
+ menuPath: "Menu Path",
683
+ icon: "Icon",
684
+ permission: "Permission",
685
+ name: "Display Name",
686
+ menuPermissionAuth: "Menu Permission Assignment",
687
+ available: "Available",
688
+ unavailable: "Unavailable",
689
+ categoryName: "Category Name",
690
+ path: "Path",
691
+ normal: "Normal",
692
+ abnormal: "Abnormal",
693
+ title: "Title",
694
+ ipAddress: "IP Address",
695
+ method: "Request Method",
696
+ timeCons: "Time Consumed",
697
+ requestTime: "Request Time",
698
+ operator: "Operator",
699
+ configType: "Configuration Type",
700
+ dictType: "Dictionary Type",
701
+ accountPassword: "Account Password",
702
+ accountLogin: "Account Password Login",
703
+ fastLogin: "Quick Login",
704
+ loginAccount: "Login Account",
705
+ phoneNum: "Phone Number",
706
+ verifyCode: "Verification Code",
707
+ application: "Application",
708
+ basicInfo: "Basic Information",
709
+ isHide: "Hidden",
710
+ page: "Page",
711
+ enterpriseDisplayName: "Company Display Name",
712
+ register: "User Registration",
713
+ effective: "Effective",
714
+ ineffective: "Expired",
715
+ emailLogin: "Email Login",
716
+ welcomeLogin: "Welcome Back",
717
+ welcomeRegister: "Welcome to Sign Up",
718
+ multilingual: "Multilingual",
719
+ userInfo: "User Information",
720
+ securityInfo: "Security",
721
+ personalInfo: "Personal Information",
722
+ isPublicMenu: "Is Public Menu",
723
+ oldPrefix: "Old Prefix",
724
+ newPrefix: "New Prefix",
725
+ aiInfra: "AI Infra",
726
+ licenseValidity: "License Validity",
727
+ license: "License",
728
+ updateLicense: "Update License",
729
+ activated: "Activated",
730
+ notActivated: "Not Activated",
731
+ expired: "Expired",
732
+ productCode: "Product Code",
733
+ expireTime: "Expire Time",
734
+ remainingValidity: "Remaining Validity",
735
+ days: "Days",
736
+ managedInstanceCount: "Managed Instances",
737
+ managedGpuCount: "Managed AI Cards",
738
+ modelProxyCount: "Proxy Models",
739
+ usageRate: "Usage Rate",
740
+ managedInstanceCountDesc: "Number of resource instances created using third-party computing platforms for model inference, training, cloud servers, etc.",
741
+ managedGpuCountDesc: "Number of user-owned bare-metal computing cards (such as GPU, NPU, XPU, TPU, etc.) managed by AGIOne",
742
+ modelProxyCountDesc: "Number of models published using AGIOne platform for self-deployment or third-party platforms",
743
+ efficientComputing: "Multi-model Routing",
744
+ dataSecurity: "Secure Isolation",
745
+ intelligentAnalysis: "Compute Governance",
746
+ processManagement: "Audit & Billing",
747
+ passwordLoginShort: "Password",
748
+ emailCodeLogin: "Email code",
749
+ usernameOrEmail: "Username or email",
750
+ workEmail: "Work email",
751
+ sixDigitCode: "6-digit code",
752
+ readAndAgree: "I agree to the",
753
+ privacyPolicy: "Privacy Policy",
754
+ termsOfService: "Terms of Service",
755
+ backToSignIn: "Back to Sign In",
756
+ createYourAccount: "Create your account",
757
+ createAccount: "Create an account",
758
+ confirmPasswordShort: "Confirm password",
759
+ signInToAGIOne: "Sign in to AGIOne",
760
+ home: "Home"
761
+ },
762
+ btn: {
763
+ cancel: "Cancel",
764
+ changePassword: "Change Password",
765
+ createApiKey: "Create API Key",
766
+ disable: "Disable",
767
+ enable: "Enable",
768
+ auth: "Authorize",
769
+ batchAdd: "Batch Add",
770
+ permission: "Permissions",
771
+ createTenant: "Create Tenant",
772
+ resetPassword: "Reset Password",
773
+ confirmPassword: "Confirm Password",
774
+ oldPassword: "Old Password",
775
+ newPassword: "New Password",
776
+ registerAccount: "Register Account",
777
+ getCode: "Get Verification Code",
778
+ loginAccount: "Log in with an existing account",
779
+ register: "Register",
780
+ signIn: "Sign In",
781
+ sendCode: "Send Code",
782
+ createAccount: "Create account",
783
+ batchReplacePrefix: "Batch Replace Prefix",
784
+ copyJson: "Copy JSON",
785
+ importJson: "Import JSON"
786
+ },
787
+ msg: {
788
+ nameRule1: "Length: 2-20 characters, numbers, letters, or Chinese characters.",
789
+ nameRule2: "May include letters, numbers, '_', Chinese characters, '(', ')', '-', '{'@'}', '.', or spaces.",
790
+ nameRule3: "Cannot start or end with '_', '-', '{'@'}', '.', or spaces.",
791
+ nameRuleError: "Name format error",
792
+ pleaseEnterPassword: "Please re-enter your password",
793
+ newPasswordNotEmpty: "New password cannot be empty",
794
+ passwordNotSame: "Passwords do not match, please re-enter",
795
+ confirmPasswordNotEmpty: "Confirm password cannot be empty",
796
+ confirmDeleteUser: "Are you sure you want to delete user {0}?",
797
+ userNameLengthError: "Username must be 2-20 characters long",
798
+ adminUsernameLengthError: "Length must be 2-20 characters",
799
+ adminUsernameRule3: "Only letters, numbers, '_', and '-' are allowed",
800
+ confirmDeleteRole: "Are you sure you want to delete role {0}?",
801
+ adminUsernameRule5: "May include letters, numbers, '_', Chinese characters, '(', ')', '-', '{'@'}', '.', or spaces.",
802
+ batchAddSuccess: "Batch add successful, {0} records saved locally",
803
+ importMenuTitle: "Import Menu JSON",
804
+ pasteJson: "Paste JSON",
805
+ pasteJsonPlaceholder: "Paste the copied menu JSON here...",
806
+ invalidMenuFormat: "Invalid menu data format",
807
+ importSuccess: "Import successful! Imported {0} menus.",
808
+ importFailed: "Failed to import menus. Please check the JSON format.",
809
+ pleaseEnterPhoneNum: "Please enter a valid phone number",
810
+ usernameOrPasswordEmpty: "Username or password cannot be empty!",
811
+ loginSuccess: "Login successful!",
812
+ confirmPasswordError: "The confirmed password does not match the password. Please re-enter",
813
+ registerSuccess: "Registration successful!",
814
+ getCodeSuccess: "Verification code sent successfully",
815
+ identifierRegistered: "This email has been registered and can be logged in directly",
816
+ getCodeAgain: "Retry in {0}s",
817
+ signingIn: "Signing in...",
818
+ retrySendCode: "Retry in {0}s",
819
+ pleaseEnterEmail: "Please enter a valid email address",
820
+ enableMenu: "Do you want to enable menu [{0}]",
821
+ disableMenu: "Do you want to disable menu [{0}]",
822
+ langMsg1: "Will be displayed in {0} language environment",
823
+ pleaseEnterLicense: "Please enter the license",
824
+ apiKeyCreated: "New API Key Created",
825
+ accessKey: "Access Key",
826
+ secretKey: "Secret Key",
827
+ copy: "Copy",
828
+ apiKeySecretNotice: "The secret key is only visible during creation and is not stored by the system. Please copy it immediately and save it offline.",
829
+ dynamicKey: "Dynamic Key",
830
+ authToken: "Auth Token",
831
+ extendAmount: "Extension Amount",
832
+ timeUnit: "Time Unit",
833
+ year: "Year",
834
+ month: "Month",
835
+ day: "Day",
836
+ hour: "Hour",
837
+ keyTypeTooltip: 'Auth Token only contains AK for model service authentication, lightweight and convenient; Dynamic Key contains AK and SK (starting with "sk-"), using dual authentication mechanism for higher security.',
838
+ aiInfra: "Pan-AI Aggregation and Distribution Services",
839
+ aiInfraDesc: "Realize online distribution and usage such as model calling, AI application construction, data and tool services through API scheduling.",
840
+ loginHeroTitle: "Enterprise AI Platform for Model Services & Compute",
841
+ loginHeroDesc: "Unified API access to multi-model routing, compute orchestration, and AI service operations, built for enterprise."
842
+ }
843
+ }, tn = {
844
+ btn: {
845
+ agree: "Agree",
846
+ disagree: "Disagree",
847
+ create: "Create {0}",
848
+ add: "Add {0}",
849
+ delete: "Delete {0}",
850
+ save: "Save",
851
+ edit: "Edit {0}",
852
+ cancel: "Cancel {0}",
853
+ upload: "Upload {0}",
854
+ copy: "Copy {0}",
855
+ selectAll: "Select All",
856
+ modify: "Modify {0}",
857
+ confirm: "Confirm",
858
+ logout: "Sign Out",
859
+ login: "Sign In",
860
+ loginLoading: "Signing in...",
861
+ operation: "Operation"
862
+ },
863
+ rule: {
864
+ formatError: "Invalid {0} format"
865
+ },
866
+ label: {
867
+ all: "All",
868
+ operation: "Actions",
869
+ tip: "Tip",
870
+ search: "Search {0}"
871
+ },
872
+ msg: {
873
+ pleaseSelect: "Please select {0}",
874
+ success: "{0} successful",
875
+ pleaseEnter: "Please enter {0}",
876
+ confirmDelete: "Are you sure you want to delete {0}?",
877
+ fail: "{0} failed"
878
+ },
879
+ pleaseSelect: "Please select {0}",
880
+ seeMore: "See More"
881
+ }, nn = {
882
+ notFound: {
883
+ title: "Coming Soon!",
884
+ description: "This page is under development. Please refresh the page or click the button below to return to the homepage.",
885
+ backToHome: "Back to Homepage"
886
+ },
887
+ exportImport: {
888
+ selectExportTemplate: "Select Export Template",
889
+ selectImportMethod: "Select Import Method",
890
+ selectZipFile: "Select a zip file",
891
+ selectFolder: "Select a folder",
892
+ unsupportedFileFormat: "Unsupported file format",
893
+ importSuccess: "Import completed! Success: {0}, Skipped: {1}, Failed: {2}",
894
+ importComplete: "Import Complete",
895
+ importStats: "Successfully imported {0} items, failed {1} items, skipped {2} items",
896
+ total: "Total",
897
+ success: "Success",
898
+ failed: "Failed",
899
+ skipped: "Skipped",
900
+ retry: "Retry",
901
+ import: "Import",
902
+ cancel: "Cancel",
903
+ clear: "Clear",
904
+ pleaseUploadFile: "Please upload files first",
905
+ uploadWarning: "Files are currently being uploaded, your changes may not be saved!"
906
+ },
907
+ layout: {
908
+ docsCenter: "Docs"
909
+ },
910
+ fileSelector: {
911
+ dragOrClick: "Drag and drop {fileText} here, or click the button below",
912
+ selectFile: "Select {fileText}",
913
+ folder: "folder",
914
+ file: "file"
915
+ }
916
+ }, on = {
917
+ label: {
918
+ languageModel: "Language Model"
919
+ },
920
+ dialogueSource: {
921
+ 1: "Online Chat",
922
+ 2: "Debug",
923
+ 3: "Application API Call",
924
+ 4: "Vector Generation",
925
+ 5: "Model API Call"
926
+ },
927
+ versionStatus: {
928
+ 0: "Pending Review",
929
+ 1: "Approved",
930
+ 2: "Rejected",
931
+ 3: "Draft",
932
+ 4: "Scheduled for Release",
933
+ 5: "Published",
934
+ 6: "Delisted",
935
+ 7: "Review Timeout",
936
+ 8: "Scheduled for Delisting"
937
+ },
938
+ releaseAuditStatus: {
939
+ 0: "Pending Review",
940
+ 1: "Approved",
941
+ 2: "Rejected",
942
+ 3: "Draft"
943
+ },
944
+ shelfStatus: {
945
+ 0: "Unpublished",
946
+ 1: "Published",
947
+ 2: "Delisted",
948
+ 3: "Scheduled for Delisting"
949
+ },
950
+ isFree: {
951
+ 0: "Free",
952
+ 1: "Paid"
953
+ },
954
+ modelType: {
955
+ 1: "Conversation Model",
956
+ 2: "Image Model",
957
+ 3: "Speech Model",
958
+ 4: "Video Model",
959
+ 5: "Embedding Model",
960
+ 6: "Reranking Model"
961
+ },
962
+ modelSubType: {
963
+ 1: "LLM",
964
+ 2: "VLM",
965
+ 3: "Text-to-Image",
966
+ 4: "Image-to-Image",
967
+ 5: "Image Editing"
968
+ },
969
+ appShareType: {
970
+ 1: "Store",
971
+ 2: "API Access"
972
+ },
973
+ labelType: {
974
+ 1: "Popular",
975
+ 2: "Recommended",
976
+ 3: "Latest"
977
+ },
978
+ applicationType: {
979
+ 1: "Free",
980
+ 2: "Paid"
981
+ },
982
+ applicationAuditStatus: {
983
+ 1: "Published",
984
+ 2: "Pending Review",
985
+ 3: "Publication Failed"
986
+ },
987
+ trueOrFalse: {
988
+ true: "Yes",
989
+ false: "No"
990
+ },
991
+ templateType: {
992
+ 1: "System Built-in",
993
+ 2: "Custom"
994
+ },
995
+ useable: {
996
+ 1: "Available",
997
+ 2: "Unavailable"
998
+ },
999
+ enable: {
1000
+ 1: "Enabled",
1001
+ 2: "Disabled"
1002
+ },
1003
+ tenantStatus: {
1004
+ 1: "Approved",
1005
+ 2: "Pending Review",
1006
+ 3: "Rejected",
1007
+ 4: "Review Passed",
1008
+ 5: "Registering"
1009
+ },
1010
+ modelAuditStatus: {
1011
+ 0: "Pending Review",
1012
+ 1: "Approved",
1013
+ 2: "Rejected",
1014
+ 3: "Draft",
1015
+ 4: "Scheduled for Release",
1016
+ 5: "Published",
1017
+ 6: "Delisted",
1018
+ 7: "Timeout",
1019
+ 8: "Scheduled for Delisting"
1020
+ },
1021
+ modelStatus: {
1022
+ 0: "Delisted",
1023
+ 1: "Published",
1024
+ 2: "Scheduled for Delisting",
1025
+ 3: "Scheduled for Release"
1026
+ },
1027
+ userType: {
1028
+ 0: "Administrator",
1029
+ 1: "Creator",
1030
+ 2: "User"
1031
+ },
1032
+ isActivity: {
1033
+ 0: "Disabled",
1034
+ 1: "Enabled"
1035
+ },
1036
+ isLimit: {
1037
+ 1: "Time-Limited Mode",
1038
+ 0: "Quota Mode"
1039
+ },
1040
+ versionType: {
1041
+ 1: "Minor Adjustment",
1042
+ 2: "Content Optimization",
1043
+ 3: "Major Update"
1044
+ },
1045
+ appTemplateType: {
1046
+ 1: "Conversational",
1047
+ 7: "Drawing"
1048
+ },
1049
+ auditStatus: {
1050
+ 0: "Pending Review",
1051
+ 1: "Approved",
1052
+ 2: "Rejected",
1053
+ 3: "Draft"
1054
+ },
1055
+ onlineStatus: {
1056
+ 0: "Delisted",
1057
+ 1: "Published",
1058
+ 2: "Scheduled for Delisting",
1059
+ 3: "Scheduled for Release"
1060
+ },
1061
+ currency: {
1062
+ CNY: "Chinese Yuan",
1063
+ USD: "US Dollar"
1064
+ }
1065
+ }, an = {
1066
+ label: {},
1067
+ btn: {
1068
+ search: "Search",
1069
+ reset: "Reset",
1070
+ collapse: "Collapse",
1071
+ expand: "Expand"
1072
+ },
1073
+ msg: {}
1074
+ }, sn = {
1075
+ label: {
1076
+ otherConfig: "Other Settings"
1077
+ },
1078
+ btn: {
1079
+ prevStep: "Previous",
1080
+ nextStep: "Next",
1081
+ submit: "Submit"
1082
+ },
1083
+ msg: {
1084
+ checkParams: "Please check the submit parameters"
1085
+ },
1086
+ StaticPrefixInput: {
1087
+ notEmpty: "Cannot be empty"
1088
+ }
1089
+ }, rn = {
1090
+ label: {},
1091
+ btn: {},
1092
+ msg: {
1093
+ lengthTip: "Length between 6-32 characters",
1094
+ charTip: `Letters, numbers !{'@'}#$%^&*()-_=+{'{'}{'}'}[]{'|'}:;"'<>,.?/~)`,
1095
+ charTypeTip: "Must include at least the following three types",
1096
+ charTypeUpper: "Uppercase letter",
1097
+ charTypeLower: "Lowercase letters",
1098
+ charNum: "Number",
1099
+ charSpecial: "Special symbol",
1100
+ placeholder: "Please enter password (required)",
1101
+ lengthError: "The password length is 6-32 characters",
1102
+ charError: "Passwords must contain letters, numbers, and special symbols",
1103
+ charTypeError: "The password must contain at least three types: uppercase letters, lowercase letters, numbers, and special symbols"
1104
+ }
1105
+ }, ln = {
1106
+ name: "English",
1107
+ common: tn,
1108
+ account: $t,
1109
+ admin: en,
1110
+ components: nn,
1111
+ constant: on,
1112
+ filterBox: an,
1113
+ password: rn,
1114
+ instanceForm: sn
1115
+ }, cn = {
1116
+ label: {
1117
+ clickToChangeImage: "点击更换图像"
1118
+ },
1119
+ msg: {
1120
+ uploadIng: "上传中...",
1121
+ agreementTip1: "服务协议及隐私保护"
1122
+ }
1123
+ }, un = {
1124
+ label: {
1125
+ agreement: "我已同意",
1126
+ and: "和",
1127
+ privacy: "《用户隐私协议》",
1128
+ userPolicy: "《平台协议条款》",
1129
+ profile: "个人中心",
1130
+ dataValue: "数据值",
1131
+ tagName: "标签名",
1132
+ sort: "排序",
1133
+ notes: "备注",
1134
+ query: "查询",
1135
+ type: "类型",
1136
+ describe: "描述",
1137
+ creationTime: "创建时间",
1138
+ description: "描述",
1139
+ status: "状态",
1140
+ user: "用户",
1141
+ userId: "用户ID",
1142
+ userName: "用户名",
1143
+ fullName: "姓名",
1144
+ contactNum: "联系电话",
1145
+ email: "邮箱",
1146
+ password: "密码",
1147
+ confirmPassword: "确认密码",
1148
+ role: "角色",
1149
+ companyName: "企业名称",
1150
+ tenantId: "租户ID",
1151
+ adminUsername: "管理员用户名",
1152
+ adminName: "管理员名称",
1153
+ adminPhone: "管理员手机号",
1154
+ adminEmail: "管理员邮箱",
1155
+ adminInfo: "管理员信息",
1156
+ belongService: "所属服务",
1157
+ roleName: "角色名称",
1158
+ roleCode: "角色标识",
1159
+ roleDesc: "角色描述",
1160
+ roleAuth: "角色授权",
1161
+ menuAuth: "菜单权限",
1162
+ menuName: "菜单名称",
1163
+ menu: "菜单",
1164
+ button: "按钮",
1165
+ rootMenu: "根菜单",
1166
+ parent: "父级",
1167
+ menuPath: "菜单地址",
1168
+ icon: "图标",
1169
+ permission: "权限标识",
1170
+ name: "显示名称",
1171
+ menuPermissionAuth: "菜单权限授权",
1172
+ available: "可用",
1173
+ unavailable: "不可用",
1174
+ categoryName: "类目名称",
1175
+ path: "路径",
1176
+ normal: "正常",
1177
+ abnormal: "异常",
1178
+ title: "标题",
1179
+ ipAddress: "ip地址",
1180
+ method: "请求方式",
1181
+ timeCons: "耗时",
1182
+ requestTime: "请求时间",
1183
+ operator: "操作人",
1184
+ configType: "配置类型",
1185
+ dictType: "字典类型",
1186
+ accountPassword: "账号密码",
1187
+ accountLogin: "账号密码登录",
1188
+ fastLogin: "快捷登录",
1189
+ loginAccount: "登录账号",
1190
+ phoneNum: "手机号",
1191
+ verifyCode: "验证码",
1192
+ application: "应用",
1193
+ basicInfo: "基本信息",
1194
+ isHide: "是否隐藏",
1195
+ page: "页面",
1196
+ enterpriseDisplayName: "企业显示名称",
1197
+ register: "用户注册",
1198
+ effective: "生效",
1199
+ ineffective: "过期",
1200
+ emailLogin: "邮箱登录",
1201
+ welcomeLogin: "欢迎登录",
1202
+ welcomeRegister: "欢迎注册",
1203
+ multilingual: "多语言",
1204
+ userInfo: "用户信息",
1205
+ securityInfo: "安全信息",
1206
+ personalInfo: "个人信息",
1207
+ isPublicMenu: "是否公开菜单",
1208
+ oldPrefix: "旧前缀",
1209
+ newPrefix: "新前缀",
1210
+ aiInfra: "AI基础设施",
1211
+ licenseValidity: "许可证有效性",
1212
+ license: "许可证",
1213
+ updateLicense: "更新许可证",
1214
+ activated: "已激活",
1215
+ notActivated: "未激活",
1216
+ expired: "已过期",
1217
+ productCode: "产品码",
1218
+ expireTime: "到期时间",
1219
+ remainingValidity: "剩余有效期",
1220
+ days: "天",
1221
+ managedInstanceCount: "纳管实例数",
1222
+ managedGpuCount: "纳管加速卡数",
1223
+ modelProxyCount: "模型代理个数",
1224
+ usageRate: "使用率",
1225
+ managedInstanceCountDesc: "使用第三方算力平台创建模型推理、训练、云服务器等资源实例个数",
1226
+ managedGpuCountDesc: "使用AGIOne纳管用户自有的裸机算力卡(如GPU、NPU、XPU、TPU等算力卡)数量",
1227
+ modelProxyCountDesc: "使用AGIOne平台发布自部署或第三方平台模型数量",
1228
+ efficientComputing: "高效计算",
1229
+ dataSecurity: "数据安全",
1230
+ intelligentAnalysis: "智能分析",
1231
+ processManagement: "流程管理",
1232
+ passwordLoginShort: "密码登录",
1233
+ emailCodeLogin: "邮箱验证码",
1234
+ usernameOrEmail: "用户名或邮箱",
1235
+ workEmail: "企业邮箱",
1236
+ sixDigitCode: "6位验证码",
1237
+ readAndAgree: "我已阅读并同意",
1238
+ privacyPolicy: "《隐私政策》",
1239
+ termsOfService: "《服务条款》",
1240
+ backToSignIn: "返回登录",
1241
+ createYourAccount: "创建账号",
1242
+ createAccount: "创建账号",
1243
+ confirmPasswordShort: "确认密码",
1244
+ signInToAGIOne: "登录 AGIOne",
1245
+ home: "首页"
1246
+ },
1247
+ btn: {
1248
+ cancel: "取消修改",
1249
+ changePassword: "修改密码",
1250
+ createApiKey: "创建 API Key",
1251
+ disable: "禁用",
1252
+ enable: "启用",
1253
+ auth: "授权",
1254
+ batchAdd: "批量添加",
1255
+ permission: "权限",
1256
+ createTenant: "新增租户",
1257
+ resetPassword: "重置密码",
1258
+ confirmPassword: "确认密码",
1259
+ oldPassword: "旧密码",
1260
+ newPassword: "新密码",
1261
+ registerAccount: "注册账号",
1262
+ getCode: "获取验证码",
1263
+ loginAccount: "使用已有账户登录",
1264
+ register: "注册",
1265
+ signIn: "登录",
1266
+ sendCode: "发送验证码",
1267
+ createAccount: "创建账号",
1268
+ batchReplacePrefix: "批量替换前缀",
1269
+ copyJson: "复制JSON",
1270
+ importJson: "导入JSON"
1271
+ },
1272
+ msg: {
1273
+ nameRule1: "长度为2-20的数字、英文大小写、中文;",
1274
+ nameRule2: "可含有大小写字母、数字、'_'、中文、'('、')'、'('、')'、'-'、'{'@'}'、'.'、空格;",
1275
+ nameRule3: "不以'_'、'-'、'{'@'}'、'.'、空格开头和结尾;",
1276
+ nameRuleError: "名称格式错误",
1277
+ pleaseEnterPassword: "请再次输入密码",
1278
+ newPasswordNotEmpty: "新密码不能为空",
1279
+ passwordNotSame: "两次密码输入不一致,请重新输入",
1280
+ confirmPasswordNotEmpty: "确认密码不能为空",
1281
+ confirmDeleteUser: "确认删除用户{0}?",
1282
+ userNameLengthError: "用户名长度在2~20个字符",
1283
+ adminUsernameLengthError: "长度为2~20个字符",
1284
+ adminUsernameRule3: "只可包含大小写字母、数字、'_'、'-'",
1285
+ confirmDeleteRole: "确认删除角色{0}?",
1286
+ adminUsernameRule5: "可包含大小写字母、数字、'_'、中文、'('、')'、'('、')'、'-'、'{'@'}'、'.'、空格;",
1287
+ batchAddSuccess: "批量添加成功,本地共保存{0}条数据",
1288
+ importMenuTitle: "导入菜单JSON",
1289
+ pasteJson: "粘贴JSON",
1290
+ pasteJsonPlaceholder: "在此粘贴复制的菜单JSON...",
1291
+ invalidMenuFormat: "无效的菜单数据格式",
1292
+ importSuccess: "导入成功!共导入{0}条菜单。",
1293
+ importFailed: "导入菜单失败,请检查JSON格式。",
1294
+ pleaseEnterPhoneNum: "请输入正确的手机号",
1295
+ usernameOrPasswordEmpty: "用户名或密码不能为空!",
1296
+ loginSuccess: "登录成功!",
1297
+ confirmPasswordError: "确认密码与密码不一致,请重新输入",
1298
+ registerSuccess: "注册成功",
1299
+ getCodeSuccess: "获取验证码成功",
1300
+ identifierRegistered: "该邮箱已注册,可直接登录",
1301
+ getCodeAgain: "{0}秒后可重新获取",
1302
+ signingIn: "登录中...",
1303
+ retrySendCode: "{0} 秒后重新发送",
1304
+ pleaseEnterEmail: "请输入正确的邮箱",
1305
+ enableMenu: "是否启用菜单【{0}】",
1306
+ disableMenu: "是否禁用菜单【{0}】",
1307
+ langMsg1: "将在{0}语言环境下显示",
1308
+ pleaseEnterLicense: "请输入许可证",
1309
+ apiKeyCreated: "新的 API Key 已创建",
1310
+ accessKey: "Access Key",
1311
+ secretKey: "Secret Key",
1312
+ copy: "复制",
1313
+ apiKeySecretNotice: "私钥仅本次创建时可见,系统不留存。请立即复制并离线保存。",
1314
+ dynamicKey: "动态密钥",
1315
+ authToken: "认证令牌",
1316
+ extendAmount: "延长时间数量",
1317
+ timeUnit: "时间单位",
1318
+ year: "年",
1319
+ month: "月",
1320
+ day: "天",
1321
+ hour: "小时",
1322
+ keyTypeTooltip: '认证令牌仅包含AK,用于模型服务认证,轻量便捷;动态密钥包含AK和SK(以"sk-"开头),采用双重认证机制,提供更高安全性。',
1323
+ loginHeroTitle: "泛 AI 聚合与分发服务",
1324
+ loginHeroDesc: "通过 API 调度,实现模型调用、AI 应用构建、数据与工具服务的在线分发与使用。"
1325
+ }
1326
+ }, dn = {
1327
+ btn: {
1328
+ agree: "同意",
1329
+ disagree: "不同意",
1330
+ create: "创建{0}",
1331
+ add: "添加{0}",
1332
+ delete: "删除{0}",
1333
+ save: "保存",
1334
+ edit: "编辑{0}",
1335
+ cancel: "取消{0}",
1336
+ upload: "上传{0}",
1337
+ copy: "复制{0}",
1338
+ selectAll: "全选",
1339
+ modify: "修改{0}",
1340
+ confirm: "确定",
1341
+ logout: "退出登录",
1342
+ login: "登录",
1343
+ loginLoading: "登录中...",
1344
+ operation: "操作"
1345
+ },
1346
+ rule: {
1347
+ formatError: "{0}格式不正确"
1348
+ },
1349
+ label: {
1350
+ all: "全部",
1351
+ operation: "操作",
1352
+ tip: "提示",
1353
+ search: "搜索{0}"
1354
+ },
1355
+ msg: {
1356
+ pleaseSelect: "请选择{0}",
1357
+ success: "{0}成功",
1358
+ pleaseEnter: "请输入{0}",
1359
+ confirmDelete: "确认删除{0}吗?",
1360
+ fail: "{0}失败"
1361
+ },
1362
+ pleaseSelect: "请选择{0}",
1363
+ seeMore: "查看更多"
1364
+ }, pn = {
1365
+ notFound: {
1366
+ title: "开发中,敬请期待!",
1367
+ description: "页面开发中,请刷新页面,或者点击下面的按钮返回主页.",
1368
+ backToHome: "返回主页"
1369
+ },
1370
+ exportImport: {
1371
+ selectExportTemplate: "选择导出模板",
1372
+ selectImportMethod: "选择导入方式",
1373
+ selectZipFile: "选择ZIP文件",
1374
+ selectFolder: "选择文件夹",
1375
+ unsupportedFileFormat: "不支持的文件格式",
1376
+ importSuccess: "导入完成!成功: {0}, 跳过: {1}, 失败: {2}",
1377
+ importComplete: "导入完成",
1378
+ importStats: "成功导入 {0} 条数据,失败 {1} 条,跳过 {2} 条",
1379
+ total: "总计",
1380
+ success: "成功",
1381
+ failed: "失败",
1382
+ skipped: "跳过",
1383
+ retry: "重试",
1384
+ import: "导入",
1385
+ cancel: "取消",
1386
+ clear: "清空",
1387
+ pleaseUploadFile: "请先上传文件",
1388
+ uploadWarning: "当前正在进行文件上传,您所做的更改可能不会被保存!"
1389
+ },
1390
+ layout: {
1391
+ docsCenter: "文档中心"
1392
+ },
1393
+ fileSelector: {
1394
+ dragOrClick: "将{fileText}拖拽至此处,或点击下方按钮",
1395
+ selectFile: "选择{fileText}",
1396
+ folder: "文件夹",
1397
+ file: "文件"
1398
+ }
1399
+ }, mn = {
1400
+ label: {
1401
+ languageModel: "语言模型"
1402
+ },
1403
+ dialogueSource: {
1404
+ 1: "在线对话",
1405
+ 2: "调试",
1406
+ 3: "应用 API 调用",
1407
+ 4: "向量生成",
1408
+ 5: "模型 API 调用"
1409
+ },
1410
+ versionStatus: {
1411
+ 0: "待审核",
1412
+ 1: "审核通过",
1413
+ 2: "审核不通过",
1414
+ 3: "草稿",
1415
+ 4: "待发布",
1416
+ 5: "已发布",
1417
+ 6: "已下架",
1418
+ 7: "审核超时",
1419
+ 8: "待下架"
1420
+ },
1421
+ releaseAuditStatus: {
1422
+ 0: "待审核",
1423
+ 1: "审核通过",
1424
+ 2: "审核不通过",
1425
+ 3: "草稿"
1426
+ },
1427
+ shelfStatus: {
1428
+ 0: "未发布",
1429
+ 1: "已发布",
1430
+ 2: "已下架",
1431
+ 3: "待下架"
1432
+ },
1433
+ isFree: {
1434
+ 0: "免费",
1435
+ 1: "付费"
1436
+ },
1437
+ modelType: {
1438
+ 1: "对话模型",
1439
+ 2: "图像模型",
1440
+ 3: "语音模型",
1441
+ 4: "视频模型",
1442
+ 5: "嵌入模型",
1443
+ 6: "重排模型"
1444
+ },
1445
+ modelSubType: {
1446
+ 1: "LLM",
1447
+ 2: "VLM",
1448
+ 3: "文生图",
1449
+ 4: "图生图",
1450
+ 5: "图像编辑"
1451
+ },
1452
+ appShareType: {
1453
+ 1: "商店",
1454
+ 2: "API 访问"
1455
+ },
1456
+ labelType: {
1457
+ 1: "热门",
1458
+ 2: "推荐",
1459
+ 3: "最新"
1460
+ },
1461
+ applicationType: {
1462
+ 1: "免费",
1463
+ 2: "付费"
1464
+ },
1465
+ applicationAuditStatus: {
1466
+ 1: "已发布",
1467
+ 2: "待审核",
1468
+ 3: "发布失败"
1469
+ },
1470
+ trueOrFalse: {
1471
+ true: "是",
1472
+ false: "否"
1473
+ },
1474
+ templateType: {
1475
+ 1: "系统内置",
1476
+ 2: "自定义"
1477
+ },
1478
+ useable: {
1479
+ 1: "可用",
1480
+ 2: "不可用"
1481
+ },
1482
+ enable: {
1483
+ 1: "启用",
1484
+ 2: "禁用"
1485
+ },
1486
+ tenantStatus: {
1487
+ 1: "已通过",
1488
+ 2: "待审核",
1489
+ 3: "已拒绝",
1490
+ 4: "审核通过",
1491
+ 5: "注册中"
1492
+ },
1493
+ modelAuditStatus: {
1494
+ 0: "待审核",
1495
+ 1: "审核通过",
1496
+ 2: "审核不通过",
1497
+ 3: "草稿",
1498
+ 4: "待发布",
1499
+ 5: "已发布",
1500
+ 6: "已下架",
1501
+ 7: "超时",
1502
+ 8: "待下架"
1503
+ },
1504
+ modelStatus: {
1505
+ 0: "已下架",
1506
+ 1: "已发布",
1507
+ 2: "待下架",
1508
+ 3: "待发布"
1509
+ },
1510
+ userType: {
1511
+ 0: "管理员",
1512
+ 1: "创作者",
1513
+ 2: "用户"
1514
+ },
1515
+ isActivity: {
1516
+ 0: "禁用",
1517
+ 1: "启用"
1518
+ },
1519
+ isLimit: {
1520
+ 1: "限时模式",
1521
+ 0: "配额模式"
1522
+ },
1523
+ versionType: {
1524
+ 1: "微小调整",
1525
+ 2: "内容优化",
1526
+ 3: "重大更新"
1527
+ },
1528
+ appTemplateType: {
1529
+ 1: "对话型",
1530
+ 7: "绘画型"
1531
+ },
1532
+ auditStatus: {
1533
+ 0: "待审核",
1534
+ 1: "审核通过",
1535
+ 2: "审核不通过",
1536
+ 3: "草稿"
1537
+ },
1538
+ onlineStatus: {
1539
+ 0: "已下架",
1540
+ 1: "已发布",
1541
+ 2: "待下架",
1542
+ 3: "待发布"
1543
+ },
1544
+ currency: {
1545
+ CNY: "人民币",
1546
+ USD: "美元"
1547
+ }
1548
+ }, hn = {
1549
+ label: {},
1550
+ btn: {
1551
+ search: "搜索",
1552
+ reset: "重置",
1553
+ collapse: "收起",
1554
+ expand: "展开"
1555
+ },
1556
+ msg: {}
1557
+ }, gn = {
1558
+ label: {
1559
+ otherConfig: "其他配置"
1560
+ },
1561
+ btn: {
1562
+ prevStep: "上一步",
1563
+ nextStep: "下一步",
1564
+ submit: "提交"
1565
+ },
1566
+ msg: {
1567
+ checkParams: "请检查提交参数"
1568
+ },
1569
+ StaticPrefixInput: {
1570
+ notEmpty: "不能为空"
1571
+ }
1572
+ }, fn = {
1573
+ label: {},
1574
+ btn: {},
1575
+ msg: {
1576
+ lengthTip: "长度在6-32字符之间",
1577
+ charTip: `字母、数字、!{'@'}#$%^&*()-_=+{'{'}{'}'}[]{'|'}:;"'<>,.?/~)`,
1578
+ charTypeTip: "需包含至少以下三种",
1579
+ charTypeUpper: "大写字母",
1580
+ charTypeLower: "小写字母",
1581
+ charNum: "数字",
1582
+ charSpecial: "特殊符号",
1583
+ placeholder: "请输入密码(必填)",
1584
+ lengthError: "密码长度为6-32个字符",
1585
+ charError: "密码必须包含字母、数字、特殊符号",
1586
+ charTypeError: "密码必须包含至少以下三种(大写字母、小写字母、数字、特殊符号)"
1587
+ }
1588
+ }, vn = {
1589
+ name: "中文简体",
1590
+ common: dn,
1591
+ account: cn,
1592
+ admin: un,
1593
+ components: pn,
1594
+ constant: mn,
1595
+ filterBox: hn,
1596
+ password: fn,
1597
+ instanceForm: gn
1598
+ }, re = {
1599
+ "en-US": ln,
1600
+ "zh-CN": vn
1601
+ }, ue = ut({
1602
+ locale: Ke(),
1603
+ fallbackLocale: "en-US",
1604
+ messages: re,
1605
+ legacy: !1
1606
+ }), yn = {
1607
+ key: 0,
1608
+ class: "language-select__current"
1609
+ }, bn = { class: "language-select__panel" }, An = ["onClick"], _n = /* @__PURE__ */ N({
1610
+ __name: "LanguageSelect",
1611
+ props: {
1612
+ showLabel: { type: Boolean, default: !1 }
1613
+ },
1614
+ setup(o) {
1615
+ const { locale: e } = ue.global, t = T(
1616
+ () => re[e.value].name
1617
+ ), n = Object.keys(re).map((s) => ({
1618
+ label: re[s].name,
1619
+ value: s
1620
+ })), a = (s) => {
1621
+ te.set("locale", s), location.reload();
1622
+ };
1623
+ return (s, r) => {
1624
+ const c = E("el-icon"), h = E("el-popover");
1625
+ return l(), I(h, {
1626
+ placement: "bottom",
1627
+ width: 180,
1628
+ trigger: "hover",
1629
+ "popper-class": "top-language-popover"
1630
+ }, {
1631
+ reference: w(() => [
1632
+ _(ne, {
1633
+ "langselect-toggle": "",
1634
+ tag: "div",
1635
+ class: "language-select",
1636
+ "icon-only": !o.showLabel,
1637
+ title: t.value,
1638
+ "aria-label": t.value
1639
+ }, {
1640
+ default: w(() => [
1641
+ V(s.$slots, "prefix", {}, void 0, !0),
1642
+ _(c, null, {
1643
+ default: w(() => [...r[0] || (r[0] = [
1644
+ d("svg", {
1645
+ xmlns: "http://www.w3.org/2000/svg",
1646
+ width: "24",
1647
+ height: "24",
1648
+ viewBox: "0 0 24 24",
1649
+ fill: "none",
1650
+ stroke: "currentColor",
1651
+ "stroke-width": "2",
1652
+ "stroke-linecap": "round",
1653
+ "stroke-linejoin": "round",
1654
+ "data-lucide": "globe",
1655
+ "aria-hidden": "true",
1656
+ class: "lucide lucide-globe"
1657
+ }, [
1658
+ d("circle", {
1659
+ cx: "12",
1660
+ cy: "12",
1661
+ r: "10"
1662
+ }),
1663
+ d("path", { d: "M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20" }),
1664
+ d("path", { d: "M2 12h20" })
1665
+ ], -1)
1666
+ ])]),
1667
+ _: 1
1668
+ }),
1669
+ o.showLabel ? (l(), v("span", yn, M(t.value), 1)) : x("", !0),
1670
+ o.showLabel ? (l(), I(c, {
1671
+ key: 1,
1672
+ class: "language-select__caret"
1673
+ }, {
1674
+ default: w(() => [
1675
+ _(m(ge))
1676
+ ]),
1677
+ _: 1
1678
+ })) : x("", !0)
1679
+ ]),
1680
+ _: 3
1681
+ }, 8, ["icon-only", "title", "aria-label"])
1682
+ ]),
1683
+ default: w(() => [
1684
+ d("div", bn, [
1685
+ (l(!0), v(K, null, H(m(n), (i) => (l(), v("div", {
1686
+ key: i.value,
1687
+ class: F(["language-select__option", { "language-select__option--active": i.value === m(e) }]),
1688
+ onClick: (g) => a(i.value)
1689
+ }, M(i.label), 11, An))), 128))
1690
+ ])
1691
+ ]),
1692
+ _: 3
1693
+ });
1694
+ };
1695
+ }
1696
+ }), Xe = /* @__PURE__ */ B(_n, [["__scopeId", "data-v-48306ad1"]]), Cn = { class: "mobile-user-popover" }, wn = ["href"], Sn = /* @__PURE__ */ N({
1697
+ __name: "AsideUserMobilePopover",
1698
+ setup(o) {
1699
+ const { t: e } = ue.global, t = Q(), n = T(() => St(t.value)), a = () => {
1700
+ var s, r;
1701
+ Promise.resolve((r = (s = t.value).onLogout) == null ? void 0 : r.call(s)).finally(() => {
1702
+ t.value.onLogout || ce(t.value);
1703
+ });
1704
+ };
1705
+ return (s, r) => {
1706
+ const c = E("el-popover");
1707
+ return l(), I(c, {
1708
+ width: 220,
1709
+ trigger: "click",
1710
+ "popper-class": "top-userinfo-popover"
1711
+ }, {
1712
+ reference: w(() => [
1713
+ V(s.$slots, "reference", {}, void 0, !0)
1714
+ ]),
1715
+ default: w(() => [
1716
+ d("div", Cn, [
1717
+ d("a", {
1718
+ href: n.value,
1719
+ class: "mobile-user-popover__item"
1720
+ }, [
1721
+ r[0] || (r[0] = d("i", { class: "metisicon-yonghu1" }, null, -1)),
1722
+ d("span", null, M(m(e)("admin.label.profile")), 1)
1723
+ ], 8, wn),
1724
+ _(Xe),
1725
+ r[2] || (r[2] = d("div", { class: "mobile-user-popover__divider" }, null, -1)),
1726
+ d("div", {
1727
+ class: "mobile-user-popover__item mobile-user-popover__item--danger",
1728
+ onClick: a
1729
+ }, [
1730
+ r[1] || (r[1] = d("i", { class: "metisicon-exit-full" }, null, -1)),
1731
+ d("span", null, M(m(e)("common.btn.logout")), 1)
1732
+ ])
1733
+ ])
1734
+ ]),
1735
+ _: 3
1736
+ });
1737
+ };
1738
+ }
1739
+ }), Ge = /* @__PURE__ */ B(Sn, [["__scopeId", "data-v-87e082b1"]]), Pn = { class: "header-right-mobile" }, Tn = /* @__PURE__ */ N({
1740
+ __name: "HeaderRightMobile",
1741
+ setup(o) {
1742
+ const e = Q(), t = T(
1743
+ () => {
1744
+ var a, s;
1745
+ return !!((a = e.value.user) != null && a.id || (s = e.value.user) != null && s.userId);
1746
+ }
1747
+ ), n = () => {
1748
+ var a, s;
1749
+ (s = (a = e.value).onLogin) != null && s.call(a) || ce(e.value);
1750
+ };
1751
+ return (a, s) => (l(), v("div", Pn, [
1752
+ _(We),
1753
+ t.value ? (l(), I(Ge, { key: 0 }, {
1754
+ reference: w(() => [
1755
+ _(ne, { class: "header-right-mobile__action" }, {
1756
+ default: w(() => [...s[0] || (s[0] = [
1757
+ d("i", { class: "metisicon-yonghu1" }, null, -1)
1758
+ ])]),
1759
+ _: 1
1760
+ })
1761
+ ]),
1762
+ _: 1
1763
+ })) : (l(), I(ne, {
1764
+ key: 1,
1765
+ class: "header-right-mobile__action",
1766
+ onClick: n
1767
+ }, {
1768
+ default: w(() => [...s[1] || (s[1] = [
1769
+ d("i", { class: "metisicon-yonghu1" }, null, -1)
1770
+ ])]),
1771
+ _: 1
1772
+ }))
1773
+ ]));
1774
+ }
1775
+ }), kn = /* @__PURE__ */ B(Tn, [["__scopeId", "data-v-48792b0a"]]), In = ["aria-label", "aria-expanded"], Ln = { class: "mobile-menu-toggle__icon" }, xn = /* @__PURE__ */ N({
1776
+ __name: "MobileMenuToggle",
1777
+ setup(o) {
1778
+ const { sideOpen: e } = W(), t = () => {
1779
+ e.value = !e.value;
1780
+ };
1781
+ return (n, a) => {
1782
+ const s = E("el-icon");
1783
+ return l(), v("button", {
1784
+ type: "button",
1785
+ class: "mobile-menu-toggle",
1786
+ "aria-label": m(e) ? "Close menu" : "Open menu",
1787
+ "aria-expanded": m(e),
1788
+ onClick: t
1789
+ }, [
1790
+ d("div", Ln, [
1791
+ _(s, null, {
1792
+ default: w(() => [
1793
+ _(m(rt))
1794
+ ]),
1795
+ _: 1
1796
+ })
1797
+ ])
1798
+ ], 8, In);
1799
+ };
1800
+ }
1801
+ }), En = /* @__PURE__ */ B(xn, [["__scopeId", "data-v-c14b8f72"]]), Mn = {
1802
+ key: 0,
1803
+ class: "user-avatar__fallback"
1804
+ }, Dn = /* @__PURE__ */ N({
1805
+ __name: "UserAvatar",
1806
+ props: {
1807
+ src: { default: "" },
1808
+ name: { default: "" }
1809
+ },
1810
+ setup(o) {
1811
+ const e = o, t = R(!1), n = T(() => e.name.trim()), a = T(
1812
+ () => n.value.charAt(0).toUpperCase() || "U"
1813
+ ), s = T(() => n.value || "User avatar"), r = T(() => e.src.trim()), c = T(
1814
+ () => !r.value || t.value
1815
+ ), h = T(
1816
+ () => c.value && !!n.value
1817
+ ), i = T(
1818
+ () => c.value && !n.value
1819
+ ), g = T(
1820
+ () => r.value && !t.value ? r.value : void 0
1821
+ );
1822
+ le(
1823
+ () => e.src,
1824
+ () => {
1825
+ t.value = !1;
1826
+ }
1827
+ );
1828
+ const p = () => {
1829
+ t.value = !0;
1830
+ };
1831
+ return (f, b) => {
1832
+ const P = E("el-icon"), L = E("el-avatar");
1833
+ return l(), I(L, Ee(f.$attrs, {
1834
+ src: g.value,
1835
+ "data-src": g.value,
1836
+ alt: s.value,
1837
+ class: ["user-avatar", { "user-avatar--fallback": c.value }],
1838
+ onError: p
1839
+ }), {
1840
+ default: w(() => [
1841
+ h.value ? (l(), v("span", Mn, M(a.value), 1)) : i.value ? (l(), I(P, {
1842
+ key: 1,
1843
+ class: "user-avatar__icon",
1844
+ "aria-hidden": "true"
1845
+ }, {
1846
+ default: w(() => [
1847
+ _(m(lt))
1848
+ ]),
1849
+ _: 1
1850
+ })) : x("", !0)
1851
+ ]),
1852
+ _: 1
1853
+ }, 16, ["src", "data-src", "alt", "class"]);
1854
+ };
1855
+ }
1856
+ }), Ie = /* @__PURE__ */ B(Dn, [["__scopeId", "data-v-50be58a7"]]), Nn = {
1857
+ key: 0,
1858
+ class: "layout-breadcrumb text-xs",
1859
+ "aria-label": "Breadcrumb"
1860
+ }, Bn = ["aria-label", "title"], Un = {
1861
+ key: 1,
1862
+ class: "flex min-w-0 items-center gap-1"
1863
+ }, Rn = ["href"], Kn = ["onClick"], Jn = {
1864
+ key: 3,
1865
+ class: "layout-breadcrumb__current"
1866
+ }, On = /* @__PURE__ */ N({
1867
+ __name: "LayoutBreadcrumb",
1868
+ props: {
1869
+ items: { default: void 0 },
1870
+ currentTitle: { default: "" },
1871
+ parentPath: { default: "" },
1872
+ preserveQueryKeys: { default: () => [] },
1873
+ showCurrent: { type: Boolean, default: !0 },
1874
+ showBack: { type: Boolean, default: !0 },
1875
+ backTo: { default: void 0 },
1876
+ backLabel: { default: "返回" }
1877
+ },
1878
+ setup(o) {
1879
+ const e = o, t = Ne(), n = Be(), a = Q(), s = W(null), r = T(() => {
1880
+ var ye, be, Ae, _e, Ce, we;
1881
+ if ((ye = e.items) != null && ye.length)
1882
+ return e.items.filter((ee) => ee.title);
1883
+ const u = L(t.path), y = L(
1884
+ ((be = t.meta) == null ? void 0 : be.parent) || ((Ae = t.meta) == null ? void 0 : Ae.parentPath) || t.path
1885
+ ), C = c(), S = (Ce = (_e = s == null ? void 0 : s.currentEndRoute) == null ? void 0 : _e.value) == null ? void 0 : Ce.paths, A = h(S || []);
1886
+ let D = A.length ? A : f(C, y);
1887
+ const O = L(
1888
+ e.parentPath || ((we = t.meta) == null ? void 0 : we.parentPath) || ""
1889
+ );
1890
+ if (!D.length && O && (D = f(C, O)), !D.length) {
1891
+ const ee = O || b(u, C);
1892
+ D = ee ? f(C, ee) : [];
1893
+ }
1894
+ const Y = D.map(i).filter((ee) => ee.title), G = Y[Y.length - 1], $ = p();
1895
+ return e.showCurrent && $ && k(G == null ? void 0 : G.path) !== k(u) ? Y.push({
1896
+ title: $,
1897
+ path: u,
1898
+ disabled: !0
1899
+ }) : $ && G && k(G.path) === k(u) && (G.title = $, G.disabled = !0), !Y.length && $ && Y.push({
1900
+ title: $,
1901
+ path: u,
1902
+ disabled: !0
1903
+ }), Y;
1904
+ }), c = () => {
1905
+ const u = [], y = /* @__PURE__ */ new Set();
1906
+ return (a.value.menus || []).forEach((C) => {
1907
+ var A;
1908
+ const S = C.path || C.name || JSON.stringify(((A = C.meta) == null ? void 0 : A.translations) || {});
1909
+ !S || y.has(S) || (y.add(S), u.push(C));
1910
+ }), u;
1911
+ }, h = (u) => u.filter((y) => {
1912
+ var C;
1913
+ return y && ((C = y.meta) == null ? void 0 : C.visible) !== "0";
1914
+ }), i = (u) => {
1915
+ var y;
1916
+ return {
1917
+ title: g(u),
1918
+ path: u.path,
1919
+ disabled: ((y = u.meta) == null ? void 0 : y.visible) === "0",
1920
+ children: u.children
1921
+ };
1922
+ }, g = (u) => {
1923
+ var C;
1924
+ return ((C = u == null ? void 0 : u.meta) != null && C.translations ? ie(ae(u.meta.translations, "name", u.name)) : "") || (u == null ? void 0 : u.title) || (u == null ? void 0 : u.name) || "";
1925
+ }, p = () => {
1926
+ var u;
1927
+ return e.currentTitle ? e.currentTitle : typeof ((u = t.meta) == null ? void 0 : u.title) == "string" ? t.meta.title : String(t.params.id || t.params.tenantId || "");
1928
+ }, f = (u, y, C = []) => {
1929
+ if (!y) return [];
1930
+ for (const S of u) {
1931
+ const A = [...C, S];
1932
+ if (P(S.path, y))
1933
+ return h(A);
1934
+ const D = f(S.children || [], y, A);
1935
+ if (D.length) return D;
1936
+ }
1937
+ return [];
1938
+ }, b = (u, y) => {
1939
+ const C = u.split("/").filter(Boolean);
1940
+ for (let S = C.length - 1; S > 0; S -= 1) {
1941
+ const A = `/${C.slice(0, S).join("/")}`;
1942
+ if (f(y, A).length) return A;
1943
+ }
1944
+ return "";
1945
+ }, P = (u = "", y = "") => {
1946
+ const C = k(u), S = k(y);
1947
+ if (!C || !S) return !1;
1948
+ if (C === S) return !0;
1949
+ const A = C.replace(/\/:(\w+)/g, "/([^/]+)");
1950
+ return new RegExp(`^${A}$`, "i").test(S);
1951
+ }, L = (u = "") => u ? u.split("?")[0].split("#")[0] : "", k = (u = "") => (L(u).replace(/\/+$/, "") || "/").toLowerCase(), U = (u) => /^https?:\/\//.test(u.path || ""), J = (u) => {
1952
+ var y;
1953
+ return !!((y = u.children) != null && y.some((C) => !C.disabled));
1954
+ }, z = (u, y) => u.disabled || y === r.value.length - 1 || !u.path ? !1 : U(u) || !J(u), Z = (u) => {
1955
+ const y = u.to || j(u);
1956
+ y && n.push(y);
1957
+ }, q = () => {
1958
+ var y;
1959
+ if (e.backTo) {
1960
+ n.push(e.backTo);
1961
+ return;
1962
+ }
1963
+ if ((y = n.options.history.state) != null && y.back && window.history.length > 1) {
1964
+ n.back();
1965
+ return;
1966
+ }
1967
+ const u = X();
1968
+ u && n.push(u);
1969
+ }, X = () => {
1970
+ var C, S;
1971
+ const u = e.parentPath || ((C = t.meta) == null ? void 0 : C.parentPath) || ((S = t.meta) == null ? void 0 : S.parent) || "";
1972
+ if (u)
1973
+ return j({ path: u });
1974
+ const y = r.value[r.value.length - 2];
1975
+ if (y != null && y.to) return y.to;
1976
+ if (y != null && y.path && !U(y))
1977
+ return j(y);
1978
+ }, j = (u) => {
1979
+ if (!u.path) return;
1980
+ const y = e.preserveQueryKeys.reduce((C, S) => {
1981
+ const A = t.query[S];
1982
+ return typeof A == "string" && (C[S] = A), Array.isArray(A) && (C[S] = A.filter(
1983
+ (D) => typeof D == "string"
1984
+ )), C;
1985
+ }, {});
1986
+ return Object.keys(y).length ? { path: u.path, query: y } : { path: u.path };
1987
+ };
1988
+ return (u, y) => {
1989
+ const C = E("el-icon");
1990
+ return e.showBack || r.value.length ? (l(), v("nav", Nn, [
1991
+ e.showBack ? (l(), v("button", {
1992
+ key: 0,
1993
+ class: "layout-breadcrumb__back",
1994
+ type: "button",
1995
+ "aria-label": e.backLabel,
1996
+ title: e.backLabel,
1997
+ onClick: q
1998
+ }, [
1999
+ _(C, null, {
2000
+ default: w(() => [
2001
+ _(m(it))
2002
+ ]),
2003
+ _: 1
2004
+ })
2005
+ ], 8, Bn)) : x("", !0),
2006
+ r.value.length ? (l(), v("ol", Un, [
2007
+ (l(!0), v(K, null, H(r.value, (S, A) => (l(), v("li", {
2008
+ key: `${S.path || S.title}-${A}`,
2009
+ class: "flex min-w-0 items-center gap-1"
2010
+ }, [
2011
+ A > 0 ? (l(), I(C, {
2012
+ key: 0,
2013
+ class: "layout-breadcrumb__separator"
2014
+ }, {
2015
+ default: w(() => [
2016
+ _(m(pe))
2017
+ ]),
2018
+ _: 1
2019
+ })) : x("", !0),
2020
+ U(S) && z(S, A) ? (l(), v("a", {
2021
+ key: 1,
2022
+ class: "layout-breadcrumb__link",
2023
+ href: S.path
2024
+ }, M(S.title), 9, Rn)) : z(S, A) ? (l(), v("button", {
2025
+ key: 2,
2026
+ class: "layout-breadcrumb__link",
2027
+ type: "button",
2028
+ onClick: (D) => Z(S)
2029
+ }, M(S.title), 9, Kn)) : (l(), v("span", Jn, M(S.title), 1))
2030
+ ]))), 128))
2031
+ ])) : x("", !0)
2032
+ ])) : x("", !0);
2033
+ };
2034
+ }
2035
+ }), Oo = /* @__PURE__ */ B(On, [["__scopeId", "data-v-21c4b2fb"]]), Fn = {
2036
+ key: 0,
2037
+ class: "timezone-select__current"
2038
+ }, Hn = { class: "timezone-select__panel" }, Qn = ["onClick"], jn = { class: "timezone-select__name" }, zn = { class: "timezone-select__offset" }, Zn = /* @__PURE__ */ N({
2039
+ __name: "TimezoneSelect",
2040
+ props: {
2041
+ showLabel: { type: Boolean, default: !1 }
2042
+ },
2043
+ setup(o) {
2044
+ const e = ft(), t = R(!1), n = T(() => e.value), a = T(() => Ct()), s = T(() => _t(n.value)), r = (c) => {
2045
+ vt(c), t.value = !1;
2046
+ };
2047
+ return (c, h) => {
2048
+ const i = E("el-icon"), g = E("el-popover");
2049
+ return l(), I(g, {
2050
+ visible: t.value,
2051
+ "onUpdate:visible": h[0] || (h[0] = (p) => t.value = p),
2052
+ placement: "bottom",
2053
+ width: 280,
2054
+ trigger: "hover",
2055
+ "popper-class": "top-timezone-popover"
2056
+ }, {
2057
+ reference: w(() => [
2058
+ _(ne, {
2059
+ tag: "div",
2060
+ class: "timezone-select",
2061
+ "icon-only": !o.showLabel,
2062
+ title: s.value,
2063
+ "aria-label": s.value
2064
+ }, {
2065
+ default: w(() => [
2066
+ _(i, null, {
2067
+ default: w(() => [
2068
+ _(m(ct))
2069
+ ]),
2070
+ _: 1
2071
+ }),
2072
+ o.showLabel ? (l(), v("span", Fn, M(n.value), 1)) : x("", !0),
2073
+ o.showLabel ? (l(), I(i, {
2074
+ key: 1,
2075
+ class: "timezone-select__caret"
2076
+ }, {
2077
+ default: w(() => [
2078
+ _(m(ge))
2079
+ ]),
2080
+ _: 1
2081
+ })) : x("", !0)
2082
+ ]),
2083
+ _: 1
2084
+ }, 8, ["icon-only", "title", "aria-label"])
2085
+ ]),
2086
+ default: w(() => [
2087
+ d("div", Hn, [
2088
+ (l(!0), v(K, null, H(a.value, (p) => (l(), v("button", {
2089
+ key: p.value,
2090
+ type: "button",
2091
+ class: F(["timezone-select__option", {
2092
+ "timezone-select__option--active": p.value === n.value
2093
+ }]),
2094
+ onClick: (f) => r(p.value)
2095
+ }, [
2096
+ d("span", jn, M(p.value), 1),
2097
+ d("span", zn, M(p.offset), 1)
2098
+ ], 10, Qn))), 128))
2099
+ ])
2100
+ ]),
2101
+ _: 1
2102
+ }, 8, ["visible"]);
2103
+ };
2104
+ }
2105
+ }), Fo = /* @__PURE__ */ B(Zn, [["__scopeId", "data-v-e62f5f2d"]]), qn = { class: "user-info__panel" }, Yn = { class: "user-info__profile" }, Wn = { class: "user-info__profile-main" }, Xn = ["title"], Gn = ["title"], Vn = { class: "user-info__meta" }, $n = { class: "user-info__meta-label" }, eo = ["title"], to = ["href"], no = /* @__PURE__ */ N({
2106
+ __name: "UserInfo",
2107
+ setup(o) {
2108
+ const { t: e } = ue.global, t = Q(), n = T(() => t.value.user || {}), a = T(() => t.value.accountMenu || []), s = T(
2109
+ () => {
2110
+ var h, i, g, p;
2111
+ return ((h = n.value) == null ? void 0 : h.name) || ((i = n.value) == null ? void 0 : i.username) || ((g = n.value) == null ? void 0 : g.email) || ((p = n.value) == null ? void 0 : p.userId) || "User";
2112
+ }
2113
+ ), r = T(
2114
+ () => {
2115
+ var h, i, g;
2116
+ return [
2117
+ { label: e("admin.label.userName"), value: (h = n.value) == null ? void 0 : h.username },
2118
+ { label: e("admin.label.email"), value: (i = n.value) == null ? void 0 : i.email },
2119
+ { label: e("admin.label.userId"), value: (g = n.value) == null ? void 0 : g.userId }
2120
+ ].filter((p) => !!p.value);
2121
+ }
2122
+ ), c = () => {
2123
+ var h, i;
2124
+ Promise.resolve((i = (h = t.value).onLogout) == null ? void 0 : i.call(h)).finally(() => {
2125
+ t.value.onLogout || ce(t.value);
2126
+ });
2127
+ };
2128
+ return (h, i) => {
2129
+ const g = E("el-popover");
2130
+ return l(), I(g, {
2131
+ width: 280,
2132
+ trigger: "hover",
2133
+ "popper-class": "top-userinfo-popover"
2134
+ }, {
2135
+ reference: w(() => [
2136
+ _(m(Ie), {
2137
+ class: "user-info__trigger ml-2",
2138
+ src: n.value.avatar,
2139
+ name: s.value
2140
+ }, null, 8, ["src", "name"])
2141
+ ]),
2142
+ default: w(() => {
2143
+ var p;
2144
+ return [
2145
+ d("div", qn, [
2146
+ d("div", Yn, [
2147
+ _(m(Ie), {
2148
+ class: "user-info__profile-avatar",
2149
+ src: n.value.avatar,
2150
+ name: s.value
2151
+ }, null, 8, ["src", "name"]),
2152
+ d("div", Wn, [
2153
+ d("div", {
2154
+ class: "user-info__display-name",
2155
+ title: s.value
2156
+ }, M(s.value), 9, Xn),
2157
+ (p = n.value) != null && p.username ? (l(), v("div", {
2158
+ key: 0,
2159
+ class: "user-info__username",
2160
+ title: n.value.username
2161
+ }, " @" + M(n.value.username), 9, Gn)) : x("", !0)
2162
+ ])
2163
+ ]),
2164
+ d("div", Vn, [
2165
+ (l(!0), v(K, null, H(r.value, (f) => (l(), v("div", {
2166
+ key: f.label,
2167
+ class: "user-info__meta-row"
2168
+ }, [
2169
+ d("span", $n, M(f.label), 1),
2170
+ d("span", {
2171
+ class: "user-info__meta-value",
2172
+ title: f.value
2173
+ }, M(f.value), 9, eo)
2174
+ ]))), 128))
2175
+ ]),
2176
+ i[1] || (i[1] = d("div", { class: "user-info__divider" }, null, -1)),
2177
+ (l(!0), v(K, null, H(a.value, (f, b) => {
2178
+ var P, L;
2179
+ return l(), v("a", {
2180
+ key: b,
2181
+ href: f.path,
2182
+ class: "user-info__item"
2183
+ }, [
2184
+ _(ze, {
2185
+ icon: f.icon || ((P = f.meta) == null ? void 0 : P.icon)
2186
+ }, null, 8, ["icon"]),
2187
+ d("span", null, M(m(ae)(((L = f.meta) == null ? void 0 : L.translations) || {}, "name", f.name)), 1)
2188
+ ], 8, to);
2189
+ }), 128)),
2190
+ i[2] || (i[2] = d("div", { class: "user-info__divider" }, null, -1)),
2191
+ d("div", {
2192
+ class: "user-info__item user-info__item--danger",
2193
+ onClick: c
2194
+ }, [
2195
+ i[0] || (i[0] = d("i", { class: "metisicon-exit-full" }, null, -1)),
2196
+ d("span", null, M(m(e)("common.btn.logout")), 1)
2197
+ ])
2198
+ ])
2199
+ ];
2200
+ }),
2201
+ _: 1
2202
+ });
2203
+ };
2204
+ }
2205
+ }), oo = /* @__PURE__ */ B(no, [["__scopeId", "data-v-ac052463"]]), ao = { class: "header-right" }, so = ["href"], ro = /* @__PURE__ */ N({
2206
+ __name: "SHeaderRight",
2207
+ setup(o) {
2208
+ const { t: e } = ue.global, t = Q(), n = T(() => t.value.hideDoc ?? !1), a = T(() => je(t.value)), s = T(() => t.value.user), r = T(() => {
2209
+ var i, g;
2210
+ return !!((i = s.value) != null && i.id || (g = s.value) != null && g.userId);
2211
+ }), c = (i) => {
2212
+ t.value.onLogin && (i.preventDefault(), t.value.onLogin());
2213
+ }, h = T(() => t.value.docsPath || "");
2214
+ return (i, g) => {
2215
+ const p = E("el-icon");
2216
+ return l(), v("div", ao, [
2217
+ !n.value && h.value ? (l(), I(ne, {
2218
+ key: 0,
2219
+ tag: "a",
2220
+ class: "whitespace-nowrap",
2221
+ href: h.value,
2222
+ target: "_blank"
2223
+ }, {
2224
+ default: w(() => [
2225
+ _(p, null, {
2226
+ default: w(() => [...g[0] || (g[0] = [
2227
+ d("svg", {
2228
+ xmlns: "http://www.w3.org/2000/svg",
2229
+ width: "24",
2230
+ height: "24",
2231
+ viewBox: "0 0 24 24",
2232
+ fill: "none",
2233
+ stroke: "currentColor",
2234
+ "stroke-width": "2",
2235
+ "stroke-linecap": "round",
2236
+ "stroke-linejoin": "round",
2237
+ "data-lucide": "book-open",
2238
+ "aria-hidden": "true",
2239
+ class: "lucide lucide-book-open"
2240
+ }, [
2241
+ d("path", { d: "M12 7v14" }),
2242
+ d("path", { d: "M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z" })
2243
+ ], -1)
2244
+ ])]),
2245
+ _: 1
2246
+ })
2247
+ ]),
2248
+ _: 1
2249
+ }, 8, ["href"])) : x("", !0),
2250
+ _(Xe),
2251
+ _(We),
2252
+ r.value ? (l(), I(oo, { key: 1 })) : (l(), v("a", {
2253
+ key: 2,
2254
+ class: "header-right__login",
2255
+ href: a.value,
2256
+ onClick: c
2257
+ }, M(m(e)("common.btn.login")), 9, so))
2258
+ ]);
2259
+ };
2260
+ }
2261
+ }), lo = /* @__PURE__ */ B(ro, [["__scopeId", "data-v-3c5e16a6"]]), io = {
2262
+ "header-bar": "",
2263
+ class: "header-bar sticky top-0 z-200"
2264
+ }, co = { class: "header-bar__left" }, uo = { class: "header-bar__logo-wrap" }, po = {
2265
+ href: "/",
2266
+ target: "_self",
2267
+ rel: "noopener",
2268
+ class: "header-bar__logo-link"
2269
+ }, mo = {
2270
+ key: 1,
2271
+ class: "header-bar__divider"
2272
+ }, ho = { class: "header-bar__right" }, go = /* @__PURE__ */ N({
2273
+ __name: "HeaderBar",
2274
+ setup(o) {
2275
+ const e = Q(), { isMobile: t } = W(), n = T(
2276
+ () => {
2277
+ var a, s;
2278
+ return !!((a = e.value.user) != null && a.id || (s = e.value.user) != null && s.userId);
2279
+ }
2280
+ );
2281
+ return (a, s) => {
2282
+ const r = E("el-image");
2283
+ return l(), v("div", io, [
2284
+ d("div", co, [
2285
+ m(t) ? (l(), I(En, { key: 0 })) : x("", !0),
2286
+ d("div", uo, [
2287
+ d("a", po, [
2288
+ _(r, {
2289
+ src: m(e).logo,
2290
+ class: "h-7"
2291
+ }, null, 8, ["src"])
2292
+ ])
2293
+ ]),
2294
+ n.value && !m(t) ? (l(), v("div", mo)) : x("", !0),
2295
+ n.value && !m(t) ? (l(), I(Xt, { key: 2 })) : x("", !0)
2296
+ ]),
2297
+ d("div", ho, [
2298
+ V(a.$slots, "default", {}, void 0, !0),
2299
+ m(t) ? x("", !0) : (l(), I(lo, { key: 0 })),
2300
+ m(t) ? (l(), I(kn, { key: 1 })) : x("", !0)
2301
+ ])
2302
+ ]);
2303
+ };
2304
+ }
2305
+ }), fo = /* @__PURE__ */ B(go, [["__scopeId", "data-v-9ee7aec2"]]), vo = {
2306
+ key: 0,
2307
+ class: "min-w-0 flex-1"
2308
+ }, yo = /* @__PURE__ */ N({
2309
+ __name: "AppSelectMobile",
2310
+ setup(o) {
2311
+ const { currentAppId: e } = W(), { appList: t, getAppPath: n, findAppById: a } = qe(), s = T(() => {
2312
+ const c = a(e.value);
2313
+ return c ? n(c) : "";
2314
+ }), r = (c) => {
2315
+ c && (location.href = c);
2316
+ };
2317
+ return (c, h) => {
2318
+ var f;
2319
+ const i = E("el-option"), g = E("el-option-group"), p = E("el-select");
2320
+ return (f = m(t)) != null && f.length ? (l(), v("div", vo, [
2321
+ _(p, {
2322
+ "model-value": s.value,
2323
+ class: "w-full",
2324
+ onChange: r
2325
+ }, {
2326
+ default: w(() => [
2327
+ (l(!0), v(K, null, H(m(t), (b) => {
2328
+ var P;
2329
+ return l(), v(K, {
2330
+ key: b.appId
2331
+ }, [
2332
+ (P = b.children) != null && P.length ? (l(), I(g, {
2333
+ key: 0,
2334
+ label: b.name
2335
+ }, {
2336
+ default: w(() => [
2337
+ (l(!0), v(K, null, H(b.children, (L) => (l(), I(i, {
2338
+ key: L.appId,
2339
+ label: L.name,
2340
+ value: m(n)(L),
2341
+ style: { "padding-left": "30px" }
2342
+ }, null, 8, ["label", "value"]))), 128))
2343
+ ]),
2344
+ _: 2
2345
+ }, 1032, ["label"])) : (l(), I(i, {
2346
+ key: 1,
2347
+ label: b.name,
2348
+ value: m(n)(b)
2349
+ }, null, 8, ["label", "value"]))
2350
+ ], 64);
2351
+ }), 128))
2352
+ ]),
2353
+ _: 1
2354
+ }, 8, ["model-value"])
2355
+ ])) : x("", !0);
2356
+ };
2357
+ }
2358
+ }), bo = { class: "aside-user-mobile" }, Ao = { class: "flex-1" }, _o = { class: "absolute right-4 top-1/2 -translate-y-1/2" }, Co = { class: "absolute right-4 top-1/2 -translate-y-1/2" }, wo = /* @__PURE__ */ N({
2359
+ __name: "AsideUserMobile",
2360
+ setup(o) {
2361
+ const e = Q(), t = T(() => e.value.user || {}), n = T(() => !!(t.value.id || t.value.userId)), a = T(() => t.value.name || t.value.username), s = () => {
2362
+ var r, c;
2363
+ (c = (r = e.value).onLogin) != null && c.call(r) || ce(e.value);
2364
+ };
2365
+ return (r, c) => {
2366
+ const h = E("el-icon");
2367
+ return n.value ? (l(), I(Ge, { key: 0 }, {
2368
+ reference: w(() => [
2369
+ d("div", bo, [
2370
+ c[0] || (c[0] = d("div", { class: "aside-user-mobile__icon text-lg" }, [
2371
+ d("i", { class: "metisicon-yonghu1" })
2372
+ ], -1)),
2373
+ d("div", Ao, M(a.value), 1),
2374
+ d("div", _o, [
2375
+ _(h, null, {
2376
+ default: w(() => [
2377
+ _(m(pe))
2378
+ ]),
2379
+ _: 1
2380
+ })
2381
+ ])
2382
+ ])
2383
+ ]),
2384
+ _: 1
2385
+ })) : (l(), v("div", {
2386
+ key: 1,
2387
+ class: "aside-user-mobile",
2388
+ onClick: s
2389
+ }, [
2390
+ c[1] || (c[1] = d("div", { class: "aside-user-mobile__icon text-lg" }, [
2391
+ d("i", { class: "metisicon-yonghu1" })
2392
+ ], -1)),
2393
+ c[2] || (c[2] = d("div", { class: "flex-1" }, "登录/注册", -1)),
2394
+ d("div", Co, [
2395
+ _(h, null, {
2396
+ default: w(() => [
2397
+ _(m(pe))
2398
+ ]),
2399
+ _: 1
2400
+ })
2401
+ ])
2402
+ ]));
2403
+ };
2404
+ }
2405
+ }), So = /* @__PURE__ */ B(wo, [["__scopeId", "data-v-c56964a5"]]), Po = { class: "aside-bar-mobile__head flex items-center gap-3" }, To = { class: "p-3" }, ko = /* @__PURE__ */ N({
2406
+ __name: "AsideBarMobile",
2407
+ setup(o) {
2408
+ const { menus: e, sideOpen: t } = W(), n = () => void (t.value = !1);
2409
+ return (a, s) => {
2410
+ const r = E("el-icon"), c = E("el-scrollbar");
2411
+ return m(e).length && !a.$route.meta.hideSidebar ? (l(), v("div", {
2412
+ key: 0,
2413
+ class: F(["aside-bar-mobile fixed inset-y-0 left-0 z-200 flex min-h-0 flex-col transition-transform", [m(t) ? "translate-x-[0px]" : "translate-x-[-100%]"]])
2414
+ }, [
2415
+ d("div", Po, [
2416
+ d("button", {
2417
+ type: "button",
2418
+ class: "aside-bar-mobile__close",
2419
+ "aria-label": "Close menu",
2420
+ onClick: n
2421
+ }, [
2422
+ _(r, null, {
2423
+ default: w(() => [
2424
+ _(m(De))
2425
+ ]),
2426
+ _: 1
2427
+ })
2428
+ ]),
2429
+ _(yo)
2430
+ ]),
2431
+ _(c, { ref: "leftScrollRef" }, {
2432
+ default: w(() => [
2433
+ d("div", To, [
2434
+ _(Ze, { menus: m(e) }, null, 8, ["menus"])
2435
+ ])
2436
+ ]),
2437
+ _: 1
2438
+ }, 512),
2439
+ V(a.$slots, "sidebar-foot", {}, void 0, !0),
2440
+ _(So)
2441
+ ], 2)) : x("", !0);
2442
+ };
2443
+ }
2444
+ }), Io = /* @__PURE__ */ B(ko, [["__scopeId", "data-v-ffd10c8b"]]), Lo = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQgAAABMCAYAAACRSCkxAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAABCKADAAQAAAABAAAATAAAAADXpTM6AAAqwklEQVR4Ae2dB5ScxZXvu3tGYRSREAoglEkSSkiASEYEIxBiwWLBgWXBNjZhD9hr1mvY52eLc+yzz/v8dtdmk9c2tvGaY+DAguGRbJAAWShhgQBFUA6ApFHWaKTp/t7v/3VXz5dDzwwM5311pqbSrXtv3aq6363wfZ3PfcLdrrVWn4NNh68t5PN/mctZI3P5XNdcLt+Us3Kr8gXrsVLuyBMnjuvb+AlvZsZ+JoGPRQL5j4VqOxHdvrJpxNGjuZ/mc/mLUA51TrT5fN4ifdCyrN/lS/n7hk7qvsZZnsUzCWQSiJfAJ1ZBbF5w6IRiQ+5hmnheYDMrLUNRHEZJPFHXtfCdE8d2XxsIm2VmEsgkECiBQmBuJ89curSxb0tD/juWlTuzVLJyUb5YLHVnuXHp0ebizevXW907edMy9jIJdCoJfOIUxNKfLO3Sr9TtC8WW0mwUQxe3csihLPAsLuxQcXyxZB1rFfPTrMaDJ3cq6WfMZBLo5BKo7+T8udibM8cq9Jxw4DwUwDesnNU/V2JL0uW07eBwraX5fM4aWipap1G63AGRRTMJZBKIkMAnSkFcf/m+0Xmr7ltFyxpmlaxC6/yPaKGKAGQjsxfqo38MZFacSSCTgEMCnxgFseC5zf1LxfyX2XCcli/kuhBWmxGoKKqZRGxQS8upT9ySqtrILJJJ4GOQwCdCQayfa3XfX3/gz7EarmNp0TdX9C4tbCMhWHz2aSdFtpKoao1g2Cw3k0AmAZcEOr2CsNh3WGbtPa+umP9KKZ8bxhRPNMurQCZStiJcjc8SmQQyCURLoNMriNcv2DuyLp//Yslig9HK1bcuLIIaZrRBuYydyYrlUE47ViVBlbO8TAKZBDwS6NQKYuncfQNyxeINxVLuEuZ6j9bZ7lYErW0KVh9SFHYJJkjmMglkEkgugU6rIJ55Zm230hFrBguK2RxRDuQ6A5ciTcOCFYEp9YZlBVGt7C3O0pkEMgmESKBT7upzQpHvV3/s1JJVutkq5U7lolNBpxbuS1Fp0lyYwgwploohYsiyMwlkEgiSQKe0IJa80Dg015L/QilvnYWt0K0tz/6y1SGLw3KaIEGyyPIyCWQS8EigUyqIppbiyIJVN4kTyt7OxUQqRWGAQaCo8HRKc8nTIVkyk0BnkkCnVBD5o3UNpXypQdsOtrDMZK9IzpP0yLNS6gOyuD7hVDeealkyk0AmAZ8EOqWCaIHNPLuSracWylDauNZEa8yUBSiBCpC5M2UgszCTQCaBaAl0SgWRQ0Ow/wDnzGyjAVzz3pWwW2jAfM1VgUGVHXP6xJNlZBKIkkCnVBDFsoaAb4ciCNUA7uYFgtkrFXBZgaVuBFkqk0AmgaoEOqWCaOE0Ul+Mqy4JyhcZqkx7I85p71AprWAgso2I8rqlNT+LZRLIJBApgU6pIMSxrixUJ35VU0S2pRXegBkEFa2ByjElWZhJIJNAAgl0SgVRZA8iz9dgfBM64fz2gVUyuFqVQCQZSCaBTAJGAp1SQXAeWT6SZGK7Jnt4wrSnGrpAK7mBy49qjSySSSCTgFcCnVJBtEhDaDY7ZrTZZ2xtgKOwNdMXq9yksHFl9oNPPFlGJoFICXROBWEvMXQ12s97UJ4fyp/DJ+eyBYZfLFlOJoFICXRKBSGO9TXq8m/fkHBqBQyHAL0R2UgVWmx0FvS568xlEsgkkFgCnVJB2JuUTGgpibJzaIU8v5NlWUd497srb3hGv17h0iT5XDHTD0agWZhJIJEEOqWC0D2I8ier3TO6/HN61rvYEKvQEpfwBnhPlw4IanIFAL1CabQ+Caqe5WUS+P9ZAh+ZguBpX88EZ3chiWvBenBPfVYZ6ANrL2uFfyQ2nFtU04XJrULCcdvYMv0QLqCsJJNAgAQ+kikj5QDtCyphABvuLC0xyr+OVfkojP2xmNxhPnv/0MHmLk8UrVITH5FJ/gEZ6rfgi0VMk8xlEsgkkFgCH4mCgJvT8d/Cu36BO5RL5rG+ANX6BSk+BlXKvcaWw8+37vn3HSUSKpOScCuK8uam9i68ni9T2XmhNLOCTAKZBHwS6HAFgdVwIlT/F36kj3pIhtYh5YnPEoJ1Bcrg3RJLi5adzSvmzJkj/WArCKME0CXAm7wIy0JAmcskkEkgsQQ6dA8C5dAHTr6BvxT/XlKuWtAQ2qS0X9jK5XewIfmzI4eLC+6YM/KwcLQwz8uazb8D4d65AFgZFTCUTeYyCWQSSCGBDlMQlf2GWfDyJXyypUWV8aJ9JMlJZxMbm88VW4pP3nHv6N2muIQC4TO2zH2fOjAggSWZfqiKJ4tkEkgkgQ5TEFA/E38vXlZEKqdNykKd9hWtBRxP/qL/iFHrnAi0xpBy4GDDmR0arxoRH/H3IOC/y86dO7sfPXq0W0tLS9c6nJiE/1KXLl2ONjU1Hdm+fXvzueeeK8soWWNCW5m8AL4kEvFSLB8dJ6/bVsgK7a7gsaB9JAgfMN3Il5F4+KPmT/w45FOCfoesS6Gh9oE+3yE75442lI1tNSyZ05io8tQhCgLmRsPL3fhTkvHkhmpBQ9Tl6teC5+lcc9PS669vZViQ2nvgspTrgqUbQ3BKtyk70qlTUAi9unbtOhilMHzHjh3afxmIXtCvivemvAu6AdatliNHjjQVCoW9xx9//I733nvvfco3kr9p8+bNjRdddJG2YdrdgV8TbxRe/SLFvY+89YRrGRSHCDvEQUMKqRf+BPxIZDAM/w75i6B71EsU2U1GgU4ifwcwejhswjcC26EdCK1e0B7DaZdk1BvfTHp7fX29lscfBPFKfmJXkcOxVBiHlyz0cw7bCFfihb9NyqiCvx+4xP8wvNqQdo4fAc8W6r0FPzvTVqZetAN5bzr/Swz+i4GsCb9l1e0utrQ8Ueha/+pfzRl3wEuRMwy+WYkF4Vth+DJcVf3wruKaE7S5sG/fvmP2798/lsE0BWthAsI9DX8CZX2QB78KluuCJ0sXOuxxXiQ8jFf79uDXEH9ryJAhb65YsWIZ8Y3jxo0LfMICm9qBrzuVroCXz8DDFOKasPvJf5u+epzwRfJ3pUYcUQGc6pB+yGMcNM4gLj8OOkOQ0/3El+F9CgKFegZ8au/qKDhWAf8m4RL8G+RtJ92miQQOnwP3IJTBbHBfij8NgJ7kHSW+BWW++PDhwy8uXbp04dSpU/f6KifIAJdkMYZ2fQ5ZcMnP0gSW20r8RfKeJHyz1rbBm8bXZPCL/3OIjyHsAc6Uy3t+cCKfl0J+nro/q2kCUznQgbAe7XsNBG6E0b4AEdVEjp64XmTFlvwadMuav/72iMDO0B6EvYHpwxvxgKEoLR9evoLSWAm9Dxw4oIF/CW2+kHAsdI5BDvXIwygDX9VKx/WkQH4Q6ZMJL2WgbCVcDK7nly1b9sqkSZM2gi+iYUAncxdCYw6g4yq0Ta2ToXUSeZoQD0Gr2RS0JRQ+6o9HOVwBzumkx5LW062OuOTSgJIIJIHsulBHT9pj8KfiLwN+HRP4VeTzB5TxK3369NkZWLmGTHD3hM+7oHkz1YdAvzpgyRtF+RkoiHOIP7ho0aLHzz777FoUaT/w3g3+zxFqbhg3Aryn0QdDadv/JnO1KUgawl8BnDPxd4DrbNKyDmWpJkXhgqPecDJOxzcH95ALPFViMshvocZgfAFmXRNE6STur+eM1BM13PH8kD5OvWTQZYh2crSzcOjQocF07FWgnI3XU7mf8vGpqVBHHcqn/nNang1DVpO6des2edWqVY+88847r7fFmgBvFwbP7eAdLzoe5jQZNRiuwb+GX+UpT5UU/oMHDw5kMs9iwF9N5XOQkSa7i27UWAA+R90qXXD2AH4cGaMpOxu5jGtubn6MpZysizZ3KrLRE/0r+OOqRCsRtQeaPWjPFPGBdbNn7ty5T7EMtE/UvPBhaWho4n6WcqdyELj6vT/hDGBeJ/4ebUq1xGQvaypLsnuodya8prUYxEOQkzK/qd0UBEwOR4i3weQZNNKHl/wgJmrK4yK2vcQoV47A6ynyJGuirUq0rw6zU0uImxnIn6FjpXHtJ2PNSCsVwa0BoxfRZOYOpcNPIvxPTMg/YN7Wuk8wEHwXC3cQf6JH/im0YzxhzQoCPAUm7ggG663gmQ2+kYSBAxZYisKdt5y0eG9A5pOIS4GeCq1fEZ9L3LdMCcfsLmGy12M93EGurRy8dAWtPPpBFqHk8xdYL5sJF6kIn8hR/wrqyyIKcmrbYJTPJEI9/RuDgILywNmLsXgP4VnQaNWqQcAp85DrCN9ETonDBheTmGBfkhBAKtOSQG12Ozbj3Bk1pkoMh3xVFDF95GCjPQx12lqgQ8Yy+O8lPgMvTeugUmOj/NWEUxuberr15WnZe8GCBY9z4tHkB43OgV/x2As8UYC9UXZ60tfkwJ2vKM1vguAq0rKmQuUSw4vL8vTAyjI9ljxZJ8fzYOqFhfV0rRbWlClT9EQ/m7Eb2m7Rl4eu1vl6ZWDt/PnzN51//vnaYEzkwD8sChDcdYypY1ASmj+JFQRK8lPUndHeyqHC64fVaRbFfFQZwirQSZfD4LXAHUdaT0BboM4wqgOi8AeVqS/NVevW69ghNyh5x7skTyXd126LU9tQhDqZ0AbaLNL9ldcWnFF1hRuvzcWp+Ft69OhxwSOPPBL4RI7Co8FH+wP7BfymrwrApMZt6DIGTqD+3+Jn4/vjA+mRb/eFwjDnhFHcwaMdJ0+4tQE3jbbdPnr06AuJ18Q7+yA9mJh9qO+j48xz8HoM+VeisC9AMcnySuSoUx/UFkOj0qYC4yvVnKTelfDfQ7jb08PXEfA93GYLgnW49h2+TEdph1ZvbCYSWFuAJIigh3aZcgh9ZUc+QOM54pSiPwPjTtorZdg7vkb7QECvO/4sZHvzmDFjtoB1RVrM1I+tUpZrLJgPQPzxJPsm4Wx8nKXiqx+UIV6ixhJ0KM7r2PZc4rehoPYRl9mfyoFDijFyUoLfVh4VxKI7Gv952qzl2HJ8rHCNbIUryjn3XqLgTBn4tDdikoEhvGpPI+nmcxFYWTBPUe+nbVIQKIehaK8vgkzHKom1KbBtcrZ+CMWgG5Yepwxe7GrLw55OqGePRWbtX9LmNMpBI1nLgr34JvDo8k03Qq1HddToY5c8n6NOA4NMR1hvLFy4cMu0adM0IRI5TP/IyZYISQQQ4+BGim+kTWpPEgeoZX3wwQeBsMhXMhJIYLnJpBywfAPhxYQfsjm6uWfPnonNfgceE7VDL11Nbk+eNnan46/BiviA5Y3usUQ6T/1AWPAF5kdlIqsBCerp2PxXwPmuDATgLrLM2da9e3cpv+01Kwgu9DSwuaNd2ZkQ1lrZbp0EkYDhAL6SZ9naWBfRYuTpLEY9AO/MSU6vAnkC4V/RvgFJaiIDbZytwy+A36Wkt+APaPCTJ5NQm2IT8ZfhdZQXaSJX5Ku19wysGD0pX8YndrbMEkMnB+TIUcek36BtMr3jKgpgJ/414OcPGjQo8KlG2SvgegQ4KeTBeNuF4Ac8r7smn+bpuwiYX5PWUzCxi5ONky647fEtmvjrqPtWkj0Q0VDdKCc6aS0I8NbF4aV8CxvHTzHpd0XRV5mUtvqFOvZJSk0KgjcqC7169fo0zH2BBp1IaJtoYjSO2TgGk5Tbq1csgrKCCBd6tYSIPXRjx284ddp4E6Xj6cQq2jBoZKBJ8Bh1dK9AtxT3IXRdeio9+uijueuuuy7/2muvdRk2bNjT5P0KU/WzwNwBbm2YRTnJeQr+AhT04hNPPDHxhqVzkIcRSALjrKtxQFqbkifR1ji5aMC9gf8JCm4u90e2MYYCj/M42l1x6qmnfhdl+iRyuZc658GbPcaI+5zKgBsGD7NYBi4EINVJTFy7VS4PDacnmT+FfI2L1fh3fIw5MgwOR5YvKvxpXRK84JTCPNjQ0HAwLf6aFMRdd901ls7QEd/pdOJHsu/gbJiewfaJhC1P/6w3YnaWyILg6xFONInjdMKxtPNLhNrFjnR08gbgfoJ8HjzuuOM+IB1GVJNDS47G1atXr0PDbwL2H0jHLV/05Jr6/vvvj6b+25HMOArB60i1T/RrX/vaeNp5Pfz4rB8PPd3OW4QMv88yYN7QoUMPo9xCGeI4V9bXB+D4/d69e1czzn5AXPs+pmuDGqCxfA5w9ikD9MLk7qrLpqArHZQwbdHTHbzVhyDxevJ0Qe7q5cuXb5swYcLuoPrKA6ZaLwzG0AkrD8pPUkcwLBuCqsfmpVYQaOjjKk+8iyAcO2EMB0kaYmDjQu1B2C9qhQ6xMgbXaEJILGzjUAeWM7CvoGBoYKEjkwGzk3b+gsn+QL9+/XaQjuGQdpRh9q9fv/63LNl05+FG8hxY/VFoHAfM8ZQkUhDsnYQOTtMvJvRTC8+Bhxuop+VlOBDGG3DvIMN/RSYv9e/fP3BZEYSAenphbz1K4m8pH0F8ahCc8igDPK/7HmehPH9P1gblJ3HUcYF505rccuD3eRSELnHdDMxC7qq8WlFuLnxKeHH6ACoZSRSWs67hzZnXnvFUCoJGduVlpNkwcAO+L2l1io8fCcMpTB9AGzPsq9a87h3s3PxUU4DHGsHBCLUu/DwDPE4F6yn5Arf8HsSU+zAEVWj2yJEj97CW/T71H9KElpMMzcBCeTjrHmXjcYszIy4eN5BMn8XhMeXA9969e/efka6K2JQ5Q9rQCOwTWA5PpFEOBgf11dHr9+zZo3snT+B1TyDQAas+mszR5XjCDYFAAZlJZKNqsiDk1C/Gl5P50Tyhb+cYejPptYLxOvj2ZvnSgjE0fIUhGeJdvES5JLTD6qdREHleTZ6G8G+AoWEwRhDNWBjRtua3IJS60HEZ1hEoLe1bpHQ8vXTXYVpcNWSxESXy/A9+8INNcbBh5eyGazLtCSs3+ffdd1+O9X/5sWYyY8K4QaLyOBgnCZSDbv0NialDsbWGQf9kmv0SJx0T79u378Jdu3Y9T1oPqEAHLQ3IUfiTdF/k+uuvT7TMiGmDLReN9TAPvQIKYiZ+AfsnP2P/ZL+XwSQT2VsnSbqj8BraiRUEZtsIKt2MMHXuHPc0Nfg7JKwuMVJglwKvRZ1xrXYCndA/ihQDp4RM3ubpPzftxPXiFS5vXnukk06CpLSQybnAxh1ta4+F5fnyt5LijYDThuxv8FfHjL++yHDkjBkztOGb6EZinGzAo6dhC4pO414boj5lQX4Pyr/OA3QB+JZ4+zEBDVsRoWRAldwJbxxulXPalBypAzKRgmDHXE9RbRJdS2i3QEIyTgyYdFBcZQivhFmc/hFuiDhCKQhtOeqvlQsHgDdqA/HTe7VNvcledAHpfbRvJUuLrQFldhZyKXCCEcgupxph1ZQvmWktV7PsdA8iiTN9mASW9pwOXPX9E/W714GvEb+0Pb5vAZ4iy4w3aMt2aEXtB2kdcDwwxxHGKgguWAWa9c72QPsgfiWTtwc4J+BJlpUE8aqyIDqM/L/hdf07ibvuRnTUk154E7jp8PX01q1bXetUZz3aW2QMbybviU2bNv3e3LOJVRBU7ALii2HkFiprB92Jt2p+uTI9CeqAxtoyduzYRCafp7ovaQtbqsExKN1c+arQicrzD2I/pC9npC/Hk0HbdrG8WE87A3tLx4FLliyZwJXg/sDk9ZTgSWN7oVq3bp2NUXlyWCImbdFpzeTvbGxsfP/NN988WOtkg0cbZ9S/hIMtp/aAbxi4dAsxFCVNlan9bihAygI28A6AczW0qwoiqF3A9Kc/dBEtkYtqgxBAQ18AWwR93ewaAf4+hAR+S4K8q7is9ey2bdt+y8eAqi/Xic8gXoVfeEwohZXG0c5q/Yh6AyiTj3QVXFfD9xyWSj/VUilSQdCgAtbDRAbpV4mfHIk9pJDGU9XSRz7+J76dFARCtQe8e9C3KonWmGFLFodHt5miyBDeqxd1wgCRj25Jbg8rnzVrVnfafh/+EpSDjsZsUA1MxaFRPYaS8nDky3JopryRAbqM7xD8llOkedwf2EV++MwMYEQ0ohz4oopdZbfddptudcqEV+e6ypwJyprYXHU9SZ3laeNc9DnKZueGBLz2YrCHbmZ66Ua1wQG7D7pPkj6D8GrCruLD68nvRh/+HfLRF9gX4+1+iqIRVeagHxhtS90ghODrTZvuQdbziC8LVRAU5tGCegHnJhBNx1Mv+SByEN8Hru+vXbv29WeeeabbMcccU+CiTB5zvMBgLxx77LE5Np9yaM4jSd+x1wQqs+LmpzUVPGi55OxgK3FUEyHSwY9unvk2pkwl2pdnB78rykBXrO0PyZgyyTRIriYP3FIu4mEE/hysCV2s+jl49N2A4IYa5JVQpyJGKXmKqknwBfJRBXBEoN8VK0evpEcqCCZpCz5ULg6UiaLIQnsBe8VrjOtCe9v1CF79cdJJJ61mHD8Mbr2LoU3awP0IykdRfvett956Bwpih+E1jm/RSOsQSeJ+S4Fbx+hj582btzxUQWD29kET6hrw52lYYmEbJiQMiFgMzqUogkUohjNRCjoa1Vt4eoOuO4qigc0T7QC38FR8m/yXVcfgCAtl1ZZlWQY1Yo2uqJsTNRkwoTIy/MFzkYkbur4zcG0JkY0m4xBo3YIXrR/hdWMzkdNAinLgDDWBvfXoL33ByL7iC0+uYmcanCX6uN3kwslJjidb0UnDRbySgK74K5tpQQCevCB83jzJR+3ZuHHjS+DWt0CG47V5TdBqSUgRKwM3Czk9C55fEpdu81D1J0VT9dM41fHymqZ+EKz4Bac9WQIHf+U11vNo1NcAPjYISVCeEYJhWmk2lWSFPIjvCS6ZfXozUU9SvfBioyHUbvfP0VjzyYgdUGUF4R6YQmQUhY004J+/RgCQP+uAP8udA/9dGTTawOpwBy29nHMt9F5HZnrjLpHWAzaSN5UnHZx8Yu8ICl1LH7kosXfB2ugFYa3d2+xQwtr7CHxblHwnfv36e7KdWWqZcetE4I0b/MOHD9+NkvhvyidC4yrCboRSCl7fnbK/Q6ktJtTDL3YiC0daZ/hKWy8CHpTWOnh5Z/r06X4tS2GejhhFeAtI9P1CW4AKjfciNzAM2pzMWe2ayxPXU+9U4McSDscPwKuDU1skTprq0PJ3INS5rV5XsJ1pV5zxY78m5USUII6gYnfCaY+son4J0LUXyBjonQUybZYlcsBX+y8srv5L4k455RR9bPdgGB6TTz91A2fs5lgSmoJhH0bftRhS7n/39w8MTYWUN0E3/g51hbCzblDcyx/fpdSn7h5Hoa7Da9ljK1cpWOOVh9c8upsPJfUVz0G4nXmCSevUZ0HycOZBQ1bXYfJCPeV6SO/Hvwfcv7Hkl5LwfxqO3cv+KIgbYfQKiNPe8v1zMe4UhOJyIHR5O7OD/0mOZfKup4aLql8XM3AiH3au6s7ERmciJK6vJw0NKcuxz0Kx/Zq3ZqDNmuRnZGjqmbxKPoHvqWRAddSsTeNB+N0mMypUPzmdN+0si4vD11GOwrT5KFM0yiaW9TAKvygOZ8JyKWK9IBUJTvkexm6ig39dba7IOxSnl54uYLF5/zz1tA8xgDkiJUjS11/q689yxXwhS+lEFxzSXrX28hbSiC3ALcaHXnNnOcT3lEraiH0V2T3HpT3bcnYtMdiU7MF+wUwQ3YLvbrQhCsPWjCCpmqHSUMDY/JgwhLl2zxZtaQi/EnCSai1VDDVW5dcJlSCut/TU0FaE/kpai56sL1zzgpZvU+7DDz8sDhw4cCEwOsNyrd0lOyM/tasyyBqwviZwAqDNIjvPKGoTgqcv/ZFop17WnPDEuSQwBgc8ryR+BaFrDJlyhZTJqprIdx8frfV41uADVwGldDLhcLzJ9oW0QY/h95FN4v2ZMHwmX3IxcUOQm6GNvBr9EOnRlF0JjJYUpv+cYQO8fJN+04mOqR7YH14aVeCIiBkzESAqehO4/wGPodYwvFlYDYf5BJ9+za4q4GrnwlxhzZo1Z4DsThozEHPOPqdXKMVgnBphT1CT8TGE0g96nTNaRVTbWOUw3cFgtdpyYjJXG6o5nggy0eA4BVnpqf66pzg3c+bMI4sXL/4p5froqr3zL9NQspUzoeLgyrNuPwkF8X+I6+Wj6uA08Yr8pWiint5CV3WqG+eSwBgc8P8nxgm33kvlSxumwB1q32niyJEjTyR7vbsoXWrLli3at5JCagjjU/nQ0wDXhZ9ElpW4UL0wnIbLoDGP0n+bd5Meo+444E5Wf+CdysEoAp1q6Dc+DLpQeqqfxiXhHZgj9FXjaaedtisNbsFWFQS3v4ZyyvB1BusUdp5z8iC18YkJCcjZwLSE2hNeL2vp8yo6l0jlajvm3ACNNfiJEbTUq6cgo0u5kr5q8ODB3vfurbPOOksmeazjrU79VN8laPQRyFtrblvukr2nH5qZpOW3umKxlidBHFiawQkv+u2OXYRRVozGlz4NcDnHgw9wTBhq4sbxhhV0Ovzpk3aRR6vg2QzMWi6lJd6DkIyjHPgCi+FHtzufo78mE9fpki5nEfiUhMaHjoUD8ZhMlTsfxiY/KozDqbpJYMJo2BqA9VQDv+j0VV6Imal7CuxQ2081oyDCKn9c+erQ8odopbhS+BoYprObofc7wuje5YO9wMziGO6cyq8cpaZGR9ahGE4j/CKVo05FtJexDtgdSYnYMpPcIrysmqRu1KhR+kWo+Rp8UR56QyifDd5zavngrvh59913B4Ln6/hh+FB6gFJcehtl8rbqJXVR/KtMNOWDHPNlN5P61/S93r9o1pwxnnQ1HkfDlAfRiMpTnxn+osIoHFFlOjbKs4n2Z1gPX+SKqP1rR2pYZ3bqqqBTDPVhqGfsh3VyXFuRkY619kTBAaN12CRo3IxJPSWtklA/sEE8mvq3EddSL8rtAGYZCj2xggA+dGKpzAyuKKLOMsaINrUepq6OO0NxA9OF8qnUvWXy5MkTibeuV50IQ+LcxxlEndvxV4FL4zWKlvpoKXDrQ9AFZgfhBEdVJipXOsyxCbkCpfAQfhPePtUwykGhvMHhxBsUD6MRlp8Er2BqdfWcaY/lqXcvCPSTY7Xi+UjrlcSmrcPSNrw2xcey621k8ywdrUtjUUh6ATOTju/BE/YBlgvzURZ74TaSUT1ZmQj6jsHt1P1zaHSNEGgRGovhaVHS34LABI5AVy7SINJATunmwe986lwSU68v5dr8rufrWb/k7c5FUV9fEi7dxWGyjYf3m0l+Dt8b73PiWw7edaKyHP+K2YH3AQdkJDnFCKjmyoK2lhq/g1/tRXyFtN4olbNlqlDO8Gon2umflEwSV/PbnFyZ1dpJnw5LPTqSMNYRMLZQYgeztzkaSMmE6eUZ+Rxlh/cnTOCLKRvsLXemGQT9gNcPmZyIRfYiJxs6NlrBANrJ/QG9FWgzIQujd+/eOonQjbxPgeNK/DR8Tyc+bxzYjdB4lrqBHybxwpt0koGUBMbgU8iewj6snh/Ck376oL+zzBmnDBD7o7ba7R/B/tar1HsYeSwj7XsqoRzGIJfPgGMGdafhI2UiWsDsIHieNryldBpH3VjwOBgtNTgB/AXtmYK/AIT2RUDiVQsiDoeY6KBjztj2hQHU0xFXwnji3fAwRB9lfgtTrMCWgM4x5LyqoMyLv9MTjINy1YD/WFrLGAQyI+9kwsdd9NL+gTauhiNbPV3f47sSW/jgzm524w8yiHUC0YtwMLj0wVedfmitXt00DmBBWYeA+T3+D1gmh0NgArOpE5jf1kzk8gqK8Fe05y5ohC4fKNPmoiysqYRjoLuVD/fqCDno9UX90pUeXLpoFCcTTUBd3NIxsn5hyz6/T9Mu6oaCR5V5K7F3t4aXyR6AH13FHoy3h2YliFymGFwG1qTjQh5augTlUrJenhmzDYy/ERzL9vUqIE7MbBImH33A1lbLrokTJ+pNVFv4w+OY6GzlsqrKhr67Y4MVRSv3EeOgFSgkNmDAAA28n7MBdioCv5yJHalU6SR9K0G/NKbboxPoeN1i08/J67hLa+l6vF7Eso8+KQuhXM3WJ+1eowN/g3m+vpqbIKIlBnVjIeEnFsYLoN8L5abgPzPQxlH2aXBEEqJcSkQ3x/qhWAJlCK8DkMdAwiTKQXshb4LzF1h5q738JUmbdpswqE4S+QFT5LX8p/n03DnEb8LL8iEo70FE4Tc0BZvGcR/jEO0HdXmfxIQaTybOeNXy9YeM2RbGT47Q9oKRU5pyk6c9pfVvvPHG41wTf1UdENsJNpZ2+EfjNQK1hpbaaibUR0klQT1F9r/88suJqBStUlPBKkhNBMKHiFjSiJ2FgQjJFO+4dxH2PyLYIWTpFl0IKRcWweiIy95XqLQ37XpUMlsJ3V+i3V8n7npiuKiFJMxgCCm2s8EbVRxaxpHippUrV/49A20QOCbQxtoQVShowCZx0KJZpQ3Q0xuu88I+GBuHK4ls1G9JHG/t7oWX/9CkBP5svH0xTnXjcKicegJN7FhqbqfeOLVBXrIzcUc4GJhBBqn62elFU7AKqa85Iiv3DKyOe/QU080/bSK1t9MLM/puwS6IbSPcCAEdjSlvP4zo7rfO8sWYRsRGXo1NNDKslvxm9rNbr6WFcO4ZpQeRyu4Q0ETZ8H0EnhdgRXyPcA7p0wk9ZBKhSgMk5aBju/tRDk/piZ2msoGFTxMNDZPAhFWmjxdQ/9v4OcDoFCZSLrQpDJU9WIPKnfxRrsfmFsbOv/FUfGT8+PHaDK7JOfGGIUgCY+qyx7KScf1PpP8TPvspX/U1CWNcEWsv0RwweMD/CvHLHGkTdYVO/hUP81SShaf7HFrm/Y0UxEKIzHBhqyEBHq2J9daeNs+W4VfiN+G3I6wDbIYeZhNHN7r00Y8Sm3YlbqLZR0Jill18SS9+FAuopWWJVVe/m9uUetM0fKRRKAeA8G4tlqyaTFAbSeUfsmriMtTzaG6ZYt8g/SnCjrLCjiKvP0H6h0yC55kEvmvcTt7C4nS0LDZNqKjHk446BFeT04nKggULXmSfZh+K7DsguRDvk4v6Wg652WHYP8EZWC8M+XpJSOPrfsbWo9CuWfGz9paM9eZn4MlRhQc9jBK/HUrbtC/wDHV+g9evscn8DG0PMHKS/w5OpyKP021Ixz94fwQZ3EXWQEd2bDRO/iCQ5XO+fm9Sv3Q0nYyoK7M+glRWT+/DbySuSyLaJNIE3Mqxqb7R2FT5NSmtncujgsL2cAfrWzZ1LxaeY4zdCr7AjhUdDCmbHMR300GLi3sP6EZkm51uSvLeylzW0LKGxMM1eGnddnEVeUm2LxK/H4tlCZPAezszMS3qb2eNKeU9JKKS3l2QQq/ZnXvuuU18FGgR6+J7UEqSi24+Bp5uaMLQtlBaKve6ily0NJ3PpNC+x6vm24le2KRpFP0uNlrfBX5sEM0KHt0Y3ZAUp+DgURvKPyJ6MfGxyovAr+Lt+Df5LGPafl4P3vuh8V3q2wqZuPCFurhyR8W6AheknqUz/4NKsaYNMPBiqQHLif+Y8CY66jqeGN/E/xc/KruA9+XX8U27nZpEwGhTzt/TDg5qic6bd1FLqbnln1gt/UlWW5jHYuAV7xI3Ia2X8A++sHxGWuGHsqfvDbJGW8Lk+zZAd9POuYQ1mf+GSEVWkpne5/gWsv061sp8dpTbxDcv4EjZ/Ix+1oaebeo6Q/r0AGndrVhqeKk15L2TZvYjlvHg+Q447wT3y3gtJ11mreiHOZV54UmL91X47yGfW5HNC21VDqKv69/g/DH47XclAujKUnwdejLl07r3qKCn+8YAvM42as3/Eu3SXZtU8wX4FhTcv1D/gYollJbHUHhwL6nn32F2Xr/LU18fU/0yDfGdOQOjdfCHYHqJ8icR1hIUwgf8hJr2GWIVSygHbSh4YfGFGy45e+GX84Wj/woPF4DKc8SGoC2LCZt/hnnxvRcXXbCiDeQCq1barn2VX7OD/gJAlyCbawmnUqYXrTw8BaKxM4HfB7yWE3r55/+yDNtS66ablwq4LS4o/Zglnu5cXE+5Xi4zToPzSZTDv2ClNJrMtoSV36PYzl2PR8H7CjK5DLqfoV1nE+oEI2qpY2+0MdhtFoA9TJ3VhI/A52OcEKyHz8TmfpJ2YIk8CJ+nAHsrtJxX3HV8+hJ0f8S7NFuS4HLCgIvq1jzyrmW+/APx8/FOi1cXRPaQ9zD0/5kHwTZn/aRxbnIKx70slzYgt6/C73DqRpsRAoiwNCjTVf7vVpHw3cQ+LDUuR0n8BXVPh0gfiOptve34ecQfp9JbrDF13CeFkUrTUacD3JzCmWfOHNir0Dyb1+g+D4FhGHJdMV4P88Nba9AQv7MKdU+89NoLmG/pfmgmLbPIR7Ks565DX+Q4kviZyE272HodeACTRN9GqCdPT3A9PvVREz3ZN1C+hEH6R5YBK7BI9mJmdoTllf/jH/94HBbjDOhew0AaDBvv049/YCA89dxzz21jkzj8sQ6jNbo8ikKmb1+8jojPo72Sy7O0+b+0LPHi5c3XG5CFfvNzFbDzqLOcJd3OK664Qg+kDhl3WL99oHM5/hpoDIduI/J5mfjjKOoNhDXLBlwFXoYceOjQoYvAfynpk2mzBf514H0aP+/pp59ubKv8wduDB4twXwbuc+nXQYT2C3+ELsuRMWCnFVLPGT8K7BvU/TX5r/8/j40HcI8c53QAAAAASUVORK5CYII=", xo = { class: "layout-shell w-full flex flex-col" }, Eo = { class: "layout-shell__body flex flex-1 min-h-0 overflow-hidden" }, Mo = { class: "layout-shell__main flex flex-col flex-1 min-h-0 min-w-0 h-full" }, Do = { class: "layout-shell__content flex-1 w-full min-h-0 flex flex-col overflow-hidden" }, No = /* @__PURE__ */ N({
2445
+ __name: "BaseLayout",
2446
+ props: {
2447
+ setting: {}
2448
+ },
2449
+ setup(o) {
2450
+ const e = o, t = T(() => {
2451
+ var p, f, b, P, L, k, U;
2452
+ return {
2453
+ ...e.setting || {},
2454
+ logo: ((p = e.setting) == null ? void 0 : p.logo) || Lo,
2455
+ menus: ((f = e.setting) == null ? void 0 : f.menus) || [],
2456
+ accountMenu: ((b = e.setting) == null ? void 0 : b.accountMenu) || [],
2457
+ user: ((P = e.setting) == null ? void 0 : P.user) ?? null,
2458
+ appList: ((L = e.setting) == null ? void 0 : L.appList) || [],
2459
+ onLogin: (k = e.setting) == null ? void 0 : k.onLogin,
2460
+ onLogout: (U = e.setting) == null ? void 0 : U.onLogout
2461
+ };
2462
+ });
2463
+ Me(() => void It(t.value));
2464
+ const { isMobile: n, sideOpen: a } = Et();
2465
+ let s = "", r = !1;
2466
+ const c = () => void (a.value = !1), h = (p) => {
2467
+ const f = p.matched[1];
2468
+ if (!f) return p.path;
2469
+ const b = i(f, p);
2470
+ return [f.path, b].filter(Boolean).join("|");
2471
+ }, i = (p, f) => Array.from(
2472
+ p.path.matchAll(/:(\w+)/g),
2473
+ ([, P]) => P
2474
+ ).map((P) => {
2475
+ const L = f.params[P];
2476
+ return `${P}:${Array.isArray(L) ? L.join(",") : L || ""}`;
2477
+ }).join("|"), g = (p) => {
2478
+ p.key === "Escape" && n.value && a.value && c();
2479
+ };
2480
+ return le(
2481
+ () => n.value && a.value,
2482
+ (p) => {
2483
+ if (!(typeof document > "u")) {
2484
+ if (p && !r) {
2485
+ s = document.body.style.overflow, document.body.style.overflow = "hidden", r = !0;
2486
+ return;
2487
+ }
2488
+ !p && r && (document.body.style.overflow = s, r = !1);
2489
+ }
2490
+ },
2491
+ { immediate: !0 }
2492
+ ), Le(() => {
2493
+ window.addEventListener("keydown", g);
2494
+ }), xe(() => {
2495
+ window.removeEventListener("keydown", g), typeof document < "u" && r && (document.body.style.overflow = s);
2496
+ }), (p, f) => {
2497
+ const b = E("router-view");
2498
+ return l(), v("div", xo, [
2499
+ _(fo, null, {
2500
+ default: w(() => [
2501
+ V(p.$slots, "header-right", {}, void 0, !0)
2502
+ ]),
2503
+ _: 3
2504
+ }),
2505
+ d("div", Eo, [
2506
+ m(n) ? (l(), I(Io, { key: 1 })) : (l(), I(Ht, { key: 0 })),
2507
+ d("main", Mo, [
2508
+ d("div", Do, [
2509
+ _(b, null, {
2510
+ default: w(({ Component: P, route: L }) => [
2511
+ _(Se, {
2512
+ name: String(L.meta.transition || "layout-page"),
2513
+ mode: "out-in"
2514
+ }, {
2515
+ default: w(() => [
2516
+ (l(), v("div", {
2517
+ key: h(L),
2518
+ class: "layout-page-view"
2519
+ }, [
2520
+ (l(), I(he(P)))
2521
+ ]))
2522
+ ]),
2523
+ _: 2
2524
+ }, 1032, ["name"])
2525
+ ]),
2526
+ _: 1
2527
+ })
2528
+ ])
2529
+ ])
2530
+ ]),
2531
+ _(Se, { name: "layout-overlay" }, {
2532
+ default: w(() => [
2533
+ m(n) && m(a) ? (l(), v("div", {
2534
+ key: 0,
2535
+ class: "layout-shell__overlay",
2536
+ onClick: c
2537
+ })) : x("", !0)
2538
+ ]),
2539
+ _: 1
2540
+ })
2541
+ ]);
2542
+ };
2543
+ }
2544
+ }), Ho = /* @__PURE__ */ B(No, [["__scopeId", "data-v-bcf098e8"]]);
2545
+ export {
2546
+ Ho as BaseLayout,
2547
+ Oo as LayoutBreadcrumb,
2548
+ Fo as TimezoneSelect,
2549
+ Ie as UserAvatar,
2550
+ oo as UserInfo,
2551
+ ue as i18n,
2552
+ W as injectLayoutContext,
2553
+ re as messages,
2554
+ xt as provideLayoutContext,
2555
+ It as provideSetting,
2556
+ qe as useApp,
2557
+ Q as useSetting,
2558
+ Et as useStateHook,
2559
+ Qe as useTheme
2560
+ };