labull-framework 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,11 @@
1
+ /** 开 / 关那个整页导航(app bar 左上角那个按钮与盖层里的动作共用)。 */
2
+ declare function toggleNav(): void;
3
+ declare function closeNav(): void;
4
+ /** 外壳里那几个组件读的东西。 */
5
+ export declare function useViewport(): {
6
+ portrait: import("vue").Ref<boolean, boolean>;
7
+ navOpen: import("vue").Ref<boolean, boolean>;
8
+ toggleNav: typeof toggleNav;
9
+ closeNav: typeof closeNav;
10
+ };
11
+ export {};
package/dist/ui.js CHANGED
@@ -1,5 +1,5 @@
1
- import { A as e, P as o, a as t, b as l, _ as T, U as b, i as r, l as i } from "./chunk-index-DfIoolMt.js";
2
- import { T as n, a as p, c as u, f as d, i as P, b as f, o as x, p as A, s as v, u as C, d as S } from "./chunk-ProductShell.vue_vue_type_style_index_0_scoped_f78521a6_lang-qtJ-k8Ss.js";
1
+ import { A as e, P as o, a as t, b as l, _ as T, U as b, i as r, l as i } from "./chunk-index-B5pTPy31.js";
2
+ import { T as n, a as p, c as u, f as d, i as P, b as f, o as x, p as A, s as v, u as C, d as S } from "./chunk-ProductShell.vue_vue_type_style_index_0_scoped_0fb37099_lang-BpRKKThg.js";
3
3
  export {
4
4
  e as AppSearch,
5
5
  o as ProductShell,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "labull-framework",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "Labull 前端 SDK:主题 CSS + 登录态 / 外壳组件 / magic block(四块合一,一个包)",
@@ -1,118 +0,0 @@
1
- import { reactive as y, computed as l, provide as k, inject as d } from "vue";
2
- import { useRouter as m } from "vue-router";
3
- const r = y({ tabs: [], active: "" });
4
- let c = null;
5
- function C(t) {
6
- c = t;
7
- }
8
- function a(t) {
9
- return typeof t == "string" && t.trim() ? t.trim() : "";
10
- }
11
- function T(t) {
12
- const o = t.split("/").filter(Boolean).pop();
13
- return { title: o ? decodeURIComponent(o) : "首页", icon: "pi pi-file" };
14
- }
15
- function f(t) {
16
- return r.tabs.find((o) => o.key === t);
17
- }
18
- function b(t, o, n) {
19
- const e = f(t);
20
- if (e) {
21
- const u = a(n?.title);
22
- u && (e.title = u);
23
- const p = a(n?.icon);
24
- return p && (e.icon = p), r.active = e.key, e.key;
25
- }
26
- const i = T(o), s = {
27
- key: t,
28
- path: o,
29
- title: a(n?.title) || i.title,
30
- icon: a(n?.icon) || i.icon
31
- };
32
- return r.tabs.push(s), r.active = s.key, s.key;
33
- }
34
- function h(t, o) {
35
- const n = c ? c.resolve(t) : { fullPath: t, path: t.split("?")[0] ?? t, matched: !0 };
36
- if (!n.matched)
37
- return console.warn(`[labull] 这个应用里没有页面 ${t}:先把它加进路由表,再开标签。`), "";
38
- const e = b(n.fullPath, n.path, o);
39
- return c && c.current() !== e && c.go(e), e;
40
- }
41
- function g(t) {
42
- f(t) && (r.active = t, c && c.current() !== t && c.go(t));
43
- }
44
- function j(t, o, n) {
45
- return b(t, o, n);
46
- }
47
- function x(t) {
48
- const o = r.tabs.findIndex((i) => i.key === t);
49
- if (o < 0) return "";
50
- const n = r.tabs.filter((i) => i.key !== t);
51
- if (r.tabs = n, r.active !== t) return "";
52
- const e = n[o] ?? n[o - 1] ?? n[n.length - 1];
53
- return e ? (r.active = e.key, c && c.current() !== e.key && c.go(e.key), e.key) : (r.active = "", "");
54
- }
55
- function _(t, o, n) {
56
- const e = f(t);
57
- if (!e) return;
58
- const i = a(o);
59
- i && (e.title = i);
60
- const s = a(n);
61
- s && (e.icon = s);
62
- }
63
- function w() {
64
- return {
65
- tabs: l(() => r.tabs),
66
- active: l(() => r.active),
67
- openTab: h,
68
- activateTab: g,
69
- closeTab: x
70
- };
71
- }
72
- const I = (t, o) => {
73
- const n = t.__vccOpts || t;
74
- for (const [e, i] of o)
75
- n[e] = i;
76
- return n;
77
- }, v = "labull:tab";
78
- function B(t) {
79
- const o = m(), { active: n } = w(), e = () => o.resolve(t.key), i = {
80
- key: t.key,
81
- path: t.path,
82
- get params() {
83
- return e().params;
84
- },
85
- get query() {
86
- return e().query;
87
- },
88
- active: l(() => n.value === t.key),
89
- setTitle(s, u) {
90
- _(t.key, s, u);
91
- }
92
- };
93
- return k(v, i), i;
94
- }
95
- function E() {
96
- const t = d(v, null);
97
- if (!t) throw new Error("[labull] 这里不在标签页里:页面与 magic block 必须放在外壳的标签内容区(标签页)里。");
98
- return t;
99
- }
100
- function N(t, o) {
101
- if (!o || typeof o.resolve != "function") return !1;
102
- const n = o.resolve(t), e = n?.params ?? {}, i = n?.query ?? {};
103
- return Object.keys(e).length > 0 || Object.keys(i).length > 0;
104
- }
105
- export {
106
- v as T,
107
- I as _,
108
- g as a,
109
- N as b,
110
- x as c,
111
- w as d,
112
- j as f,
113
- C as i,
114
- h as o,
115
- B as p,
116
- _ as s,
117
- E as u
118
- };
@@ -1,543 +0,0 @@
1
- import { defineComponent as N, ref as L, computed as $, watch as ie, onMounted as H, onBeforeUnmount as q, openBlock as n, createElementBlock as s, createElementVNode as o, withDirectives as z, withKeys as j, withModifiers as B, vModelText as re, Fragment as S, renderList as V, toDisplayString as g, createCommentVNode as m, normalizeClass as M, unref as k, createBlock as Z, resolveDynamicComponent as ce, normalizeProps as de, mergeProps as ve, createTextVNode as U, renderSlot as G, createVNode as K, vShow as X } from "vue";
2
- import { useRouter as J, useRoute as ee, RouterView as fe } from "vue-router";
3
- import { o as F, _ as R, d as te, p as pe, f as be, i as Y } from "./chunk-ProductShell.vue_vue_type_style_index_0_scoped_f78521a6_lang-qtJ-k8Ss.js";
4
- import { u as he, e as D, g as me, i as _e, d as ke, l as ye, a as $e } from "./chunk-index-BWpDbB19.js";
5
- const ge = ["onKeydown"], we = {
6
- key: 0,
7
- class: "labull-search-panel",
8
- role: "listbox"
9
- }, Ce = ["aria-selected", "onMouseenter", "onMousedown"], Pe = { class: "labull-search-path" }, xe = {
10
- key: 0,
11
- class: "labull-search-empty"
12
- }, Le = /* @__PURE__ */ N({
13
- __name: "AppSearch",
14
- setup(t) {
15
- const u = (d) => typeof d == "string" && d.trim() ? d.trim() : "";
16
- function f(d) {
17
- const c = /* @__PURE__ */ new Set(), h = [];
18
- for (const P of d) {
19
- const l = u(P?.path);
20
- !l || c.has(l) || l.includes(":") || l.includes("*") || P.redirect || !P.components?.default || P.meta?.tab === !1 || (c.add(l), h.push({ path: l, title: u(P.meta?.title) || u(P.meta?.sub) || l }));
21
- }
22
- return h;
23
- }
24
- const a = J(), v = L(""), p = L(!1), r = L(0), _ = L(null), y = L(null), w = $(() => f(a.getRoutes())), C = $(() => {
25
- const d = v.value.trim().toLowerCase();
26
- return d ? w.value.filter((c) => `${c.title} ${c.path}`.toLowerCase().includes(d)).slice(0, 8) : w.value.slice(0, 8);
27
- });
28
- ie(C, () => {
29
- r.value = 0;
30
- });
31
- function i(d) {
32
- d && (F(d.path), v.value = "", p.value = !1, y.value?.blur());
33
- }
34
- function x(d) {
35
- const c = C.value.length;
36
- c > 0 && (r.value = (r.value + d + c) % c), p.value = !0;
37
- }
38
- function A() {
39
- if (v.value) {
40
- v.value = "";
41
- return;
42
- }
43
- p.value = !1, y.value?.blur();
44
- }
45
- function T(d) {
46
- (d.ctrlKey || d.metaKey) && d.key.toLowerCase() === "k" && (d.preventDefault(), p.value = !0, y.value?.focus());
47
- }
48
- function I(d) {
49
- p.value && !_.value?.contains(d.target) && (p.value = !1);
50
- }
51
- return H(() => {
52
- document.addEventListener("mousedown", I), window.addEventListener("keydown", T);
53
- }), q(() => {
54
- document.removeEventListener("mousedown", I), window.removeEventListener("keydown", T);
55
- }), (d, c) => (n(), s("div", {
56
- ref_key: "box",
57
- ref: _,
58
- class: "labull-search-box"
59
- }, [
60
- c[7] || (c[7] = o("i", { class: "pi pi-search" }, null, -1)),
61
- z(o("input", {
62
- ref_key: "input",
63
- ref: y,
64
- "onUpdate:modelValue": c[0] || (c[0] = (h) => v.value = h),
65
- class: "p-inputtext p-component labull-search-input",
66
- type: "search",
67
- placeholder: "搜索… [Ctrl+K]",
68
- "aria-label": "搜索页面",
69
- autocomplete: "off",
70
- onFocus: c[1] || (c[1] = (h) => p.value = !0),
71
- onInput: c[2] || (c[2] = (h) => p.value = !0),
72
- onKeydown: [
73
- c[3] || (c[3] = j(B((h) => x(1), ["prevent"]), ["down"])),
74
- c[4] || (c[4] = j(B((h) => x(-1), ["prevent"]), ["up"])),
75
- c[5] || (c[5] = j(B((h) => i(C.value[r.value]), ["prevent"]), ["enter"])),
76
- j(B(A, ["prevent"]), ["esc"])
77
- ]
78
- }, null, 40, ge), [
79
- [re, v.value]
80
- ]),
81
- p.value && v.value ? (n(), s("div", we, [
82
- (n(!0), s(S, null, V(C.value, (h, P) => (n(), s("button", {
83
- key: h.path,
84
- class: "labull-search-item",
85
- type: "button",
86
- role: "option",
87
- "aria-selected": P === r.value,
88
- onMouseenter: (l) => r.value = P,
89
- onMousedown: B((l) => i(h), ["prevent"])
90
- }, [
91
- c[6] || (c[6] = o("i", { class: "pi pi-file" }, null, -1)),
92
- o("span", null, g(h.title), 1),
93
- o("small", Pe, g(h.path), 1)
94
- ], 40, Ce))), 128)),
95
- C.value.length === 0 ? (n(), s("p", xe, "未找到匹配项")) : m("", !0)
96
- ])) : m("", !0)
97
- ], 512));
98
- }
99
- }), le = /* @__PURE__ */ R(Le, [["__scopeId", "data-v-cc41c707"]]), Te = { class: "labull-rail" }, Ee = { class: "labull-rail__group" }, Me = ["title"], Se = { class: "labull-rail__label" }, Ie = {
100
- key: 1,
101
- class: "labull-rail__divider"
102
- }, Ae = ["title", "aria-expanded", "onClick", "onMouseenter"], Oe = { class: "labull-rail__label" }, Be = ["title"], Ue = { class: "labull-rail__brand-name" }, Ne = ["aria-hidden"], Ke = { class: "labull-menu__header" }, De = { class: "labull-menu__title" }, Ve = { class: "labull-menu__list" }, Re = ["onClick"], je = /* @__PURE__ */ N({
103
- __name: "ProductSide",
104
- props: {
105
- items: {},
106
- brand: {},
107
- home: {},
108
- homeTitle: {},
109
- homeIcon: {}
110
- },
111
- setup(t) {
112
- const u = t, f = ee();
113
- function a(e) {
114
- return e.path || e.title;
115
- }
116
- function v() {
117
- return !!u.home && f.path === u.home;
118
- }
119
- const p = L(!1), r = L(!1), _ = L(null);
120
- function y(e) {
121
- return e.path ? f.path === e.path ? !0 : f.path.startsWith(`${e.path}/`) && e.path !== "/" : !1;
122
- }
123
- function w(e) {
124
- return e.children?.length ? e.children.some((E) => y(E)) : y(e);
125
- }
126
- const C = $(() => u.items.find((e) => w(e)) ?? u.items[0]), i = $(() => (_.value ? u.items.find((E) => a(E) === _.value) : void 0) ?? C.value), x = $(() => T.value ? i.value : C.value), A = $(() => {
127
- const e = i.value;
128
- return e ? e.children?.length ? e.children : [e] : [];
129
- }), T = $(() => u.items.length > 0 && (r.value || p.value));
130
- function I() {
131
- p.value = !0;
132
- }
133
- function d() {
134
- p.value = !1, _.value = null, r.value = !1;
135
- }
136
- function c(e) {
137
- _.value = a(e);
138
- }
139
- function h(e) {
140
- r.value = !0, _.value = a(e), e.onClick?.(e);
141
- }
142
- function P(e) {
143
- if (r.value = !1, e.onClick) {
144
- e.onClick(e);
145
- return;
146
- }
147
- e.path && F(e.path, { title: e.title, icon: e.icon });
148
- }
149
- function l() {
150
- r.value = !1, _.value = null, u.home && F(u.home);
151
- }
152
- return (e, E) => (n(), s("nav", {
153
- class: "labull-nav",
154
- "aria-label": "主导航",
155
- onMouseenter: I,
156
- onMouseleave: d
157
- }, [
158
- o("div", Te, [
159
- o("div", Ee, [
160
- t.home ? (n(), s("button", {
161
- key: 0,
162
- class: M(["labull-rail__btn", { "is-active": v() }]),
163
- type: "button",
164
- title: t.homeTitle || "首页",
165
- onClick: l
166
- }, [
167
- o("i", {
168
- class: M(t.homeIcon || "pi pi-home")
169
- }, null, 2),
170
- o("span", Se, g(t.homeTitle || "首页"), 1)
171
- ], 10, Me)) : m("", !0),
172
- t.home && t.items.length > 0 ? (n(), s("span", Ie)) : m("", !0),
173
- (n(!0), s(S, null, V(t.items, (b) => (n(), s("button", {
174
- key: a(b),
175
- class: M(["labull-rail__btn", { "is-active": b === x.value }]),
176
- type: "button",
177
- title: b.title,
178
- "aria-expanded": T.value && b === i.value,
179
- onClick: (Q) => h(b),
180
- onMouseenter: (Q) => c(b)
181
- }, [
182
- o("i", {
183
- class: M(b.icon || "pi pi-folder")
184
- }, null, 2),
185
- o("span", Oe, g(b.title), 1)
186
- ], 42, Ae))), 128))
187
- ]),
188
- t.brand ? (n(), s("div", {
189
- key: 0,
190
- class: "labull-rail__brand",
191
- title: t.brand
192
- }, [
193
- o("span", Ue, g(t.brand), 1)
194
- ], 8, Be)) : m("", !0)
195
- ]),
196
- o("aside", {
197
- class: M(["labull-menu", { "is-open": T.value }]),
198
- "aria-hidden": !T.value
199
- }, [
200
- o("div", Ke, [
201
- o("div", De, g(i.value?.title), 1)
202
- ]),
203
- o("div", Ve, [
204
- (n(!0), s(S, null, V(A.value, (b) => (n(), s("button", {
205
- key: a(b),
206
- class: M(["labull-menu__item", { "is-active": y(b) }]),
207
- type: "button",
208
- onClick: (Q) => P(b)
209
- }, [
210
- o("i", {
211
- class: M(b.icon || "pi pi-file")
212
- }, null, 2),
213
- o("span", null, g(b.title), 1)
214
- ], 10, Re))), 128))
215
- ])
216
- ], 10, Ne)
217
- ], 32));
218
- }
219
- }), ne = /* @__PURE__ */ R(je, [["__scopeId", "data-v-75a2f672"]]), Ge = {
220
- key: 0,
221
- class: "labull-tabbar",
222
- role: "tablist"
223
- }, We = ["aria-selected", "title", "onClick"], ze = ["onClick"], Fe = /* @__PURE__ */ N({
224
- __name: "ProductTabs",
225
- props: {
226
- home: { default: "/" }
227
- },
228
- setup(t) {
229
- const u = t, { tabs: f, active: a, activateTab: v, closeTab: p, openTab: r } = te();
230
- function _(w) {
231
- v(w);
232
- }
233
- function y(w) {
234
- p(w) || f.value.length === 0 && r(u.home);
235
- }
236
- return (w, C) => k(f).length > 0 ? (n(), s("div", Ge, [
237
- (n(!0), s(S, null, V(k(f), (i) => (n(), s("button", {
238
- key: i.key,
239
- class: M(["labull-tab", { "is-active": i.key === k(a) }]),
240
- type: "button",
241
- role: "tab",
242
- "aria-selected": i.key === k(a),
243
- title: i.title,
244
- onClick: (x) => _(i.key)
245
- }, [
246
- i.icon ? (n(), s("i", {
247
- key: 0,
248
- class: M(i.icon)
249
- }, null, 2)) : m("", !0),
250
- o("span", null, g(i.title), 1),
251
- o("i", {
252
- class: "pi pi-times labull-tab__close",
253
- title: "关闭",
254
- onClick: B((x) => y(i.key), ["stop"])
255
- }, null, 8, ze)
256
- ], 10, We))), 128))
257
- ])) : m("", !0);
258
- }
259
- }), oe = /* @__PURE__ */ R(Fe, [["__scopeId", "data-v-02d7624f"]]), He = /* @__PURE__ */ N({
260
- __name: "TabPage",
261
- props: {
262
- tab: {}
263
- },
264
- setup(t) {
265
- const u = t;
266
- pe(u.tab);
267
- const f = J();
268
- function a() {
269
- return f.resolve(u.tab.key);
270
- }
271
- const v = $(() => {
272
- const r = a().matched;
273
- return r[r.length - 1]?.components?.default ?? null;
274
- }), p = $(() => {
275
- const r = a().matched[a().matched.length - 1]?.props?.default;
276
- return r === !0 ? a().params : typeof r == "function" ? r(f.resolve(u.tab.key)) : r && typeof r == "object" ? r : {};
277
- });
278
- return (r, _) => v.value ? (n(), Z(ce(v.value), de(ve({ key: 0 }, p.value)), null, 16)) : m("", !0);
279
- }
280
- }), qe = ["aria-expanded"], Je = { class: "labull-avatar" }, Qe = { class: "labull-topbar__username" }, Xe = {
281
- key: 0,
282
- class: "labull-user__panel"
283
- }, Ye = { class: "labull-user__who" }, Ze = { class: "labull-user__title" }, et = {
284
- key: 0,
285
- class: "labull-user__work"
286
- }, tt = {
287
- key: 0,
288
- class: "labull-user__groups"
289
- }, lt = { class: "labull-user__row" }, nt = /* @__PURE__ */ N({
290
- __name: "UserMenu",
291
- setup(t) {
292
- const { user: u, logout: f } = he(), a = L(!1), v = L(!1), p = L(null), r = $(() => u.value?.name || "当前用户"), _ = $(() => r.value.slice(0, 1));
293
- function y() {
294
- a.value = !1, v.value = !1;
295
- }
296
- function w(C) {
297
- a.value && !p.value?.contains(C.target) && y();
298
- }
299
- return H(() => document.addEventListener("mousedown", w)), q(() => document.removeEventListener("mousedown", w)), (C, i) => (n(), s("div", {
300
- ref_key: "box",
301
- ref: p,
302
- class: "labull-user"
303
- }, [
304
- o("button", {
305
- class: "p-button p-button-text p-button-sm labull-topbar__user",
306
- type: "button",
307
- "aria-expanded": a.value,
308
- onClick: i[0] || (i[0] = (x) => a.value ? y() : a.value = !0)
309
- }, [
310
- o("span", Je, g(_.value), 1),
311
- o("span", Qe, g(r.value), 1),
312
- i[4] || (i[4] = o("i", { class: "pi pi-chevron-down labull-user__caret" }, null, -1))
313
- ], 8, qe),
314
- a.value ? (n(), s("div", Xe, [
315
- o("div", Ye, [
316
- o("span", Ze, [
317
- U(g(r.value), 1),
318
- k(u)?.workId ? (n(), s("span", et, "(工号 " + g(k(u).workId) + ")", 1)) : m("", !0)
319
- ]),
320
- k(u)?.groups?.length ? (n(), s("small", tt, g(k(u).groups.join(" / ")), 1)) : m("", !0)
321
- ]),
322
- v.value ? (n(), s(S, { key: 1 }, [
323
- i[5] || (i[5] = o("p", { class: "labull-user__ask" }, "退出后要重新登录,未保存的输入会丢。", -1)),
324
- o("div", lt, [
325
- o("button", {
326
- class: "p-button p-button-sm p-button-text",
327
- type: "button",
328
- onClick: i[2] || (i[2] = (x) => v.value = !1)
329
- }, "取消"),
330
- o("button", {
331
- class: "p-button p-button-sm p-button-danger",
332
- type: "button",
333
- onClick: i[3] || (i[3] = (x) => k(f)())
334
- }, "确定退出")
335
- ])
336
- ], 64)) : (n(), s("button", {
337
- key: 0,
338
- class: "labull-user__item",
339
- type: "button",
340
- onClick: i[1] || (i[1] = (x) => v.value = !0)
341
- }, "退出登录"))
342
- ])) : m("", !0)
343
- ], 512));
344
- }
345
- }), se = /* @__PURE__ */ R(nt, [["__scopeId", "data-v-27408f31"]]);
346
- let W = !1, O = null;
347
- const ae = {
348
- pass(t) {
349
- return W ? Promise.resolve(!0) : O || (O = (async () => {
350
- const u = await me();
351
- return u !== "timeout" && u ? (W = !0, !0) : (u !== "timeout" && _e(t), !1);
352
- })().finally(() => {
353
- O = null;
354
- }), O);
355
- },
356
- reset() {
357
- W = !1, O = null;
358
- }
359
- };
360
- function ue() {
361
- return ae.pass(D());
362
- }
363
- function ot() {
364
- ae.reset();
365
- }
366
- const st = {
367
- key: 0,
368
- class: "labull-gate"
369
- }, at = {
370
- key: 0,
371
- class: "labull-gate__hint"
372
- }, ut = ["href"], it = ["href"], rt = {
373
- key: 1,
374
- class: "labull-shell"
375
- }, ct = {
376
- key: 0,
377
- class: "labull-shell__bar"
378
- }, dt = {
379
- key: 1,
380
- class: "labull-topbar"
381
- }, vt = { class: "labull-topbar__brand" }, ft = ["src"], pt = {
382
- key: 1,
383
- class: "labull-topbar__caption"
384
- }, bt = {
385
- key: 0,
386
- class: "labull-topbar__actions"
387
- }, ht = { class: "labull-body" }, mt = { class: "labull-main" }, _t = { class: "labull-viewport" }, kt = {
388
- key: 0,
389
- class: "labull-tabpage"
390
- }, yt = { class: "labull-tabpages" }, $t = /* @__PURE__ */ N({
391
- __name: "ProductShell",
392
- props: {
393
- actions: { type: Boolean, default: !0 },
394
- side: {},
395
- logo: {},
396
- caption: { default: "Labull" },
397
- home: { default: "/" },
398
- brand: {}
399
- },
400
- setup(t) {
401
- const u = t, f = ee(), a = J(), { tabs: v, active: p } = te(), { open: r, denied: _, unreachable: y, pass: w, recheck: C } = ke(), i = $(() => f.path === "/login" || D() === "/login"), x = $(() => ye(D()));
402
- $(() => !!u.logo || !!u.caption);
403
- const A = $(() => f.meta.tab === !1);
404
- Y({
405
- resolve: (l) => {
406
- const e = T(a.resolve(l));
407
- return { fullPath: e.fullPath, path: e.path, matched: e.matched.length > 0 };
408
- },
409
- current: () => f.fullPath,
410
- go: (l) => {
411
- a.push(l);
412
- }
413
- });
414
- function T(l) {
415
- for (let e = 0; e < 8; e += 1) {
416
- const b = l.matched[l.matched.length - 1]?.redirect;
417
- if (typeof b == "string") {
418
- l = a.resolve(b);
419
- continue;
420
- }
421
- if (b && typeof b == "object") {
422
- l = a.resolve(b);
423
- continue;
424
- }
425
- return l;
426
- }
427
- return l;
428
- }
429
- function I(l) {
430
- l.meta.tab !== !1 && be(l.fullPath, l.path, { title: l.meta.title, icon: l.meta.icon });
431
- }
432
- async function d() {
433
- if (i.value) return;
434
- await ue() && await w(D());
435
- }
436
- function c() {
437
- window.location.reload();
438
- }
439
- function h(l) {
440
- l.persisted && (ot(), C(D()));
441
- }
442
- let P;
443
- return H(() => {
444
- window.addEventListener("pageshow", h), d().then(() => {
445
- r.value && (I(f), P = a.afterEach((l) => I(l)));
446
- });
447
- }), q(() => {
448
- window.removeEventListener("pageshow", h), P?.(), Y(null);
449
- }), (l, e) => !k(r) && !i.value ? (n(), s("div", st, [
450
- e[4] || (e[4] = o("p", { class: "labull-gate__title" }, "正在确认登录状态…", -1)),
451
- k(_) ? (n(), s("p", at, [
452
- k(y) ? (n(), s(S, { key: 0 }, [
453
- U("连不上后端(等了 " + g(Math.round(k($e) / 1e3)) + " 秒也没有回音)。确认后端起来之后 ", 1),
454
- o("button", {
455
- class: "labull-gate__link",
456
- type: "button",
457
- onClick: c
458
- }, "重试"),
459
- e[0] || (e[0] = U(",或者", -1)),
460
- o("a", {
461
- class: "labull-gate__link",
462
- href: x.value
463
- }, "直接去登录", 8, ut),
464
- e[1] || (e[1] = U("。", -1))
465
- ], 64)) : (n(), s(S, { key: 1 }, [
466
- e[2] || (e[2] = U("没有登录(或会话已失效),正在跳登录页 —— 没跳过去就", -1)),
467
- o("a", {
468
- class: "labull-gate__link",
469
- href: x.value
470
- }, "点这里登录", 8, it),
471
- e[3] || (e[3] = U("。", -1))
472
- ], 64))
473
- ])) : m("", !0)
474
- ])) : (n(), s("div", rt, [
475
- l.$slots.bar ? (n(), s("div", ct, [
476
- G(l.$slots, "bar", {}, void 0, !0)
477
- ])) : l.$slots.appbar || t.logo || t.caption || l.$slots.actions || t.actions ? (n(), s("header", dt, [
478
- o("div", vt, [
479
- t.logo ? (n(), s("img", {
480
- key: 0,
481
- class: "labull-topbar__logo",
482
- src: t.logo,
483
- alt: ""
484
- }, null, 8, ft)) : m("", !0),
485
- t.caption ? (n(), s("span", pt, g(t.caption), 1)) : m("", !0),
486
- G(l.$slots, "appbar", {}, void 0, !0)
487
- ]),
488
- t.actions || l.$slots.actions ? (n(), s("div", bt, [
489
- G(l.$slots, "actions", {}, void 0, !0),
490
- t.actions ? (n(), s(S, { key: 0 }, [
491
- K(le),
492
- K(se)
493
- ], 64)) : m("", !0)
494
- ])) : m("", !0)
495
- ])) : m("", !0),
496
- o("div", ht, [
497
- t.side && t.side.length > 0 ? (n(), Z(ne, {
498
- key: 0,
499
- items: t.side,
500
- home: t.home,
501
- brand: t.brand
502
- }, null, 8, ["items", "home", "brand"])) : m("", !0),
503
- o("div", mt, [
504
- K(oe, { home: t.home }, null, 8, ["home"]),
505
- o("main", _t, [
506
- A.value ? (n(), s("div", kt, [
507
- K(k(fe))
508
- ])) : m("", !0),
509
- z(o("div", yt, [
510
- (n(!0), s(S, null, V(k(v), (E) => z((n(), s("div", {
511
- key: E.key,
512
- class: "labull-tabpage"
513
- }, [
514
- K(He, { tab: E }, null, 8, ["tab"])
515
- ])), [
516
- [X, E.key === k(p)]
517
- ])), 128))
518
- ], 512), [
519
- [X, !A.value]
520
- ])
521
- ])
522
- ])
523
- ])
524
- ]));
525
- }
526
- }), gt = /* @__PURE__ */ R($t, [["__scopeId", "data-v-f78521a6"]]), wt = { ProductShell: gt, ProductSide: ne, ProductTabs: oe, AppSearch: le, UserMenu: se };
527
- function Ct(t, u = {}) {
528
- for (const [a, v] of Object.entries(wt)) t.component(a, v);
529
- const f = t.config.globalProperties.$router;
530
- f ? f.beforeEach(async (a) => a.path === "/login" ? !0 : await ue()) : console.warn("[labull] 没拿到 router:把 app.use(labull) 放到 app.use(router) 之后。");
531
- for (const a of u.extra ?? []) t.use(a);
532
- }
533
- const Et = { install: (t) => Ct(t) };
534
- export {
535
- le as A,
536
- gt as P,
537
- se as U,
538
- He as _,
539
- ne as a,
540
- oe as b,
541
- Ct as i,
542
- Et as l
543
- };