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.
- package/dist/chunk-ProductShell.vue_vue_type_style_index_0_scoped_0fb37099_lang-BpRKKThg.js +132 -0
- package/dist/chunk-index-B5pTPy31.js +669 -0
- package/dist/index.js +2 -2
- package/dist/magic-block.js +1 -1
- package/dist/style.css +1 -1
- package/dist/types/ui-viewport.d.ts +11 -0
- package/dist/ui.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-ProductShell.vue_vue_type_style_index_0_scoped_f78521a6_lang-qtJ-k8Ss.js +0 -118
- package/dist/chunk-index-DfIoolMt.js +0 -543
|
@@ -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-
|
|
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.
|
|
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,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
|
-
};
|