@ditari/bsui 5.1.3 → 5.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/layout/Layout.vue2.cjs +4 -18
- package/dist/cjs/components/layout/Layout.vue2.cjs.map +1 -1
- package/dist/cjs/components/layout/List.cjs +1 -1
- package/dist/cjs/components/layout/List.cjs.map +1 -1
- package/dist/cjs/components/layout/Show.cjs +75 -36
- package/dist/cjs/components/layout/Show.cjs.map +1 -1
- package/dist/cjs/components/layout/components/layout/HeaderLayout.vue2.cjs +3 -25
- package/dist/cjs/components/layout/components/layout/HeaderLayout.vue2.cjs.map +1 -1
- package/dist/cjs/components/tab/Tab.vue2.cjs +264 -180
- package/dist/cjs/components/tab/Tab.vue2.cjs.map +1 -1
- package/dist/cjs/components/table/Table.cjs +2 -2
- package/dist/cjs/components/table/Table.cjs.map +1 -1
- package/dist/cjs/components/table-form/TableForm.cjs +2 -2
- package/dist/cjs/components/table-form/TableForm.cjs.map +1 -1
- package/dist/cjs/components/table-form/interface.cjs.map +1 -1
- package/dist/css/components/tab/style/index.css +1 -1
- package/dist/css/index.css +1 -1
- package/dist/esm/components/layout/Layout.vue2.mjs +6 -20
- package/dist/esm/components/layout/Layout.vue2.mjs.map +1 -1
- package/dist/esm/components/layout/List.mjs +1 -1
- package/dist/esm/components/layout/List.mjs.map +1 -1
- package/dist/esm/components/layout/Show.mjs +77 -38
- package/dist/esm/components/layout/Show.mjs.map +1 -1
- package/dist/esm/components/layout/components/layout/HeaderLayout.vue2.mjs +5 -27
- package/dist/esm/components/layout/components/layout/HeaderLayout.vue2.mjs.map +1 -1
- package/dist/esm/components/tab/Tab.vue2.mjs +268 -184
- package/dist/esm/components/tab/Tab.vue2.mjs.map +1 -1
- package/dist/esm/components/table/Table.mjs +1 -1
- package/dist/esm/components/table/Table.mjs.map +1 -1
- package/dist/esm/components/table-form/TableForm.mjs +1 -1
- package/dist/esm/components/table-form/TableForm.mjs.map +1 -1
- package/dist/esm/components/table-form/interface.mjs.map +1 -1
- package/dist/style/tab/style/index.scss +10 -4
- package/dist/types/components/layout/Layout.vue.d.ts +63 -51
- package/dist/types/components/layout/Layout.vue.d.ts.map +1 -1
- package/dist/types/components/layout/List.d.ts.map +1 -1
- package/dist/types/components/layout/Show.d.ts +9 -0
- package/dist/types/components/layout/Show.d.ts.map +1 -1
- package/dist/types/components/layout/components/layout/HeaderLayout.vue.d.ts +63 -50
- package/dist/types/components/layout/components/layout/HeaderLayout.vue.d.ts.map +1 -1
- package/dist/types/components/tab/Tab.vue.d.ts +61 -22
- package/dist/types/components/tab/Tab.vue.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -1,157 +1,260 @@
|
|
|
1
|
-
import { defineComponent, computed, watch,
|
|
1
|
+
import { defineComponent, computed, inject, getCurrentInstance, watch, nextTick, resolveComponent, createElementBlock, openBlock, normalizeStyle, unref, normalizeClass, createVNode, createElementVNode, withCtx, Fragment, renderList, createBlock, createCommentVNode, toDisplayString, resolveDynamicComponent } from 'vue';
|
|
2
2
|
import { useRoute, useRouter } from 'vue-router';
|
|
3
3
|
import { theme } from 'ant-design-vue';
|
|
4
4
|
import { storeToRefs } from 'pinia';
|
|
5
5
|
import { AppContextKey } from '../layout/AppContext.mjs';
|
|
6
6
|
import Search from './Search.mjs';
|
|
7
|
-
import { ReloadOutlined, CloseOutlined } from '@ant-design/icons-vue';
|
|
8
|
-
import { useNavTabStore } from '@ditari/store';
|
|
9
|
-
import { css } from '@emotion/css';
|
|
7
|
+
import { ReloadOutlined, CloseOutlined, VerticalRightOutlined, VerticalLeftOutlined } from '@ant-design/icons-vue';
|
|
8
|
+
import { useAppStore, useNavTabStore } from '@ditari/store';
|
|
9
|
+
import { css, cx } from '@emotion/css';
|
|
10
10
|
|
|
11
11
|
"use strict";
|
|
12
|
+
var __defProp = Object.defineProperty;
|
|
13
|
+
var __defProps = Object.defineProperties;
|
|
14
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
15
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
16
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
17
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
18
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
19
|
+
var __spreadValues = (a, b) => {
|
|
20
|
+
for (var prop in b || (b = {}))
|
|
21
|
+
if (__hasOwnProp.call(b, prop))
|
|
22
|
+
__defNormalProp(a, prop, b[prop]);
|
|
23
|
+
if (__getOwnPropSymbols)
|
|
24
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
25
|
+
if (__propIsEnum.call(b, prop))
|
|
26
|
+
__defNormalProp(a, prop, b[prop]);
|
|
27
|
+
}
|
|
28
|
+
return a;
|
|
29
|
+
};
|
|
30
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
12
31
|
const _hoisted_1 = { class: "d-tabs-nav" };
|
|
13
|
-
const _hoisted_2 = {
|
|
32
|
+
const _hoisted_2 = { class: "tab-item-container" };
|
|
33
|
+
const _hoisted_3 = {
|
|
14
34
|
key: 0,
|
|
15
35
|
class: "tab-item"
|
|
16
36
|
};
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
|
|
37
|
+
const _hoisted_4 = { class: "tab-item" };
|
|
38
|
+
const _hoisted_5 = { style: { "margin-left": "10px" } };
|
|
39
|
+
const _hoisted_6 = {
|
|
40
|
+
key: 0,
|
|
20
41
|
class: "tab-close"
|
|
21
42
|
};
|
|
22
|
-
const
|
|
43
|
+
const _hoisted_7 = ["onClick"];
|
|
23
44
|
var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
24
45
|
__name: "Tab",
|
|
25
46
|
setup(__props) {
|
|
26
|
-
const { tabsNavStyle, tabHoverBgStyle, closeBtnStyle } = useStyle();
|
|
27
|
-
const {
|
|
28
|
-
activeKey,
|
|
29
|
-
list,
|
|
30
|
-
closeBtnStatus,
|
|
31
|
-
onChange,
|
|
32
|
-
onClose
|
|
33
|
-
} = useTab();
|
|
34
|
-
const { enableTabContextMenu, onContextMenuClick } = useTabsContextMenu();
|
|
35
47
|
function useStyle() {
|
|
36
48
|
const { useToken } = theme;
|
|
37
49
|
const { token } = useToken();
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
)
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
50
|
+
const appStore = useAppStore();
|
|
51
|
+
const { tabsTokenStyle } = storeToRefs(appStore);
|
|
52
|
+
const dynamicVars2 = computed(() => {
|
|
53
|
+
var _a, _b, _c, _d, _e;
|
|
54
|
+
return {
|
|
55
|
+
"--active-tab-color": (_a = tabsTokenStyle == null ? void 0 : tabsTokenStyle.value) == null ? void 0 : _a.colorBgActive,
|
|
56
|
+
"--splitColor": (_b = tabsTokenStyle == null ? void 0 : tabsTokenStyle.value) == null ? void 0 : _b.colorSplit,
|
|
57
|
+
"--active-text-color": (_c = tabsTokenStyle == null ? void 0 : tabsTokenStyle.value) == null ? void 0 : _c.colorTextActive,
|
|
58
|
+
"--active-shadow-color": (_d = tabsTokenStyle == null ? void 0 : tabsTokenStyle.value) == null ? void 0 : _d.colorShadowActive,
|
|
59
|
+
"--tabs-text-color": (_e = tabsTokenStyle == null ? void 0 : tabsTokenStyle.value) == null ? void 0 : _e.colorTabsText
|
|
60
|
+
};
|
|
61
|
+
});
|
|
62
|
+
const tabsNavStyle2 = computed(
|
|
63
|
+
() => css`
|
|
64
|
+
--active-tab-color: var(--active-tab-color);
|
|
65
|
+
--splitColor: var(--splitColor);
|
|
66
|
+
--active-text-color: var(--active-text-color);
|
|
67
|
+
--active-shadow-color: var(--active-shadow-color);
|
|
68
|
+
--tabs-text-color: var(--tabs-text-color);
|
|
48
69
|
padding-top: 10px;
|
|
49
70
|
display: flex;
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
const tabHoverBgStyle2 = computed(
|
|
53
|
-
|
|
71
|
+
`
|
|
72
|
+
);
|
|
73
|
+
const tabHoverBgStyle2 = computed(
|
|
74
|
+
() => css`
|
|
54
75
|
&:before {
|
|
55
76
|
background: ${token.value.colorPrimaryBgHover};
|
|
56
77
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
const closeBtnStyle2 = computed(
|
|
60
|
-
|
|
78
|
+
`
|
|
79
|
+
);
|
|
80
|
+
const closeBtnStyle2 = computed(
|
|
81
|
+
() => css`
|
|
61
82
|
&:hover {
|
|
62
83
|
background: ${token.value.colorPrimaryBorderHover};
|
|
63
84
|
border-radius: 50%;
|
|
64
85
|
}
|
|
65
|
-
|
|
66
|
-
|
|
86
|
+
`
|
|
87
|
+
);
|
|
67
88
|
return {
|
|
68
89
|
tabsNavStyle: tabsNavStyle2,
|
|
69
90
|
tabHoverBgStyle: tabHoverBgStyle2,
|
|
70
|
-
closeBtnStyle: closeBtnStyle2
|
|
91
|
+
closeBtnStyle: closeBtnStyle2,
|
|
92
|
+
dynamicVars: dynamicVars2
|
|
71
93
|
};
|
|
72
94
|
}
|
|
73
|
-
function
|
|
95
|
+
function useTabAndMenu() {
|
|
74
96
|
const route = useRoute();
|
|
75
97
|
const router = useRouter();
|
|
76
98
|
const store = useNavTabStore();
|
|
77
|
-
const
|
|
78
|
-
|
|
99
|
+
const appContext = inject(
|
|
100
|
+
AppContextKey,
|
|
101
|
+
null
|
|
102
|
+
);
|
|
103
|
+
const { list: rawList, activeKey: activeKey2 } = storeToRefs(store);
|
|
104
|
+
const instance = getCurrentInstance();
|
|
105
|
+
const t = (key) => {
|
|
106
|
+
const fallback = {
|
|
107
|
+
reload: "\u5237\u65B0",
|
|
108
|
+
other: "\u5173\u95ED\u5176\u5B83",
|
|
109
|
+
selfClose: "\u5173\u95ED",
|
|
110
|
+
left: "\u5173\u95ED\u5DE6\u4FA7\u6807\u7B7E",
|
|
111
|
+
right: "\u5173\u95ED\u53F3\u4FA7\u6807\u7B7E"
|
|
112
|
+
};
|
|
113
|
+
const globalT = instance == null ? void 0 : instance.appContext.config.globalProperties.$t;
|
|
114
|
+
const i18nKey = `common.tabsContextMenu.${key}`;
|
|
115
|
+
if (typeof globalT === "function") {
|
|
116
|
+
const result = globalT(i18nKey);
|
|
117
|
+
if (result !== i18nKey) return result;
|
|
118
|
+
}
|
|
119
|
+
return fallback[key] || key;
|
|
120
|
+
};
|
|
121
|
+
const computedList = computed(() => {
|
|
122
|
+
const total = rawList.value.length;
|
|
123
|
+
return rawList.value.map((item, index) => {
|
|
124
|
+
var _a, _b;
|
|
125
|
+
const isFirst = index === 0;
|
|
126
|
+
const isLast = index === total - 1;
|
|
127
|
+
const isOnly = total === 1;
|
|
128
|
+
const canCloseSelf = !((_a = item.meta) == null ? void 0 : _a.keepOpen) && !isOnly;
|
|
129
|
+
const hasLeftClosable = rawList.value.slice(0, index).some((i) => {
|
|
130
|
+
var _a2;
|
|
131
|
+
return !((_a2 = i.meta) == null ? void 0 : _a2.keepOpen);
|
|
132
|
+
});
|
|
133
|
+
const hasRightClosable = rawList.value.slice(index + 1).some((i) => {
|
|
134
|
+
var _a2;
|
|
135
|
+
return !((_a2 = i.meta) == null ? void 0 : _a2.keepOpen);
|
|
136
|
+
});
|
|
137
|
+
const hasOtherClosable = rawList.value.some(
|
|
138
|
+
(i) => {
|
|
139
|
+
var _a2;
|
|
140
|
+
return i.fullPath !== item.fullPath && !((_a2 = i.meta) == null ? void 0 : _a2.keepOpen);
|
|
141
|
+
}
|
|
142
|
+
);
|
|
143
|
+
return __spreadProps(__spreadValues({}, item), {
|
|
144
|
+
closeBtnVisible: !((_b = item.meta) == null ? void 0 : _b.keepOpen) && !isOnly,
|
|
145
|
+
menus: [
|
|
146
|
+
{
|
|
147
|
+
key: "reload",
|
|
148
|
+
title: t("reload"),
|
|
149
|
+
icon: ReloadOutlined,
|
|
150
|
+
disabled: false
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
key: "selfClose",
|
|
154
|
+
title: t("selfClose"),
|
|
155
|
+
icon: CloseOutlined,
|
|
156
|
+
disabled: !canCloseSelf
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
key: "other",
|
|
160
|
+
title: t("other"),
|
|
161
|
+
icon: CloseOutlined,
|
|
162
|
+
disabled: !hasOtherClosable
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
key: "left",
|
|
166
|
+
title: t("left"),
|
|
167
|
+
icon: VerticalRightOutlined,
|
|
168
|
+
disabled: isFirst || !hasLeftClosable
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
key: "right",
|
|
172
|
+
title: t("right"),
|
|
173
|
+
icon: VerticalLeftOutlined,
|
|
174
|
+
disabled: isLast || !hasRightClosable
|
|
175
|
+
}
|
|
176
|
+
]
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
});
|
|
79
180
|
watch(
|
|
80
181
|
() => route.fullPath,
|
|
81
182
|
(val) => {
|
|
82
|
-
save(route);
|
|
83
|
-
|
|
183
|
+
store.save(route);
|
|
184
|
+
nextTick(() => {
|
|
185
|
+
activeKey2.value = val;
|
|
186
|
+
});
|
|
84
187
|
},
|
|
85
|
-
{
|
|
86
|
-
immediate: true
|
|
87
|
-
}
|
|
188
|
+
{ immediate: true }
|
|
88
189
|
);
|
|
89
190
|
const onChange2 = (key) => {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
191
|
+
const targetKey = String(key);
|
|
192
|
+
if (targetKey !== route.path) {
|
|
193
|
+
const rs = rawList.value.find(
|
|
194
|
+
(item) => item.fullPath === targetKey
|
|
195
|
+
);
|
|
196
|
+
if (rs) router.push(rs);
|
|
95
197
|
}
|
|
96
198
|
};
|
|
97
199
|
const onClose2 = ($event, key) => {
|
|
98
200
|
if (!key) return;
|
|
99
201
|
$event.stopPropagation();
|
|
100
|
-
deleteTabs(key);
|
|
101
|
-
const backRoute =
|
|
102
|
-
if (backRoute.fullPath)
|
|
202
|
+
store.deleteTabs(key);
|
|
203
|
+
const backRoute = rawList.value[rawList.value.length - 1];
|
|
204
|
+
if (backRoute == null ? void 0 : backRoute.fullPath)
|
|
103
205
|
router.push(backRoute.fullPath);
|
|
104
|
-
}
|
|
105
|
-
};
|
|
106
|
-
const closeBtnStatus2 = (item) => {
|
|
107
|
-
var _a;
|
|
108
|
-
if ((_a = item.meta) == null ? void 0 : _a.keepOpen) {
|
|
109
|
-
return false;
|
|
110
|
-
} else {
|
|
111
|
-
return list2.value.length !== 1;
|
|
112
|
-
}
|
|
113
206
|
};
|
|
114
|
-
return {
|
|
115
|
-
activeKey: activeKey2,
|
|
116
|
-
list: list2,
|
|
117
|
-
closeBtnStatus: closeBtnStatus2,
|
|
118
|
-
onChange: onChange2,
|
|
119
|
-
onClose: onClose2
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
function useTabsContextMenu() {
|
|
123
|
-
const appContext = inject(
|
|
124
|
-
AppContextKey,
|
|
125
|
-
null
|
|
126
|
-
);
|
|
127
|
-
const store = useNavTabStore();
|
|
128
|
-
const router = useRouter();
|
|
129
207
|
const onContextMenuClick2 = ({ key }, item) => {
|
|
130
|
-
var _a
|
|
208
|
+
var _a;
|
|
131
209
|
const targetKey = item.fullPath;
|
|
210
|
+
if (!targetKey) return;
|
|
132
211
|
switch (key) {
|
|
133
212
|
case "reload":
|
|
134
213
|
(_a = appContext == null ? void 0 : appContext.onReloadPage) == null ? void 0 : _a.call(appContext, item);
|
|
135
214
|
break;
|
|
215
|
+
case "selfClose":
|
|
216
|
+
store.deleteTabs(targetKey);
|
|
217
|
+
if (activeKey2.value === targetKey) {
|
|
218
|
+
const last = rawList.value[rawList.value.length - 1];
|
|
219
|
+
if (last == null ? void 0 : last.fullPath) router.push(last.fullPath);
|
|
220
|
+
}
|
|
221
|
+
break;
|
|
136
222
|
case "other":
|
|
137
|
-
|
|
138
|
-
|
|
223
|
+
store.closeOtherTabs(targetKey);
|
|
224
|
+
if (activeKey2.value !== targetKey)
|
|
225
|
+
router.push(targetKey);
|
|
139
226
|
break;
|
|
140
227
|
case "left":
|
|
141
|
-
|
|
142
|
-
router.push(targetKey);
|
|
228
|
+
store.closeLeftTabs(targetKey);
|
|
143
229
|
break;
|
|
144
230
|
case "right":
|
|
145
|
-
|
|
146
|
-
router.push(targetKey);
|
|
231
|
+
store.closeRightTabs(targetKey);
|
|
147
232
|
break;
|
|
148
233
|
}
|
|
149
234
|
};
|
|
150
235
|
return {
|
|
236
|
+
activeKey: activeKey2,
|
|
237
|
+
list: computedList,
|
|
151
238
|
enableTabContextMenu: (appContext == null ? void 0 : appContext.enableTabContextMenu) || false,
|
|
239
|
+
onChange: onChange2,
|
|
240
|
+
onClose: onClose2,
|
|
152
241
|
onContextMenuClick: onContextMenuClick2
|
|
153
242
|
};
|
|
154
243
|
}
|
|
244
|
+
const {
|
|
245
|
+
tabsNavStyle,
|
|
246
|
+
tabHoverBgStyle,
|
|
247
|
+
closeBtnStyle,
|
|
248
|
+
dynamicVars
|
|
249
|
+
} = useStyle();
|
|
250
|
+
const {
|
|
251
|
+
activeKey,
|
|
252
|
+
list,
|
|
253
|
+
enableTabContextMenu,
|
|
254
|
+
onChange,
|
|
255
|
+
onClose,
|
|
256
|
+
onContextMenuClick
|
|
257
|
+
} = useTabAndMenu();
|
|
155
258
|
return (_ctx, _cache) => {
|
|
156
259
|
const _component_a_menu_item = resolveComponent("a-menu-item");
|
|
157
260
|
const _component_a_menu = resolveComponent("a-menu");
|
|
@@ -161,17 +264,17 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
161
264
|
return openBlock(), createElementBlock(
|
|
162
265
|
"div",
|
|
163
266
|
{
|
|
164
|
-
class: normalizeClass(["tabs-nav-wrapper", unref(tabsNavStyle)])
|
|
267
|
+
class: normalizeClass(["tabs-nav-wrapper", unref(cx)(unref(tabsNavStyle))]),
|
|
268
|
+
style: normalizeStyle(unref(dynamicVars))
|
|
165
269
|
},
|
|
166
270
|
[
|
|
167
271
|
createVNode(unref(Search)),
|
|
168
272
|
createElementVNode("div", _hoisted_1, [
|
|
169
273
|
createVNode(_component_a_tabs, {
|
|
170
274
|
size: "small",
|
|
171
|
-
|
|
172
|
-
"onUpdate:activeKey": _cache[0] || (_cache[0] = ($event) => isRef(activeKey) ? activeKey.value = $event : null),
|
|
275
|
+
"active-key": unref(activeKey),
|
|
173
276
|
type: "card",
|
|
174
|
-
"hide-add":
|
|
277
|
+
"hide-add": true,
|
|
175
278
|
onChange: unref(onChange)
|
|
176
279
|
}, {
|
|
177
280
|
default: withCtx(() => [
|
|
@@ -196,108 +299,89 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
196
299
|
2
|
|
197
300
|
/* CLASS */
|
|
198
301
|
),
|
|
199
|
-
_cache[
|
|
302
|
+
_cache[0] || (_cache[0] = createElementVNode(
|
|
200
303
|
"div",
|
|
201
304
|
{ class: "tab-dividers" },
|
|
202
305
|
null,
|
|
203
306
|
-1
|
|
204
307
|
/* CACHED */
|
|
205
308
|
)),
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
default: withCtx(() => {
|
|
277
|
-
var _a2;
|
|
278
|
-
return [
|
|
279
|
-
createElementVNode(
|
|
280
|
-
"div",
|
|
281
|
-
_hoisted_3,
|
|
282
|
-
toDisplayString(((_a2 = item.meta) == null ? void 0 : _a2.title) || "\u65E0\u6807\u9898"),
|
|
283
|
-
1
|
|
284
|
-
/* TEXT */
|
|
285
|
-
)
|
|
286
|
-
];
|
|
287
|
-
}),
|
|
288
|
-
_: 2
|
|
289
|
-
/* DYNAMIC */
|
|
290
|
-
},
|
|
291
|
-
1024
|
|
292
|
-
/* DYNAMIC_SLOTS */
|
|
293
|
-
)) : createCommentVNode("v-if", true),
|
|
294
|
-
unref(closeBtnStatus)(item) ? (openBlock(), createElementBlock("div", _hoisted_4, [
|
|
309
|
+
createElementVNode("div", _hoisted_2, [
|
|
310
|
+
!unref(enableTabContextMenu) ? (openBlock(), createElementBlock(
|
|
311
|
+
"div",
|
|
312
|
+
_hoisted_3,
|
|
313
|
+
toDisplayString(((_a = item.meta) == null ? void 0 : _a.title) || "\u65E0\u6807\u9898"),
|
|
314
|
+
1
|
|
315
|
+
/* TEXT */
|
|
316
|
+
)) : (openBlock(), createBlock(
|
|
317
|
+
_component_a_dropdown,
|
|
318
|
+
{
|
|
319
|
+
key: 1,
|
|
320
|
+
trigger: ["contextmenu"],
|
|
321
|
+
"destroy-popup-on-hide": true
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
overlay: withCtx(() => [
|
|
325
|
+
createVNode(_component_a_menu, {
|
|
326
|
+
onClick: (e) => unref(onContextMenuClick)(e, item)
|
|
327
|
+
}, {
|
|
328
|
+
default: withCtx(() => [
|
|
329
|
+
(openBlock(true), createElementBlock(
|
|
330
|
+
Fragment,
|
|
331
|
+
null,
|
|
332
|
+
renderList(item.menus, (menu) => {
|
|
333
|
+
return openBlock(), createBlock(_component_a_menu_item, {
|
|
334
|
+
key: menu.key,
|
|
335
|
+
disabled: menu.disabled
|
|
336
|
+
}, {
|
|
337
|
+
default: withCtx(() => [
|
|
338
|
+
menu.icon ? (openBlock(), createBlock(resolveDynamicComponent(menu.icon), { key: 0 })) : createCommentVNode("v-if", true),
|
|
339
|
+
createElementVNode(
|
|
340
|
+
"span",
|
|
341
|
+
_hoisted_5,
|
|
342
|
+
toDisplayString(menu.title),
|
|
343
|
+
1
|
|
344
|
+
/* TEXT */
|
|
345
|
+
)
|
|
346
|
+
]),
|
|
347
|
+
_: 2
|
|
348
|
+
/* DYNAMIC */
|
|
349
|
+
}, 1032, ["disabled"]);
|
|
350
|
+
}),
|
|
351
|
+
128
|
|
352
|
+
/* KEYED_FRAGMENT */
|
|
353
|
+
))
|
|
354
|
+
]),
|
|
355
|
+
_: 2
|
|
356
|
+
/* DYNAMIC */
|
|
357
|
+
}, 1032, ["onClick"])
|
|
358
|
+
]),
|
|
359
|
+
default: withCtx(() => {
|
|
360
|
+
var _a2;
|
|
361
|
+
return [
|
|
362
|
+
createElementVNode(
|
|
363
|
+
"div",
|
|
364
|
+
_hoisted_4,
|
|
365
|
+
toDisplayString(((_a2 = item.meta) == null ? void 0 : _a2.title) || "\u65E0\u6807\u9898"),
|
|
366
|
+
1
|
|
367
|
+
/* TEXT */
|
|
368
|
+
)
|
|
369
|
+
];
|
|
370
|
+
}),
|
|
371
|
+
_: 2
|
|
372
|
+
/* DYNAMIC */
|
|
373
|
+
},
|
|
374
|
+
1024
|
|
375
|
+
/* DYNAMIC_SLOTS */
|
|
376
|
+
))
|
|
377
|
+
]),
|
|
378
|
+
item.closeBtnVisible ? (openBlock(), createElementBlock("div", _hoisted_6, [
|
|
295
379
|
createElementVNode("div", {
|
|
296
380
|
class: normalizeClass(["close-btn", unref(closeBtnStyle)]),
|
|
297
381
|
onClick: ($event) => unref(onClose)($event, item.fullPath)
|
|
298
382
|
}, [
|
|
299
383
|
createVNode(unref(CloseOutlined))
|
|
300
|
-
], 10,
|
|
384
|
+
], 10, _hoisted_7)
|
|
301
385
|
])) : createCommentVNode("v-if", true)
|
|
302
386
|
];
|
|
303
387
|
}),
|
|
@@ -311,11 +395,11 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
311
395
|
]),
|
|
312
396
|
_: 1
|
|
313
397
|
/* STABLE */
|
|
314
|
-
}, 8, ["
|
|
398
|
+
}, 8, ["active-key", "onChange"])
|
|
315
399
|
])
|
|
316
400
|
],
|
|
317
|
-
|
|
318
|
-
/* CLASS */
|
|
401
|
+
6
|
|
402
|
+
/* CLASS, STYLE */
|
|
319
403
|
);
|
|
320
404
|
};
|
|
321
405
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tab.vue2.mjs","sources":["../../../../src/components/tab/Tab.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport {\r\n computed,\r\n type ComputedRef,\r\n inject,\r\n watch\r\n} from \"vue\";\r\nimport { useRoute, useRouter } from \"vue-router\";\r\nimport { theme } from \"ant-design-vue\";\r\nimport { storeToRefs } from \"pinia\";\r\n\r\nimport {\r\n AppContext,\r\n AppContextKey\r\n} from \"../layout/AppContext\";\r\nimport Search from \"./Search\";\r\nimport {\r\n CloseOutlined,\r\n ReloadOutlined\r\n} from \"@ant-design/icons-vue\";\r\nimport {\r\n type NavTabsState,\r\n useNavTabStore\r\n} from \"@ditari/store\";\r\nimport { css } from \"@emotion/css\";\r\nimport type { GlobalToken } from \"ant-design-vue/es/theme/interface\";\r\n\r\nconst { tabsNavStyle, tabHoverBgStyle, closeBtnStyle } =\r\n useStyle();\r\n\r\nconst {\r\n activeKey,\r\n list,\r\n closeBtnStatus,\r\n onChange,\r\n onClose\r\n} = useTab();\r\n\r\nconst { enableTabContextMenu, onContextMenuClick } =\r\n useTabsContextMenu();\r\n\r\nfunction useStyle(): {\r\n tabsNavStyle: ComputedRef<string>;\r\n tabHoverBgStyle: ComputedRef<string>;\r\n closeBtnStyle: ComputedRef<string>;\r\n} {\r\n const { useToken } = theme;\r\n const { token }: { token: ComputedRef<GlobalToken> } =\r\n useToken();\r\n\r\n const activeTabColor = computed(\r\n () => token.value.colorBgLayout\r\n );\r\n const splitColor = computed(\r\n () => token.value.colorBorderSecondary\r\n );\r\n\r\n const tabsNavStyle = computed(() => {\r\n return css`\r\n --active-tab-color: ${activeTabColor.value};\r\n --splitColor: ${splitColor.value};\r\n padding-top: 10px;\r\n display: flex;\r\n `;\r\n });\r\n\r\n const tabHoverBgStyle = computed(() => {\r\n return css`\r\n &:before {\r\n background: ${token.value.colorPrimaryBgHover};\r\n }\r\n `;\r\n });\r\n\r\n const closeBtnStyle = computed(() => {\r\n return css`\r\n &:hover {\r\n background: ${token.value.colorPrimaryBorderHover};\r\n border-radius: 50%;\r\n }\r\n `;\r\n });\r\n\r\n return {\r\n tabsNavStyle,\r\n tabHoverBgStyle,\r\n closeBtnStyle\r\n };\r\n}\r\n\r\nfunction useTab() {\r\n const route = useRoute();\r\n const router = useRouter();\r\n\r\n const store = useNavTabStore();\r\n const { list, activeKey } = storeToRefs(store);\r\n const { save, deleteTabs } = store;\r\n\r\n watch(\r\n () => route.fullPath,\r\n val => {\r\n save(route);\r\n activeKey.value = val;\r\n },\r\n {\r\n immediate: true\r\n }\r\n );\r\n\r\n const onChange = (key: string) => {\r\n if (key !== route.path) {\r\n // 匹配打开的标签路由数据\r\n const rs = list.value.filter(\r\n item => item.fullPath === key\r\n )[0];\r\n router.push(rs);\r\n }\r\n };\r\n\r\n const onClose = (\r\n $event: Event,\r\n key: string | undefined\r\n ) => {\r\n if (!key) return;\r\n //阻止冒泡\r\n $event.stopPropagation();\r\n // 删除标签\r\n deleteTabs(key);\r\n // 重新push已打开的路由\r\n const backRoute = list.value[list.value.length - 1];\r\n if (backRoute.fullPath) {\r\n router.push(backRoute.fullPath);\r\n }\r\n };\r\n\r\n const closeBtnStatus = (item: NavTabsState) => {\r\n // 如果meta有设置keepOpen则隐藏关闭按钮\r\n if (item.meta?.keepOpen) {\r\n return false;\r\n } else {\r\n // 如果只有一个标签,则隐藏关闭按钮\r\n return list.value.length !== 1;\r\n }\r\n };\r\n\r\n return {\r\n activeKey,\r\n list,\r\n closeBtnStatus,\r\n onChange,\r\n onClose\r\n };\r\n}\r\n\r\nfunction useTabsContextMenu() {\r\n const appContext = inject<AppContext | null>(\r\n AppContextKey,\r\n null\r\n );\r\n const store = useNavTabStore();\r\n const router = useRouter();\r\n\r\n const onContextMenuClick = (\r\n { key }: { key: string },\r\n item: any\r\n ) => {\r\n const targetKey = item.fullPath;\r\n switch (key) {\r\n case \"reload\":\r\n appContext?.onReloadPage?.(item);\r\n break;\r\n case \"other\":\r\n store.closeOtherTabs?.(targetKey);\r\n router.push(targetKey);\r\n break;\r\n case \"left\":\r\n store.closeLeftTabs?.(targetKey);\r\n router.push(targetKey);\r\n break;\r\n case \"right\":\r\n store.closeRightTabs?.(targetKey);\r\n router.push(targetKey);\r\n break;\r\n }\r\n };\r\n\r\n return {\r\n enableTabContextMenu:\r\n appContext?.enableTabContextMenu || false,\r\n onContextMenuClick\r\n };\r\n}\r\n</script>\r\n<template>\r\n <div class=\"tabs-nav-wrapper\" :class=\"tabsNavStyle\">\r\n <Search />\r\n <div class=\"d-tabs-nav\">\r\n <a-tabs\r\n size=\"small\"\r\n v-model:activeKey=\"activeKey\"\r\n type=\"card\"\r\n hide-add\r\n @change=\"onChange\"\r\n >\r\n <a-tab-pane\r\n :key=\"item.fullPath\"\r\n :closable=\"false\"\r\n v-for=\"item in list\"\r\n :class=\"{ active: activeKey === item.fullPath }\"\r\n >\r\n <template #tab>\r\n <div\r\n class=\"tab-hover-bg\"\r\n :class=\"tabHoverBgStyle\"\r\n ></div>\r\n <div class=\"tab-dividers\"></div>\r\n <div\r\n class=\"tab-item\"\r\n v-if=\"!enableTabContextMenu\"\r\n >\r\n {{ item.meta?.title || \"无标题\" }}\r\n </div>\r\n <a-dropdown\r\n :trigger=\"['contextmenu']\"\r\n v-if=\"enableTabContextMenu\"\r\n >\r\n <div class=\"tab-item\">\r\n {{ item.meta?.title || \"无标题\" }}\r\n </div>\r\n <template #overlay>\r\n <a-menu\r\n @click=\"e => onContextMenuClick(e, item)\"\r\n >\r\n <a-menu-item key=\"reload\">\r\n <ReloadOutlined />\r\n 重新加载\r\n </a-menu-item>\r\n <a-menu-item key=\"other\">\r\n <CloseOutlined />\r\n 关闭其他\r\n </a-menu-item>\r\n <a-menu-item key=\"right\"\r\n >关闭右侧标签\r\n </a-menu-item>\r\n <a-menu-item key=\"left\"\r\n >关闭左侧标签\r\n </a-menu-item>\r\n </a-menu>\r\n </template>\r\n </a-dropdown>\r\n\r\n <div\r\n class=\"tab-close\"\r\n v-if=\"closeBtnStatus(item)\"\r\n >\r\n <div\r\n class=\"close-btn\"\r\n :class=\"closeBtnStyle\"\r\n @click=\"onClose($event, item.fullPath)\"\r\n >\r\n <CloseOutlined />\r\n </div>\r\n </div>\r\n </template>\r\n </a-tab-pane>\r\n </a-tabs>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<style lang=\"scss\"></style>\r\n"],"names":["tabsNavStyle","tabHoverBgStyle","closeBtnStyle","list","activeKey","onChange","onClose","closeBtnStatus","onContextMenuClick","_createElementBlock","_normalizeClass","_unref","_createVNode","_createElementVNode","_Fragment","_renderList","_createBlock","_openBlock","_toDisplayString","_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Tab.vue2.mjs","sources":["../../../../src/components/tab/Tab.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport {\r\n computed,\r\n type ComputedRef,\r\n getCurrentInstance,\r\n inject,\r\n nextTick,\r\n watch\r\n} from \"vue\";\r\nimport {\r\n type RouteLocationNormalizedLoaded,\r\n useRoute,\r\n useRouter\r\n} from \"vue-router\";\r\nimport { theme } from \"ant-design-vue\";\r\nimport { storeToRefs } from \"pinia\";\r\n\r\nimport {\r\n AppContext,\r\n AppContextKey\r\n} from \"../layout/AppContext\";\r\nimport Search from \"./Search\";\r\nimport {\r\n CloseOutlined,\r\n ReloadOutlined,\r\n VerticalLeftOutlined,\r\n VerticalRightOutlined\r\n} from \"@ant-design/icons-vue\";\r\nimport { useAppStore, useNavTabStore } from \"@ditari/store\";\r\nimport { css, cx } from \"@emotion/css\";\r\nimport type { GlobalToken } from \"ant-design-vue/es/theme/interface\";\r\n\r\n// 1. 样式逻辑与变量抽离\r\nfunction useStyle() {\r\n const { useToken } = theme;\r\n const { token }: { token: ComputedRef<GlobalToken> } =\r\n useToken();\r\n\r\n const appStore = useAppStore();\r\n const { tabsTokenStyle } = storeToRefs(appStore);\r\n\r\n const dynamicVars = computed(() => ({\r\n \"--active-tab-color\":\r\n tabsTokenStyle?.value?.colorBgActive,\r\n \"--splitColor\": tabsTokenStyle?.value?.colorSplit,\r\n \"--active-text-color\":\r\n tabsTokenStyle?.value?.colorTextActive,\r\n \"--active-shadow-color\":\r\n tabsTokenStyle?.value?.colorShadowActive,\r\n \"--tabs-text-color\":\r\n tabsTokenStyle?.value?.colorTabsText\r\n }));\r\n\r\n const tabsNavStyle = computed(\r\n () => css`\r\n --active-tab-color: var(--active-tab-color);\r\n --splitColor: var(--splitColor);\r\n --active-text-color: var(--active-text-color);\r\n --active-shadow-color: var(--active-shadow-color);\r\n --tabs-text-color: var(--tabs-text-color);\r\n padding-top: 10px;\r\n display: flex;\r\n `\r\n );\r\n\r\n const tabHoverBgStyle = computed(\r\n () => css`\r\n &:before {\r\n background: ${token.value.colorPrimaryBgHover};\r\n }\r\n `\r\n );\r\n\r\n const closeBtnStyle = computed(\r\n () => css`\r\n &:hover {\r\n background: ${token.value.colorPrimaryBorderHover};\r\n border-radius: 50%;\r\n }\r\n `\r\n );\r\n\r\n return {\r\n tabsNavStyle,\r\n tabHoverBgStyle,\r\n closeBtnStyle,\r\n dynamicVars\r\n };\r\n}\r\n\r\n// 2. 增强后的标签页与上下文菜单逻辑\r\nfunction useTabAndMenu() {\r\n const route = useRoute();\r\n const router = useRouter();\r\n const store = useNavTabStore();\r\n const appContext = inject<AppContext | null>(\r\n AppContextKey,\r\n null\r\n );\r\n const { list: rawList, activeKey } = storeToRefs(store);\r\n const instance = getCurrentInstance();\r\n\r\n // 安全的翻译函数:拦截 Not Found 警告\r\n const t = (key: string): string => {\r\n const fallback: Record<string, string> = {\r\n reload: \"刷新\",\r\n other: \"关闭其它\",\r\n selfClose: \"关闭\",\r\n left: \"关闭左侧标签\",\r\n right: \"关闭右侧标签\"\r\n };\r\n const globalT =\r\n instance?.appContext.config.globalProperties.$t;\r\n const i18nKey = `common.tabsContextMenu.${key}`;\r\n\r\n if (typeof globalT === \"function\") {\r\n const result = globalT(i18nKey);\r\n // 如果 i18n 返回了 key 路径本身,说明没找到翻译,使用 fallback\r\n if (result !== i18nKey) return result;\r\n }\r\n return fallback[key] || key;\r\n };\r\n\r\n // 【核心优化】:计算并派生 list,包含每个 item 的菜单状态\r\n const computedList = computed(() => {\r\n const total = rawList.value.length;\r\n\r\n return rawList.value.map((item, index) => {\r\n const isFirst = index === 0;\r\n const isLast = index === total - 1;\r\n const isOnly = total === 1;\r\n\r\n // 计算菜单禁用状态\r\n const canCloseSelf = !item.meta?.keepOpen && !isOnly;\r\n const hasLeftClosable = rawList.value\r\n .slice(0, index)\r\n .some(i => !i.meta?.keepOpen);\r\n const hasRightClosable = rawList.value\r\n .slice(index + 1)\r\n .some(i => !i.meta?.keepOpen);\r\n const hasOtherClosable = rawList.value.some(\r\n i =>\r\n i.fullPath !== item.fullPath && !i.meta?.keepOpen\r\n );\r\n\r\n return {\r\n ...item,\r\n closeBtnVisible: !item.meta?.keepOpen && !isOnly,\r\n menus: [\r\n {\r\n key: \"reload\",\r\n title: t(\"reload\"),\r\n icon: ReloadOutlined,\r\n disabled: false\r\n },\r\n {\r\n key: \"selfClose\",\r\n title: t(\"selfClose\"),\r\n icon: CloseOutlined,\r\n disabled: !canCloseSelf\r\n },\r\n {\r\n key: \"other\",\r\n title: t(\"other\"),\r\n icon: CloseOutlined,\r\n disabled: !hasOtherClosable\r\n },\r\n {\r\n key: \"left\",\r\n title: t(\"left\"),\r\n icon: VerticalRightOutlined,\r\n disabled: isFirst || !hasLeftClosable\r\n },\r\n {\r\n key: \"right\",\r\n title: t(\"right\"),\r\n icon: VerticalLeftOutlined,\r\n disabled: isLast || !hasRightClosable\r\n }\r\n ]\r\n };\r\n });\r\n });\r\n\r\n // 路由监听\r\n watch(\r\n () => route.fullPath,\r\n val => {\r\n store.save(route as RouteLocationNormalizedLoaded);\r\n nextTick(() => {\r\n activeKey.value = val;\r\n });\r\n },\r\n { immediate: true }\r\n );\r\n\r\n // 操作方法\r\n const onChange = (key: string | number) => {\r\n const targetKey = String(key);\r\n if (targetKey !== route.path) {\r\n const rs = rawList.value.find(\r\n item => item.fullPath === targetKey\r\n );\r\n if (rs) router.push(rs);\r\n }\r\n };\r\n\r\n const onClose = (\r\n $event: Event,\r\n key: string | undefined\r\n ) => {\r\n if (!key) return;\r\n $event.stopPropagation();\r\n store.deleteTabs(key);\r\n const backRoute =\r\n rawList.value[rawList.value.length - 1];\r\n if (backRoute?.fullPath)\r\n router.push(backRoute.fullPath);\r\n };\r\n\r\n const onContextMenuClick = (\r\n { key }: { key: string | number },\r\n item: any\r\n ) => {\r\n const targetKey = item.fullPath;\r\n if (!targetKey) return;\r\n switch (key) {\r\n case \"reload\":\r\n appContext?.onReloadPage?.(item);\r\n break;\r\n case \"selfClose\":\r\n store.deleteTabs(targetKey);\r\n if (activeKey.value === targetKey) {\r\n const last =\r\n rawList.value[rawList.value.length - 1];\r\n if (last?.fullPath) router.push(last.fullPath);\r\n }\r\n break;\r\n case \"other\":\r\n store.closeOtherTabs(targetKey);\r\n if (activeKey.value !== targetKey)\r\n router.push(targetKey);\r\n break;\r\n case \"left\":\r\n store.closeLeftTabs(targetKey);\r\n break;\r\n case \"right\":\r\n store.closeRightTabs(targetKey);\r\n break;\r\n }\r\n };\r\n\r\n return {\r\n activeKey,\r\n list: computedList,\r\n enableTabContextMenu:\r\n appContext?.enableTabContextMenu || false,\r\n onChange,\r\n onClose,\r\n onContextMenuClick\r\n };\r\n}\r\n\r\nconst {\r\n tabsNavStyle,\r\n tabHoverBgStyle,\r\n closeBtnStyle,\r\n dynamicVars\r\n} = useStyle();\r\nconst {\r\n activeKey,\r\n list,\r\n enableTabContextMenu,\r\n onChange,\r\n onClose,\r\n onContextMenuClick\r\n} = useTabAndMenu();\r\n</script>\r\n\r\n<template>\r\n <div\r\n class=\"tabs-nav-wrapper\"\r\n :class=\"cx(tabsNavStyle)\"\r\n :style=\"dynamicVars\"\r\n >\r\n <Search />\r\n <div class=\"d-tabs-nav\">\r\n <a-tabs\r\n size=\"small\"\r\n :active-key=\"activeKey\"\r\n type=\"card\"\r\n :hide-add=\"true\"\r\n @change=\"onChange\"\r\n >\r\n <a-tab-pane\r\n v-for=\"item in list\"\r\n :key=\"item.fullPath\"\r\n :closable=\"false\"\r\n :class=\"{ active: activeKey === item.fullPath }\"\r\n >\r\n <template #tab>\r\n <div\r\n class=\"tab-hover-bg\"\r\n :class=\"tabHoverBgStyle\"\r\n ></div>\r\n <div class=\"tab-dividers\"></div>\r\n\r\n <div class=\"tab-item-container\">\r\n <template v-if=\"!enableTabContextMenu\">\r\n <div class=\"tab-item\">\r\n {{ item.meta?.title || \"无标题\" }}\r\n </div>\r\n </template>\r\n\r\n <a-dropdown\r\n v-else\r\n :trigger=\"['contextmenu']\"\r\n :destroy-popup-on-hide=\"true\"\r\n >\r\n <div class=\"tab-item\">\r\n {{ item.meta?.title || \"无标题\" }}\r\n </div>\r\n <template #overlay>\r\n <a-menu\r\n @click=\"\r\n e => onContextMenuClick(e, item)\r\n \"\r\n >\r\n <a-menu-item\r\n v-for=\"menu in item.menus\"\r\n :key=\"menu.key\"\r\n :disabled=\"menu.disabled\"\r\n >\r\n <component\r\n :is=\"menu.icon\"\r\n v-if=\"menu.icon\"\r\n />\r\n <span style=\"margin-left: 10px\">{{\r\n menu.title\r\n }}</span>\r\n </a-menu-item>\r\n </a-menu>\r\n </template>\r\n </a-dropdown>\r\n </div>\r\n\r\n <div\r\n class=\"tab-close\"\r\n v-if=\"item.closeBtnVisible\"\r\n >\r\n <div\r\n class=\"close-btn\"\r\n :class=\"closeBtnStyle\"\r\n @click=\"onClose($event, item.fullPath)\"\r\n >\r\n <CloseOutlined />\r\n </div>\r\n </div>\r\n </template>\r\n </a-tab-pane>\r\n </a-tabs>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<style lang=\"scss\" scoped></style>\r\n"],"names":["dynamicVars","tabsNavStyle","tabHoverBgStyle","closeBtnStyle","activeKey","_a","onChange","onClose","onContextMenuClick","_createElementBlock","_normalizeClass","_unref","_createVNode","_createElementVNode","_Fragment","_renderList","_createBlock","_openBlock","_toDisplayString","_resolveDynamicComponent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCA,IAAA,SAAS,QAAA,GAAW;AAClB,MAAA,MAAM,EAAE,UAAS,GAAI,KAAA;AACrB,MAAA,MAAM,EAAE,KAAA,EAAM,GACZ,QAAA,EAAS;AAEX,MAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,MAAA,MAAM,EAAE,cAAA,EAAe,GAAI,WAAA,CAAY,QAAQ,CAAA;AAE/C,MAAA,MAAMA,YAAAA,GAAc,SAAS,MAAG;;AAAI,QAAA,OAAA;AAAA,UAClC,oBAAA,EAAA,CACE,EAAA,GAAA,cAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAgB,KAAA,KAAhB,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAuB,aAAA;AAAA,UACzB,cAAA,EAAA,CAAgB,EAAA,GAAA,cAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAgB,KAAA,KAAhB,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAuB,UAAA;AAAA,UACvC,qBAAA,EAAA,CACE,EAAA,GAAA,cAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAgB,KAAA,KAAhB,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAuB,eAAA;AAAA,UACzB,uBAAA,EAAA,CACE,EAAA,GAAA,cAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAgB,KAAA,KAAhB,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAuB,iBAAA;AAAA,UACzB,mBAAA,EAAA,CACE,EAAA,GAAA,cAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAgB,KAAA,KAAhB,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAuB;AAAA,SAC3B;AAAA,MAAA,CAAE,CAAA;AAEF,MAAA,MAAMC,aAAAA,GAAe,QAAA;AAAA,QACnB,MAAM,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA;AAAA,OASR;AAEA,MAAA,MAAMC,gBAAAA,GAAkB,QAAA;AAAA,QACtB,MAAM,GAAA;AAAA;AAAA,oBAAA,EAEY,KAAA,CAAM,MAAM,mBAAmB,CAAA;AAAA;AAAA,IAAA;AAAA,OAGnD;AAEA,MAAA,MAAMC,cAAAA,GAAgB,QAAA;AAAA,QACpB,MAAM,GAAA;AAAA;AAAA,oBAAA,EAEY,KAAA,CAAM,MAAM,uBAAuB,CAAA;AAAA;AAAA;AAAA,IAAA;AAAA,OAIvD;AAEA,MAAA,OAAO;AAAA,QACL,YAAA,EAAAF,aAAAA;AAAA,QACA,eAAA,EAAAC,gBAAAA;AAAA,QACA,aAAA,EAAAC,cAAAA;AAAA,QACA,WAAA,EAAAH;AAAA,OACF;AAAA,IACF;AAGA,IAAA,SAAS,aAAA,GAAgB;AACvB,MAAA,MAAM,QAAQ,QAAA,EAAS;AACvB,MAAA,MAAM,SAAS,SAAA,EAAU;AACzB,MAAA,MAAM,QAAQ,cAAA,EAAe;AAC7B,MAAA,MAAM,UAAA,GAAa,MAAA;AAAA,QACjB,aAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,WAAAI,UAAAA,EAAU,GAAI,YAAY,KAAK,CAAA;AACtD,MAAA,MAAM,WAAW,kBAAA,EAAmB;AAGpC,MAAA,MAAM,CAAA,GAAI,CAAC,GAAA,KAAwB;AACjC,QAAA,MAAM,QAAA,GAAmC;AAAA,UACvC,MAAA,EAAQ,cAAA;AAAA,UACR,KAAA,EAAO,0BAAA;AAAA,UACP,SAAA,EAAW,cAAA;AAAA,UACX,IAAA,EAAM,sCAAA;AAAA,UACN,KAAA,EAAO;AAAA,SACT;AACA,QAAA,MAAM,OAAA,GACJ,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,QAAA,CAAU,UAAA,CAAW,MAAA,CAAO,gBAAA,CAAiB,EAAA;AAC/C,QAAA,MAAM,OAAA,GAAU,0BAA0B,GAAG,CAAA,CAAA;AAE7C,QAAA,IAAI,OAAO,YAAY,UAAA,EAAY;AACjC,UAAA,MAAM,MAAA,GAAS,QAAQ,OAAO,CAAA;AAE9B,UAAA,IAAI,MAAA,KAAW,SAAS,OAAO,MAAA;AAAA,QACjC;AACA,QAAA,OAAO,QAAA,CAAS,GAAG,CAAA,IAAK,GAAA;AAAA,MAC1B,CAAA;AAGA,MAAA,MAAM,YAAA,GAAe,SAAS,MAAM;AAClC,QAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,CAAM,MAAA;AAE5B,QAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,GAAA,CAAI,CAAC,MAAM,KAAA,KAAU;;AACxC,UAAA,MAAM,UAAU,KAAA,KAAU,CAAA;AAC1B,UAAA,MAAM,MAAA,GAAS,UAAU,KAAA,GAAQ,CAAA;AACjC,UAAA,MAAM,SAAS,KAAA,KAAU,CAAA;AAGzB,UAAA,MAAM,eAAe,EAAA,CAAC,EAAA,GAAA,IAAA,CAAK,IAAA,KAAL,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAW,aAAY,CAAC,MAAA;AAC9C,UAAA,MAAM,eAAA,GAAkB,QAAQ,KAAA,CAC7B,KAAA,CAAM,GAAG,KAAK,CAAA,CACd,KAAK,CAAA,CAAA,KAAE;;AAAG,YAAA,OAAA,EAAA,CAACC,GAAAA,GAAA,CAAA,CAAE,IAAA,KAAF,IAAA,GAAA,KAAA,CAAA,GAAAA,GAAAA,CAAQ,QAAA,CAAA;AAAA,UAAA,CAAQ,CAAA;AAC9B,UAAA,MAAM,gBAAA,GAAmB,QAAQ,KAAA,CAC9B,KAAA,CAAM,QAAQ,CAAC,CAAA,CACf,KAAK,CAAA,CAAA,KAAE;;AAAG,YAAA,OAAA,EAAA,CAACA,GAAAA,GAAA,CAAA,CAAE,IAAA,KAAF,IAAA,GAAA,KAAA,CAAA,GAAAA,GAAAA,CAAQ,QAAA,CAAA;AAAA,UAAA,CAAQ,CAAA;AAC9B,UAAA,MAAM,gBAAA,GAAmB,QAAQ,KAAA,CAAM,IAAA;AAAA,YACrC,CAAA,CAAA,KAAE;;AACA,cAAA,OAAA,CAAA,CAAE,QAAA,KAAa,KAAK,QAAA,IAAY,EAAA,CAACA,MAAA,CAAA,CAAE,IAAA,KAAF,gBAAAA,GAAAA,CAAQ,QAAA,CAAA;AAAA,YAAA;AAAA,WAC7C;AAEA,UAAA,OAAO,iCACF,IAAA,CAAA,EADE;AAAA,YAEL,iBAAiB,EAAA,CAAC,EAAA,GAAA,IAAA,CAAK,IAAA,KAAL,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAW,aAAY,CAAC,MAAA;AAAA,YAC1C,KAAA,EAAO;AAAA,cACL;AAAA,gBACE,GAAA,EAAK,QAAA;AAAA,gBACL,KAAA,EAAO,EAAE,QAAQ,CAAA;AAAA,gBACjB,IAAA,EAAM,cAAA;AAAA,gBACN,QAAA,EAAU;AAAA,eACZ;AAAA,cACA;AAAA,gBACE,GAAA,EAAK,WAAA;AAAA,gBACL,KAAA,EAAO,EAAE,WAAW,CAAA;AAAA,gBACpB,IAAA,EAAM,aAAA;AAAA,gBACN,UAAU,CAAC;AAAA,eACb;AAAA,cACA;AAAA,gBACE,GAAA,EAAK,OAAA;AAAA,gBACL,KAAA,EAAO,EAAE,OAAO,CAAA;AAAA,gBAChB,IAAA,EAAM,aAAA;AAAA,gBACN,UAAU,CAAC;AAAA,eACb;AAAA,cACA;AAAA,gBACE,GAAA,EAAK,MAAA;AAAA,gBACL,KAAA,EAAO,EAAE,MAAM,CAAA;AAAA,gBACf,IAAA,EAAM,qBAAA;AAAA,gBACN,QAAA,EAAU,WAAW,CAAC;AAAA,eACxB;AAAA,cACA;AAAA,gBACE,GAAA,EAAK,OAAA;AAAA,gBACL,KAAA,EAAO,EAAE,OAAO,CAAA;AAAA,gBAChB,IAAA,EAAM,oBAAA;AAAA,gBACN,QAAA,EAAU,UAAU,CAAC;AAAA;AACvB;AACF,WACF,CAAA;AAAA,QACF,CAAC,CAAA;AAAA,MACH,CAAC,CAAA;AAGD,MAAA,KAAA;AAAA,QACE,MAAM,KAAA,CAAM,QAAA;AAAA,QACZ,CAAA,GAAA,KAAO;AACL,UAAA,KAAA,CAAM,KAAK,KAAsC,CAAA;AACjD,UAAA,QAAA,CAAS,MAAM;AACb,YAAAD,WAAU,KAAA,GAAQ,GAAA;AAAA,UACpB,CAAC,CAAA;AAAA,QACH,CAAA;AAAA,QACA,EAAE,WAAW,IAAA;AAAK,OACpB;AAGA,MAAA,MAAME,SAAAA,GAAW,CAAC,GAAA,KAAyB;AACzC,QAAA,MAAM,SAAA,GAAY,OAAO,GAAG,CAAA;AAC5B,QAAA,IAAI,SAAA,KAAc,MAAM,IAAA,EAAM;AAC5B,UAAA,MAAM,EAAA,GAAK,QAAQ,KAAA,CAAM,IAAA;AAAA,YACvB,CAAA,IAAA,KAAQ,KAAK,QAAA,KAAa;AAAA,WAC5B;AACA,UAAA,IAAI,EAAA,EAAI,MAAA,CAAO,IAAA,CAAK,EAAE,CAAA;AAAA,QACxB;AAAA,MACF,CAAA;AAEA,MAAA,MAAMC,QAAAA,GAAU,CACd,MAAA,EACA,GAAA,KACG;AACH,QAAA,IAAI,CAAC,GAAA,EAAK;AACV,QAAA,MAAA,CAAO,eAAA,EAAgB;AACvB,QAAA,KAAA,CAAM,WAAW,GAAG,CAAA;AACpB,QAAA,MAAM,YACJ,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,SAAS,CAAC,CAAA;AACxC,QAAA,IAAI,SAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,SAAA,CAAW,QAAA;AACb,UAAA,MAAA,CAAO,IAAA,CAAK,UAAU,QAAQ,CAAA;AAAA,MAClC,CAAA;AAEA,MAAA,MAAMC,mBAAAA,GAAqB,CACzB,EAAE,GAAA,IACF,IAAA,KACG;;AACH,QAAA,MAAM,YAAY,IAAA,CAAK,QAAA;AACvB,QAAA,IAAI,CAAC,SAAA,EAAW;AAChB,QAAA,QAAQ,GAAA;AAAK,UACX,KAAK,QAAA;AACH,YAAA,CAAA,EAAA,GAAA,UAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAY,iBAAZ,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,UAAA,EAA2B,IAAA,CAAA;AAC3B,YAAA;AAAA,UACF,KAAK,WAAA;AACH,YAAA,KAAA,CAAM,WAAW,SAAS,CAAA;AAC1B,YAAA,IAAIJ,UAAAA,CAAU,UAAU,SAAA,EAAW;AACjC,cAAA,MAAM,OACJ,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,SAAS,CAAC,CAAA;AACxC,cAAA,IAAI,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAM,QAAA,EAAU,MAAA,CAAO,IAAA,CAAK,KAAK,QAAQ,CAAA;AAAA,YAC/C;AACA,YAAA;AAAA,UACF,KAAK,OAAA;AACH,YAAA,KAAA,CAAM,eAAe,SAAS,CAAA;AAC9B,YAAA,IAAIA,WAAU,KAAA,KAAU,SAAA;AACtB,cAAA,MAAA,CAAO,KAAK,SAAS,CAAA;AACvB,YAAA;AAAA,UACF,KAAK,MAAA;AACH,YAAA,KAAA,CAAM,cAAc,SAAS,CAAA;AAC7B,YAAA;AAAA,UACF,KAAK,OAAA;AACH,YAAA,KAAA,CAAM,eAAe,SAAS,CAAA;AAC9B,YAAA;AAAA;AACJ,MACF,CAAA;AAEA,MAAA,OAAO;AAAA,QACL,SAAA,EAAAA,UAAAA;AAAA,QACA,IAAA,EAAM,YAAA;AAAA,QACN,oBAAA,EAAA,CACE,yCAAY,oBAAA,KAAwB,KAAA;AAAA,QACtC,QAAA,EAAAE,SAAAA;AAAA,QACA,OAAA,EAAAC,QAAAA;AAAA,QACA,kBAAA,EAAAC;AAAA,OACF;AAAA,IACF;AAEA,IAAA,MAAM;AAAA,MACJ,YAAA;AAAA,MACA,eAAA;AAAA,MACA,aAAA;AAAA,MACA;AAAA,QACE,QAAA,EAAS;AACb,IAAA,MAAM;AAAA,MACJ,SAAA;AAAA,MACA,IAAA;AAAA,MACA,oBAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,QACE,aAAA,EAAc;;;;;;;0BAIhBC,kBAAA;AAAA,QAkFM,KAAA;AAAA,QAAA;AAAA,UAjFJ,KAAA,EAAKC,cAAA,CAAA,CAAC,kBAAA,EACEC,KAAA,CAAA,EAAA,CAAA,CAAGA,KAAA,CAAA,YAAA,CAAY,CAAA,CAAA,CAAA;AAAA,UACtB,KAAA,iBAAOA,KAAA,CAAA,WAAA,CAAW;AAAA;;UAEnBC,WAAA,CAAUD,KAAA,CAAA,MAAA,CAAA,CAAA;AAAA,UACVE,kBAAA,CA2EM,OA3EN,UAAA,EA2EM;AAAA,YA1EJD,YAyES,iBAAA,EAAA;AAAA,cAxEP,IAAA,EAAK,OAAA;AAAA,cACJ,YAAA,EAAYD,MAAA,SAAA,CAAA;AAAA,cACb,IAAA,EAAK,MAAA;AAAA,cACJ,UAAA,EAAU,IAAA;AAAA,cACV,QAAA,EAAQA,MAAA,QAAA;AAAA;+BAGP,MAAoB;AAAA,kCADtBF,kBAAA;AAAA,kBAiEaK,QAAA;AAAA,kBAAA,IAAA;AAAA,kBAAAC,UAAA,CAhEIJ,KAAA,CAAA,IAAA,CAAA,EAAI,CAAZ,IAAA,KAAI;wCADbK,WAAA,CAiEa,qBAAA,EAAA;AAAA,sBA/DV,KAAK,IAAA,CAAK,QAAA;AAAA,sBACV,QAAA,EAAU,KAAA;AAAA,sBACV,KAAA,EAAKN,eAAA,EAAA,MAAA,EAAYC,MAAA,SAAA,CAAA,KAAc,IAAA,CAAK,QAAA,EAAQ;AAAA;sBAElC,GAAA,UACT,MAGO;;AAAA,wBAAA,OAAA;AAAA,0BAHPE,kBAAA;AAAA,4BAGO,KAAA;AAAA,4BAAA;AAAA,8BAFL,OAAKH,cAAA,CAAA,CAAC,gBACEC,KAAA,CAAA,eAAA,CAAe,CAAA;AAAA;;;;;oDAEzBE,kBAAA;AAAA,4BAAgC,KAAA;AAAA,4BAAA,EAA3B,OAAM,cAAA,EAAc;AAAA,4BAAA,IAAA;AAAA,4BAAA,CAAA;AAAA;AAAA,2BAAA,CAAA;AAAA,0BAEzBA,kBAAA,CAqCM,OArCN,UAAA,EAqCM;AAAA,6BApCaF,KAAA,CAAA,oBAAA,CAAA,IACfM,WAAA,EAAAR,kBAAA;AAAA,8BAEM,KAAA;AAAA,8BAFN,UAAA;AAAA,8BAEMS,eAAA,CAAA,CAAA,CADD,EAAA,GAAA,IAAA,CAAK,IAAA,KAAL,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAW,UAAK,oBAAA,CAAA;AAAA,8BAAA;AAAA;AAAA,6BAAA,kBAIvBF,WAAA;AAAA,8BA6Ba,qBAAA;AAAA,8BAAA;AAAA;gCA3BV,OAAA,EAAS,CAAA,aAAA,CAAA;AAAA,gCACT,uBAAA,EAAuB;AAAA;;gCAKb,OAAA,UACT,MAkBS;AAAA,kCAlBTJ,YAkBS,iBAAA,EAAA;AAAA,oCAjBN,SAA+B,CAAA,CAAA,KAAKD,KAAA,CAAA,kBAAA,CAAA,CAAmB,GAAG,IAAI;AAAA;qDAK7D,MAA0B;AAAA,uCAD5BM,SAAA,CAAA,IAAA,CAAA,EAAAR,kBAAA;AAAA,wCAYcK,QAAA;AAAA,wCAAA,IAAA;AAAA,wCAAAC,UAAA,CAXG,IAAA,CAAK,KAAA,GAAb,IAAA,KAAI;8DADbC,WAAA,CAYc,sBAAA,EAAA;AAAA,4CAVX,KAAK,IAAA,CAAK,GAAA;AAAA,4CACV,UAAU,IAAA,CAAK;AAAA;6DAEhB,MAGE;AAAA,8CADM,KAAK,IAAA,iBAFbA,WAAA,CAGEG,wBAFK,IAAA,CAAK,IAAI,CAAA,EAAA,EAAA,KAAA,CAAA,EAAA,CAAA;8CAGhBN,kBAAA;AAAA,gDAES,MAAA;AAAA,gDAFT,UAAA;AAAA,gDAESK,eAAA,CADP,KAAK,KAAK,CAAA;AAAA,gDAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;iDAnBlB,MAEM;;AAAA,kCAAA,OAAA;AAAA,oCAFNL,kBAAA;AAAA,sCAEM,KAAA;AAAA,sCAFN,UAAA;AAAA,sCAEMK,kBADDb,GAAAA,GAAA,IAAA,CAAK,SAAL,IAAA,GAAA,KAAA,CAAA,GAAAA,GAAAA,CAAW,UAAK,oBAAA,CAAA;AAAA,sCAAA;AAAA;AAAA;AAAA;;;;;;;;;0BA4BjB,KAAK,eAAA,IAFbY,SAAA,EAAA,EAAAR,kBAAA,CAWM,OAXN,UAAA,EAWM;AAAA,4BAPJI,mBAMM,KAAA,EAAA;AAAA,8BALJ,OAAKH,cAAA,CAAA,CAAC,aACEC,KAAA,CAAA,aAAA,CAAa,CAAA,CAAA;AAAA,8BACpB,OAAA,cAAOA,KAAA,CAAA,OAAA,CAAA,CAAQ,MAAA,EAAQ,KAAK,QAAQ;AAAA;8BAErCC,WAAA,CAAiBD,KAAA,CAAA,aAAA,CAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|