jky-component-lib 0.0.73 → 0.0.77
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/es/add-input/index.d.ts +1 -0
- package/dist/es/code-mirror-editor/index.d.ts +1 -0
- package/dist/es/form/index.d.ts +1 -0
- package/dist/es/index.js +3 -12
- package/dist/es/menu/Menu.vue.js +42 -40
- package/dist/es/menu/MenuItem.vue.js +43 -41
- package/dist/es/menu/index.d.ts +1 -0
- package/dist/es/package.json.js +1 -1
- package/dist/es/page-header/index.d.ts +1 -0
- package/dist/es/page-layout/PageLayout.vue.d.ts +2 -1
- package/dist/es/page-layout/PageLayout.vue.js +71 -52
- package/dist/es/page-layout/index.d.ts +1 -0
- package/dist/es/page-table/PageTable.vue.d.ts +9 -9
- package/dist/es/page-table/index.d.ts +1 -0
- package/dist/es/rich-editor/index.d.ts +1 -0
- package/dist/es/style.css +47 -166
- package/dist/es/styles.css +1 -1
- package/dist/es/tabs/ContextMenu.vue.d.ts +30 -0
- package/dist/es/tabs/ContextMenu.vue.js +118 -0
- package/dist/es/tabs/ContextMenu.vue3.js +5 -0
- package/dist/es/tabs/Tabs.vue.d.ts +9 -42
- package/dist/es/tabs/Tabs.vue.js +108 -287
- package/dist/es/tabs/config.d.ts +2 -0
- package/dist/es/tabs/config.js +8 -0
- package/dist/es/tabs/createTabsGuard.d.ts +5 -0
- package/dist/es/tabs/createTabsGuard.js +18 -0
- package/dist/es/tabs/index.d.ts +4 -6
- package/dist/es/tabs/index.js +1 -1
- package/dist/es/tabs/style.css +32 -18
- package/dist/es/tabs/useTabsStore.d.ts +5 -52
- package/dist/es/tabs/useTabsStore.js +130 -182
- package/dist/lib/add-input/index.d.ts +1 -0
- package/dist/lib/code-mirror-editor/index.d.ts +1 -0
- package/dist/lib/form/index.d.ts +1 -0
- package/dist/lib/index.js +2 -11
- package/dist/lib/menu/Menu.vue.js +42 -40
- package/dist/lib/menu/MenuItem.vue.js +42 -40
- package/dist/lib/menu/index.d.ts +1 -0
- package/dist/lib/package.json.js +1 -1
- package/dist/lib/page-header/index.d.ts +1 -0
- package/dist/lib/page-layout/PageLayout.vue.d.ts +2 -1
- package/dist/lib/page-layout/PageLayout.vue.js +69 -50
- package/dist/lib/page-layout/index.d.ts +1 -0
- package/dist/lib/page-table/PageTable.vue.d.ts +9 -9
- package/dist/lib/page-table/index.d.ts +1 -0
- package/dist/lib/rich-editor/index.d.ts +1 -0
- package/dist/lib/style.css +47 -166
- package/dist/lib/styles.css +1 -1
- package/dist/lib/tabs/ContextMenu.vue.d.ts +30 -0
- package/dist/lib/tabs/ContextMenu.vue.js +118 -0
- package/dist/lib/tabs/ContextMenu.vue3.js +5 -0
- package/dist/lib/tabs/Tabs.vue.d.ts +9 -42
- package/dist/lib/tabs/Tabs.vue.js +106 -285
- package/dist/lib/tabs/config.d.ts +2 -0
- package/dist/lib/tabs/config.js +8 -0
- package/dist/lib/tabs/createTabsGuard.d.ts +5 -0
- package/dist/lib/tabs/createTabsGuard.js +18 -0
- package/dist/lib/tabs/index.d.ts +4 -6
- package/dist/lib/tabs/index.js +1 -1
- package/dist/lib/tabs/style.css +32 -18
- package/dist/lib/tabs/useTabsStore.d.ts +5 -52
- package/dist/lib/tabs/useTabsStore.js +129 -181
- package/package.json +1 -1
- package/dist/es/tabs/TabContent.vue.d.ts +0 -16
- package/dist/es/tabs/TabContent.vue.js +0 -65
- package/dist/es/tabs/TabContent.vue3.js +0 -5
- package/dist/es/tabs/routeListener.d.ts +0 -19
- package/dist/es/tabs/routeListener.js +0 -26
- package/dist/es/tabs/useTabs.d.ts +0 -27
- package/dist/es/tabs/useTabs.js +0 -59
- package/dist/lib/tabs/TabContent.vue.d.ts +0 -16
- package/dist/lib/tabs/TabContent.vue.js +0 -65
- package/dist/lib/tabs/TabContent.vue3.js +0 -5
- package/dist/lib/tabs/routeListener.d.ts +0 -19
- package/dist/lib/tabs/routeListener.js +0 -26
- package/dist/lib/tabs/useTabs.d.ts +0 -27
- package/dist/lib/tabs/useTabs.js +0 -59
|
@@ -1,311 +1,132 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __defProps = Object.defineProperties;
|
|
4
|
-
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
5
|
-
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
6
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
-
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
8
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
9
|
-
var __spreadValues = (a, b) => {
|
|
10
|
-
for (var prop in b || (b = {}))
|
|
11
|
-
if (__hasOwnProp.call(b, prop))
|
|
12
|
-
__defNormalProp(a, prop, b[prop]);
|
|
13
|
-
if (__getOwnPropSymbols)
|
|
14
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
15
|
-
if (__propIsEnum.call(b, prop))
|
|
16
|
-
__defNormalProp(a, prop, b[prop]);
|
|
17
|
-
}
|
|
18
|
-
return a;
|
|
19
|
-
};
|
|
20
|
-
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
21
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
22
3
|
const vue = require("vue");
|
|
23
|
-
const ElementPlus = require("element-plus");
|
|
24
4
|
const vueRouter = require("vue-router");
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const
|
|
29
|
-
const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValues({}, {
|
|
30
|
-
name: "JkyTabs",
|
|
31
|
-
inheritAttrs: false
|
|
32
|
-
}), {
|
|
5
|
+
const ContextMenu_vue_vue_type_script_setup_true_lang = require("./ContextMenu.vue.js");
|
|
6
|
+
;/* empty css */
|
|
7
|
+
const _hoisted_1 = { class: "flex items-center jky-tabs-__item-label" };
|
|
8
|
+
const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
33
9
|
__name: "Tabs",
|
|
34
10
|
props: {
|
|
35
|
-
mode: { default: "
|
|
11
|
+
mode: { default: "route" },
|
|
36
12
|
cachable: { type: Boolean, default: true },
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
persist: { type: Boolean },
|
|
42
|
-
persistKey: {},
|
|
43
|
-
type: {},
|
|
44
|
-
closable: { type: Boolean },
|
|
45
|
-
addable: { type: Boolean },
|
|
46
|
-
modelValue: {},
|
|
47
|
-
defaultValue: {},
|
|
48
|
-
editable: { type: Boolean },
|
|
49
|
-
tabPosition: {},
|
|
50
|
-
beforeLeave: {},
|
|
51
|
-
stretch: { type: Boolean },
|
|
52
|
-
tabindex: {}
|
|
13
|
+
closable: { type: Boolean, default: true },
|
|
14
|
+
round: { type: Boolean, default: false },
|
|
15
|
+
contextMenu: { type: Boolean, default: true },
|
|
16
|
+
store: {}
|
|
53
17
|
},
|
|
54
|
-
|
|
55
|
-
setup(__props, { expose: __expose, emit: __emit }) {
|
|
18
|
+
setup(__props) {
|
|
56
19
|
const props = __props;
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
const tabStyleVars = vue.computed(() => {
|
|
63
|
-
var _a, _b, _c, _d;
|
|
64
|
-
const styles = {};
|
|
65
|
-
if ((_a = props.tabStyle) == null ? void 0 : _a.color)
|
|
66
|
-
styles["--jky-tabs-color"] = props.tabStyle.color;
|
|
67
|
-
if ((_b = props.tabStyle) == null ? void 0 : _b.activeColor)
|
|
68
|
-
styles["--jky-tabs-active-color"] = props.tabStyle.activeColor;
|
|
69
|
-
if ((_c = props.tabStyle) == null ? void 0 : _c.height)
|
|
70
|
-
styles["--jky-tabs-height"] = props.tabStyle.height;
|
|
71
|
-
if ((_d = props.tabStyle) == null ? void 0 : _d.fontSize)
|
|
72
|
-
styles["--jky-tabs-font-size"] = props.tabStyle.fontSize;
|
|
73
|
-
return styles;
|
|
74
|
-
});
|
|
75
|
-
const tabsClass = vue.computed(() => {
|
|
76
|
-
return [
|
|
77
|
-
"jky-tabs",
|
|
78
|
-
props.mode === "route" && "jky-tabs--route",
|
|
79
|
-
props.className,
|
|
80
|
-
attrs.class
|
|
81
|
-
].filter(Boolean).join(" ");
|
|
82
|
-
});
|
|
83
|
-
const EL_TABS_PROPS = [
|
|
84
|
-
"type",
|
|
85
|
-
"closable",
|
|
86
|
-
"addable",
|
|
87
|
-
"modelValue",
|
|
88
|
-
"editable",
|
|
89
|
-
"tabPosition",
|
|
90
|
-
"stretch"
|
|
91
|
-
];
|
|
92
|
-
const elTabsProps = vue.computed(() => {
|
|
93
|
-
const elProps = {};
|
|
94
|
-
Object.keys(props).forEach((key) => {
|
|
95
|
-
if (EL_TABS_PROPS.includes(key)) {
|
|
96
|
-
elProps[key] = props[key];
|
|
97
|
-
}
|
|
20
|
+
const router = vueRouter.useRouter();
|
|
21
|
+
vue.onMounted(() => {
|
|
22
|
+
props.store.loadFromCache();
|
|
23
|
+
router.afterEach((to) => {
|
|
24
|
+
props.store.addTab(to);
|
|
98
25
|
});
|
|
99
|
-
|
|
26
|
+
props.store.addTab(router.currentRoute.value);
|
|
100
27
|
});
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
currentRoute: {
|
|
111
|
-
name: route.name,
|
|
112
|
-
path: route.path,
|
|
113
|
-
meta: route.meta
|
|
114
|
-
},
|
|
115
|
-
cachable: props.cachable,
|
|
116
|
-
cacheTabs: store.cacheTabs
|
|
117
|
-
});
|
|
118
|
-
if (route.name) {
|
|
119
|
-
store.setActiveTab(route.name);
|
|
120
|
-
}
|
|
121
|
-
if (props.cachable && store.cacheTabs.length > 0) {
|
|
122
|
-
const routes = router.getRoutes();
|
|
123
|
-
const routeMap = new Map(routes.map((route2) => [route2.name, route2]));
|
|
124
|
-
store.cacheTabs.forEach((cachedName) => {
|
|
125
|
-
var _a2;
|
|
126
|
-
const route2 = routeMap.get(cachedName);
|
|
127
|
-
if ((_a2 = route2 == null ? void 0 : route2.meta) == null ? void 0 : _a2.title) {
|
|
128
|
-
const tabItem = {
|
|
129
|
-
name: cachedName,
|
|
130
|
-
label: route2.meta.title,
|
|
131
|
-
closable: route2.meta.closable !== false,
|
|
132
|
-
icon: route2.meta.icon,
|
|
133
|
-
affix: route2.meta.affix,
|
|
134
|
-
route: {
|
|
135
|
-
path: route2.path,
|
|
136
|
-
name: cachedName,
|
|
137
|
-
component: route2.components ? vue.markRaw(Object.values(route2.components)[0]) : void 0,
|
|
138
|
-
meta: route2.meta
|
|
139
|
-
}
|
|
140
|
-
};
|
|
141
|
-
store.addTab(tabItem);
|
|
142
|
-
}
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
if (route.name && ((_a = route.meta) == null ? void 0 : _a.title)) {
|
|
146
|
-
if (!props.cachable || !store.isCached(route.name)) {
|
|
147
|
-
const routes = router.getRoutes();
|
|
148
|
-
const foundRoute = routes.find((r) => r.name === route.name);
|
|
149
|
-
const tabItem = {
|
|
150
|
-
name: route.name,
|
|
151
|
-
label: route.meta.title,
|
|
152
|
-
closable: route.meta.closable !== false,
|
|
153
|
-
icon: route.meta.icon,
|
|
154
|
-
affix: route.meta.affix,
|
|
155
|
-
route: {
|
|
156
|
-
path: route.path,
|
|
157
|
-
name: route.name,
|
|
158
|
-
component: (foundRoute == null ? void 0 : foundRoute.components) ? vue.markRaw(Object.values(foundRoute.components)[0]) : void 0,
|
|
159
|
-
meta: route.meta
|
|
160
|
-
}
|
|
161
|
-
};
|
|
162
|
-
store.addTab(tabItem);
|
|
163
|
-
}
|
|
164
|
-
if (props.cachable) {
|
|
165
|
-
store.addCache(route.name);
|
|
28
|
+
const activeTabPath = vue.computed({
|
|
29
|
+
get: () => {
|
|
30
|
+
var _a;
|
|
31
|
+
return ((_a = props.store) == null ? void 0 : _a.activeTabFullPath) || "";
|
|
32
|
+
},
|
|
33
|
+
set: (val) => {
|
|
34
|
+
if (val && props.store) {
|
|
35
|
+
props.store.setActiveTab(val);
|
|
36
|
+
router.push(val);
|
|
166
37
|
}
|
|
167
38
|
}
|
|
39
|
+
});
|
|
40
|
+
function handleTabClick(pane) {
|
|
41
|
+
const fullPath = pane.paneName;
|
|
42
|
+
if (fullPath && fullPath !== activeTabPath.value) {
|
|
43
|
+
router.push(fullPath);
|
|
44
|
+
}
|
|
168
45
|
}
|
|
169
|
-
function handleTabChange(
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
store.setActiveTab(newTabName);
|
|
173
|
-
emit("update:modelValue", newTabName);
|
|
174
|
-
if (props.mode === "route" && router) {
|
|
175
|
-
const tab = store.tabList.find((t) => t.name === newTabName);
|
|
176
|
-
if (tab == null ? void 0 : tab.route) {
|
|
177
|
-
router.push(tab.route.path);
|
|
178
|
-
emit("routeChange", tab.route);
|
|
179
|
-
if (props.cachable) {
|
|
180
|
-
store.addCache(newTabName);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
46
|
+
function handleTabChange(fullPath) {
|
|
47
|
+
if (fullPath && fullPath !== activeTabPath.value) {
|
|
48
|
+
router.push(fullPath);
|
|
183
49
|
}
|
|
184
|
-
emit("tabClick", pane);
|
|
185
50
|
}
|
|
186
|
-
function
|
|
187
|
-
|
|
188
|
-
if (!name)
|
|
51
|
+
function handleTabRemove(fullPath) {
|
|
52
|
+
if (!props.store) {
|
|
189
53
|
return;
|
|
190
|
-
if (props.mode === "route") {
|
|
191
|
-
store.removeTab(name);
|
|
192
|
-
} else {
|
|
193
|
-
closedTabs.value = /* @__PURE__ */ new Set([...closedTabs.value, name]);
|
|
194
|
-
if (store.activeTab === name && props.tabs && props.tabs.length > 0) {
|
|
195
|
-
const currentIndex = props.tabs.findIndex((tab) => tab.name === name);
|
|
196
|
-
const availableTabs = props.tabs.filter((tab) => !closedTabs.value.has(tab.name));
|
|
197
|
-
if (availableTabs.length > 0) {
|
|
198
|
-
const nextTab = availableTabs[currentIndex] || availableTabs[currentIndex - 1];
|
|
199
|
-
if (nextTab) {
|
|
200
|
-
store.setActiveTab(nextTab.name);
|
|
201
|
-
emit("update:modelValue", nextTab.name);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
54
|
}
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
}
|
|
212
|
-
function isClosed(name) {
|
|
213
|
-
return closedTabs.value.has(name);
|
|
214
|
-
}
|
|
215
|
-
function closeTab(tabName) {
|
|
216
|
-
handleCloseTab(tabName);
|
|
217
|
-
}
|
|
218
|
-
function closeOthers(tabName) {
|
|
219
|
-
store.closeOther(tabName);
|
|
220
|
-
}
|
|
221
|
-
function closeAll() {
|
|
222
|
-
store.closeAll();
|
|
223
|
-
}
|
|
224
|
-
function refreshTab(tabName) {
|
|
225
|
-
store.refresh(tabName);
|
|
226
|
-
}
|
|
227
|
-
function getCachedTabs() {
|
|
228
|
-
return store.getCacheTabs();
|
|
229
|
-
}
|
|
230
|
-
function getTabList() {
|
|
231
|
-
return store.getTabList();
|
|
232
|
-
}
|
|
233
|
-
function getActiveTab() {
|
|
234
|
-
return store.activeTab;
|
|
235
|
-
}
|
|
236
|
-
if (props.mode === "route") {
|
|
237
|
-
routeListener.onRouteChange((route) => {
|
|
238
|
-
if (route.name) {
|
|
239
|
-
store.setActiveTab(route.name);
|
|
240
|
-
if (props.cachable) {
|
|
241
|
-
store.addCache(route.name);
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
}, true);
|
|
55
|
+
const currentActivePath = props.store.activeTabFullPath;
|
|
56
|
+
const nextActivePath = props.store.closeTab(fullPath, currentActivePath);
|
|
57
|
+
if (nextActivePath) {
|
|
58
|
+
router.push(nextActivePath);
|
|
59
|
+
}
|
|
245
60
|
}
|
|
246
|
-
|
|
247
|
-
if (props.
|
|
248
|
-
|
|
61
|
+
function handleContextMenuCommand({ key, tab }) {
|
|
62
|
+
if (!props.store)
|
|
63
|
+
return;
|
|
64
|
+
switch (key) {
|
|
65
|
+
case "refresh":
|
|
66
|
+
router.push(tab.fullPath);
|
|
67
|
+
break;
|
|
68
|
+
case "closeCurrent":
|
|
69
|
+
handleTabRemove(tab.fullPath);
|
|
70
|
+
break;
|
|
71
|
+
case "closeOthers":
|
|
72
|
+
props.store.closeOthers(tab.fullPath);
|
|
73
|
+
router.push(tab.fullPath);
|
|
74
|
+
break;
|
|
249
75
|
}
|
|
250
|
-
}
|
|
251
|
-
__expose({
|
|
252
|
-
closeTab,
|
|
253
|
-
closeOthers,
|
|
254
|
-
closeAll,
|
|
255
|
-
refreshTab,
|
|
256
|
-
getCachedTabs,
|
|
257
|
-
getTabList,
|
|
258
|
-
getActiveTab
|
|
259
|
-
});
|
|
260
|
-
vue.provide("tabsContext", {
|
|
261
|
-
mode: props.mode,
|
|
262
|
-
cachable: props.cachable,
|
|
263
|
-
activeTab: vue.computed(() => store.activeTab),
|
|
264
|
-
cachedTabs: vue.shallowRef(new Set(store.getCacheTabs())),
|
|
265
|
-
cachedComponents: vue.shallowRef(/* @__PURE__ */ new Map())
|
|
266
|
-
});
|
|
76
|
+
}
|
|
267
77
|
return (_ctx, _cache) => {
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
label:
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
_: 2
|
|
290
|
-
}, 1032, ["name", "closable"]);
|
|
291
|
-
}), 128)) : __props.tabs && __props.tabs.length > 0 ? (vue.openBlock(true), vue.createElementBlock(vue.Fragment, { key: 1 }, vue.renderList(__props.tabs, (tab) => {
|
|
292
|
-
return vue.openBlock(), vue.createBlock(vue.unref(ElementPlus.ElTabPane), {
|
|
293
|
-
key: tab.name,
|
|
294
|
-
name: tab.name,
|
|
295
|
-
closable: tab.closable,
|
|
296
|
-
style: vue.normalizeStyle({ display: isClosed(tab.name) ? "none" : "" })
|
|
78
|
+
var _a;
|
|
79
|
+
const _component_el_tab_pane = vue.resolveComponent("el-tab-pane");
|
|
80
|
+
const _component_el_tabs = vue.resolveComponent("el-tabs");
|
|
81
|
+
return vue.openBlock(), vue.createBlock(_component_el_tabs, {
|
|
82
|
+
"model-value": activeTabPath.value,
|
|
83
|
+
type: "card",
|
|
84
|
+
closable: __props.closable,
|
|
85
|
+
class: vue.normalizeClass(["jky-tabs", { "jky-tabs-round": (_a = __props.round) != null ? _a : _ctx.$attrs.round }]),
|
|
86
|
+
onTabClick: handleTabClick,
|
|
87
|
+
onTabRemove: handleTabRemove,
|
|
88
|
+
"onUpdate:modelValue": handleTabChange
|
|
89
|
+
}, {
|
|
90
|
+
default: vue.withCtx(() => {
|
|
91
|
+
var _a2;
|
|
92
|
+
return [
|
|
93
|
+
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList((_a2 = props.store) == null ? void 0 : _a2.tabs, (tab) => {
|
|
94
|
+
return vue.openBlock(), vue.createBlock(_component_el_tab_pane, {
|
|
95
|
+
key: tab.fullPath,
|
|
96
|
+
label: tab.title,
|
|
97
|
+
name: tab.fullPath,
|
|
98
|
+
closable: __props.closable && props.store && props.store.tabs.length > 1
|
|
297
99
|
}, {
|
|
298
|
-
label: vue.withCtx(() =>
|
|
299
|
-
|
|
300
|
-
|
|
100
|
+
label: vue.withCtx(() => {
|
|
101
|
+
var _a3;
|
|
102
|
+
return [
|
|
103
|
+
vue.createVNode(ContextMenu_vue_vue_type_script_setup_true_lang.default, {
|
|
104
|
+
tab,
|
|
105
|
+
"is-active": tab.fullPath === activeTabPath.value,
|
|
106
|
+
"is-only-tab": ((_a3 = props.store) == null ? void 0 : _a3.tabs.length) === 1,
|
|
107
|
+
onCommand: handleContextMenuCommand
|
|
108
|
+
}, {
|
|
109
|
+
default: vue.withCtx(() => [
|
|
110
|
+
vue.createElementVNode("div", _hoisted_1, [
|
|
111
|
+
tab.icon ? (vue.openBlock(), vue.createElementBlock("span", {
|
|
112
|
+
key: 0,
|
|
113
|
+
class: vue.normalizeClass(["mr-1 text-lg", tab.icon])
|
|
114
|
+
}, null, 2)) : vue.createCommentVNode("", true),
|
|
115
|
+
vue.createElementVNode("span", null, vue.toDisplayString(tab.title), 1)
|
|
116
|
+
])
|
|
117
|
+
]),
|
|
118
|
+
_: 2
|
|
119
|
+
}, 1032, ["tab", "is-active", "is-only-tab"])
|
|
120
|
+
];
|
|
121
|
+
}),
|
|
301
122
|
_: 2
|
|
302
|
-
}, 1032, ["
|
|
303
|
-
}), 128))
|
|
304
|
-
]
|
|
305
|
-
|
|
306
|
-
_:
|
|
307
|
-
},
|
|
123
|
+
}, 1032, ["label", "name", "closable"]);
|
|
124
|
+
}), 128))
|
|
125
|
+
];
|
|
126
|
+
}),
|
|
127
|
+
_: 1
|
|
128
|
+
}, 8, ["model-value", "closable", "class"]);
|
|
308
129
|
};
|
|
309
130
|
}
|
|
310
|
-
})
|
|
131
|
+
});
|
|
311
132
|
exports.default = _sfc_main;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const useTabsStore = require("./useTabsStore.js");
|
|
4
|
+
function createTabsGuard(router, config) {
|
|
5
|
+
const { useTabsStore: useTabsStore$1 } = useTabsStore.createTabsStore(config);
|
|
6
|
+
const tabsStore = useTabsStore$1();
|
|
7
|
+
tabsStore.loadFromCache();
|
|
8
|
+
router.afterEach((to) => {
|
|
9
|
+
tabsStore.addTab(to);
|
|
10
|
+
});
|
|
11
|
+
return {
|
|
12
|
+
syncCurrentRoute: () => {
|
|
13
|
+
const currentRoute = router.currentRoute.value;
|
|
14
|
+
tabsStore.addTab(currentRoute);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
exports.createTabsGuard = createTabsGuard;
|
package/dist/lib/tabs/index.d.ts
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import { InstallWithSFC } from '../utils';
|
|
1
|
+
import { InstallWithSFC } from '../utils/types';
|
|
2
2
|
import { default as Tabs } from './Tabs.vue';
|
|
3
|
+
export { createTabsGuard } from './createTabsGuard';
|
|
4
|
+
export type { TabItem, TabsConfig, TabsContextMenuEmits, TabsContextMenuItem, TabsContextMenuProps, TabsProps, TabsStoreActions, TabsStoreState, } from './types';
|
|
5
|
+
export { createTabsStore } from './useTabsStore';
|
|
3
6
|
export declare const JkyTabs: InstallWithSFC<typeof Tabs>;
|
|
4
7
|
export default JkyTabs;
|
|
5
|
-
export { clearRouteListeners, emitRouteChange, onRouteChange } from './routeListener';
|
|
6
|
-
export { default as JkyTabContent } from './TabContent.vue';
|
|
7
|
-
export type * from './types';
|
|
8
|
-
export { useTabs } from './useTabs';
|
|
9
|
-
export { createTabsStore, resetTabsStore, useTabsStore } from './useTabsStore';
|
package/dist/lib/tabs/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
const withInstall = require("../utils/with-install.js");
|
|
3
4
|
const Tabs_vue_vue_type_script_setup_true_lang = require("./Tabs.vue.js");
|
|
4
5
|
;/* empty css */
|
|
5
|
-
const withInstall = require("../utils/with-install.js");
|
|
6
6
|
const JkyTabs = withInstall.installWithSFC(Tabs_vue_vue_type_script_setup_true_lang.default);
|
|
7
7
|
exports.JkyTabs = JkyTabs;
|
|
8
8
|
exports.default = JkyTabs;
|
package/dist/lib/tabs/style.css
CHANGED
|
@@ -1,29 +1,43 @@
|
|
|
1
1
|
/* Tabs 组件样式 */
|
|
2
2
|
.jky-tabs {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
--jky-tabs-font-size: 14px;
|
|
7
|
-
.el-tabs__item {
|
|
8
|
-
color: var(--jky-tabs-color);
|
|
9
|
-
font-size: var(--jky-tabs-font-size);
|
|
10
|
-
height: var(--jky-tabs-height);
|
|
11
|
-
line-height: var(--jky-tabs-height);
|
|
12
|
-
&.is-active {
|
|
13
|
-
color: var(--jky-tabs-active-color);
|
|
3
|
+
/* Tabs 组件样式定义 */
|
|
4
|
+
.el-tabs__content {
|
|
5
|
+
display: none;
|
|
14
6
|
}
|
|
7
|
+
.el-tabs__header {
|
|
8
|
+
margin-bottom: 0;
|
|
15
9
|
}
|
|
16
|
-
.el-tabs__active-bar {
|
|
17
|
-
background-color: var(--jky-tabs-active-color);
|
|
18
10
|
}
|
|
11
|
+
/* Tabs 圆角样式 */
|
|
12
|
+
.jky-tabs-round {
|
|
13
|
+
--el-tabs-header-height: 32px;
|
|
14
|
+
--el-tabs-item-background: white;
|
|
15
|
+
--el-tabs-active-item-background: var(--el-color-primary);
|
|
16
|
+
.el-tabs__header {
|
|
17
|
+
--el-border-color-light: transparent;
|
|
19
18
|
}
|
|
20
|
-
/* 路由模式下的特殊样式 */
|
|
21
|
-
.jky-tabs--route {
|
|
22
19
|
.el-tabs__item {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
20
|
+
border-radius: 999px;
|
|
21
|
+
margin-left: 1rem;
|
|
22
|
+
background-color: var(--el-tabs-item-background);
|
|
23
|
+
.jky-tabs-__item-label {
|
|
24
|
+
/* Tabs 项标签样式定义 */
|
|
25
|
+
}
|
|
26
|
+
&.is-active {
|
|
27
|
+
background-color: var(--el-tabs-active-item-background);
|
|
28
|
+
.jky-tabs-__item-label {
|
|
29
|
+
color: var(--el-color-white);
|
|
30
|
+
}
|
|
31
|
+
.el-icon {
|
|
32
|
+
color: var(--el-color-white);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
&.first-child {
|
|
36
|
+
margin-left: 0;
|
|
26
37
|
}
|
|
27
38
|
}
|
|
28
39
|
}
|
|
40
|
+
/* 右键菜单样式 */
|
|
41
|
+
.jky-tabs-context-menu {
|
|
42
|
+
display: inline-block;
|
|
29
43
|
}
|
|
@@ -1,53 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export interface TabsStoreReturn {
|
|
7
|
-
tabList: TabItem[];
|
|
8
|
-
activeTab: string;
|
|
9
|
-
cacheTabs: string[];
|
|
10
|
-
closedTabs: string[];
|
|
11
|
-
addTab: (tab: TabItem) => void;
|
|
12
|
-
updateTab: (name: string, tab: Partial<TabItem>) => void;
|
|
13
|
-
removeTab: (name: string) => void;
|
|
14
|
-
setActiveTab: (name: string) => void;
|
|
15
|
-
addCache: (name: string) => void;
|
|
16
|
-
removeCache: (name: string) => void;
|
|
17
|
-
bulkRemove: (names: string[]) => void;
|
|
18
|
-
closeLeft: (name: string) => void;
|
|
19
|
-
closeRight: (name: string) => void;
|
|
20
|
-
closeOther: (name: string) => void;
|
|
21
|
-
closeAll: () => void;
|
|
22
|
-
refresh: (name: string) => void;
|
|
23
|
-
getTabList: () => TabItem[];
|
|
24
|
-
getCacheTabs: () => string[];
|
|
25
|
-
isClosed: (name: string) => boolean;
|
|
26
|
-
isCached: (name: string) => boolean;
|
|
27
|
-
reset: () => void;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Tabs Store
|
|
31
|
-
* 使用 Pinia 管理标签页状态和缓存
|
|
32
|
-
*
|
|
33
|
-
* @param persist - 是否启用持久化(默认 false)
|
|
34
|
-
* @param persistKey - 持久化 key(可选,默认 'jky-tabs-state')
|
|
35
|
-
*/
|
|
36
|
-
export declare function createTabsStore(persist?: boolean, persistKey?: string): TabsStoreReturn;
|
|
37
|
-
/**
|
|
38
|
-
* 获取或创建 Tabs Store
|
|
39
|
-
*
|
|
40
|
-
* @param persist - 是否启用持久化(默认 false)
|
|
41
|
-
* @param persistKey - 持久化 key(可选)
|
|
42
|
-
*/
|
|
43
|
-
export declare function useTabsStore(persist?: boolean, persistKey?: string): TabsStoreReturn;
|
|
44
|
-
/**
|
|
45
|
-
* 重置 Store
|
|
46
|
-
*/
|
|
47
|
-
export declare function resetTabsStore(): void;
|
|
48
|
-
/**
|
|
49
|
-
* 在应用中提供持久化 key
|
|
50
|
-
*/
|
|
51
|
-
export declare function provideTabsPersistKey(key: string): {
|
|
52
|
-
key: string;
|
|
1
|
+
import { Store } from 'pinia';
|
|
2
|
+
import { TabsConfig, TabsStoreActions, TabsStoreState } from './types';
|
|
3
|
+
export declare function createTabsStore(config?: Partial<TabsConfig>): {
|
|
4
|
+
useTabsStore: () => Store<'tabs', TabsStoreState, object, TabsStoreActions>;
|
|
5
|
+
config: TabsConfig;
|
|
53
6
|
};
|