@ditari/bsui 5.1.4 → 5.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/cjs/components/card/Card.cjs +1 -1
  2. package/dist/cjs/components/card/Card.cjs.map +1 -1
  3. package/dist/cjs/components/dic/DicReplace.cjs +2 -2
  4. package/dist/cjs/components/dic/DicReplace.cjs.map +1 -1
  5. package/dist/cjs/components/layout/Layout.vue2.cjs +4 -18
  6. package/dist/cjs/components/layout/Layout.vue2.cjs.map +1 -1
  7. package/dist/cjs/components/layout/components/layout/HeaderLayout.vue2.cjs +3 -25
  8. package/dist/cjs/components/layout/components/layout/HeaderLayout.vue2.cjs.map +1 -1
  9. package/dist/cjs/components/tab/Tab.vue2.cjs +264 -180
  10. package/dist/cjs/components/tab/Tab.vue2.cjs.map +1 -1
  11. package/dist/cjs/components/table/Table.cjs +2 -2
  12. package/dist/cjs/components/table/Table.cjs.map +1 -1
  13. package/dist/cjs/components/table-form/TableForm.cjs +2 -2
  14. package/dist/cjs/components/table-form/TableForm.cjs.map +1 -1
  15. package/dist/cjs/components/table-form/interface.cjs +1 -1
  16. package/dist/cjs/components/table-form/interface.cjs.map +1 -1
  17. package/dist/cjs/components/table-form/style.cjs +1 -6
  18. package/dist/cjs/components/table-form/style.cjs.map +1 -1
  19. package/dist/css/components/tab/style/index.css +1 -1
  20. package/dist/css/index.css +1 -1
  21. package/dist/esm/components/card/Card.mjs +1 -1
  22. package/dist/esm/components/card/Card.mjs.map +1 -1
  23. package/dist/esm/components/dic/DicReplace.mjs +2 -2
  24. package/dist/esm/components/dic/DicReplace.mjs.map +1 -1
  25. package/dist/esm/components/layout/Layout.vue2.mjs +6 -20
  26. package/dist/esm/components/layout/Layout.vue2.mjs.map +1 -1
  27. package/dist/esm/components/layout/components/layout/HeaderLayout.vue2.mjs +5 -27
  28. package/dist/esm/components/layout/components/layout/HeaderLayout.vue2.mjs.map +1 -1
  29. package/dist/esm/components/tab/Tab.vue2.mjs +268 -184
  30. package/dist/esm/components/tab/Tab.vue2.mjs.map +1 -1
  31. package/dist/esm/components/table/Table.mjs +1 -1
  32. package/dist/esm/components/table/Table.mjs.map +1 -1
  33. package/dist/esm/components/table-form/TableForm.mjs +1 -1
  34. package/dist/esm/components/table-form/TableForm.mjs.map +1 -1
  35. package/dist/esm/components/table-form/interface.mjs +1 -1
  36. package/dist/esm/components/table-form/interface.mjs.map +1 -1
  37. package/dist/esm/components/table-form/style.mjs +1 -6
  38. package/dist/esm/components/table-form/style.mjs.map +1 -1
  39. package/dist/style/tab/style/index.scss +10 -4
  40. package/dist/types/components/card/Card.d.ts.map +1 -1
  41. package/dist/types/components/dic/DicReplace.d.ts.map +1 -1
  42. package/dist/types/components/layout/Layout.vue.d.ts +63 -51
  43. package/dist/types/components/layout/Layout.vue.d.ts.map +1 -1
  44. package/dist/types/components/layout/components/layout/HeaderLayout.vue.d.ts +63 -50
  45. package/dist/types/components/layout/components/layout/HeaderLayout.vue.d.ts.map +1 -1
  46. package/dist/types/components/tab/Tab.vue.d.ts +61 -22
  47. package/dist/types/components/tab/Tab.vue.d.ts.map +1 -1
  48. package/dist/types/components/table-form/TableFormItem.d.ts +4 -4
  49. package/dist/types/components/table-form/interface.d.ts +2 -2
  50. package/dist/types/components/table-form/interface.d.ts.map +1 -1
  51. package/dist/types/components/table-form/style.d.ts +1 -1
  52. package/dist/types/components/table-form/style.d.ts.map +1 -1
  53. package/package.json +3 -3
@@ -13,149 +13,252 @@ var store = require('@ditari/store');
13
13
  var css = require('@emotion/css');
14
14
 
15
15
  "use strict";
16
+ var __defProp = Object.defineProperty;
17
+ var __defProps = Object.defineProperties;
18
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
19
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
20
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
21
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
22
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
23
+ var __spreadValues = (a, b) => {
24
+ for (var prop in b || (b = {}))
25
+ if (__hasOwnProp.call(b, prop))
26
+ __defNormalProp(a, prop, b[prop]);
27
+ if (__getOwnPropSymbols)
28
+ for (var prop of __getOwnPropSymbols(b)) {
29
+ if (__propIsEnum.call(b, prop))
30
+ __defNormalProp(a, prop, b[prop]);
31
+ }
32
+ return a;
33
+ };
34
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
16
35
  const _hoisted_1 = { class: "d-tabs-nav" };
17
- const _hoisted_2 = {
36
+ const _hoisted_2 = { class: "tab-item-container" };
37
+ const _hoisted_3 = {
18
38
  key: 0,
19
39
  class: "tab-item"
20
40
  };
21
- const _hoisted_3 = { class: "tab-item" };
22
- const _hoisted_4 = {
23
- key: 2,
41
+ const _hoisted_4 = { class: "tab-item" };
42
+ const _hoisted_5 = { style: { "margin-left": "10px" } };
43
+ const _hoisted_6 = {
44
+ key: 0,
24
45
  class: "tab-close"
25
46
  };
26
- const _hoisted_5 = ["onClick"];
47
+ const _hoisted_7 = ["onClick"];
27
48
  var _sfc_main = /* @__PURE__ */ vue.defineComponent({
28
49
  __name: "Tab",
29
50
  setup(__props) {
30
- const { tabsNavStyle, tabHoverBgStyle, closeBtnStyle } = useStyle();
31
- const {
32
- activeKey,
33
- list,
34
- closeBtnStatus,
35
- onChange,
36
- onClose
37
- } = useTab();
38
- const { enableTabContextMenu, onContextMenuClick } = useTabsContextMenu();
39
51
  function useStyle() {
40
52
  const { useToken } = antDesignVue.theme;
41
53
  const { token } = useToken();
42
- const activeTabColor = vue.computed(
43
- () => token.value.colorBgLayout
44
- );
45
- const splitColor = vue.computed(
46
- () => token.value.colorBorderSecondary
47
- );
48
- const tabsNavStyle2 = vue.computed(() => {
49
- return css.css`
50
- --active-tab-color: ${activeTabColor.value};
51
- --splitColor: ${splitColor.value};
54
+ const appStore = store.useAppStore();
55
+ const { tabsTokenStyle } = pinia.storeToRefs(appStore);
56
+ const dynamicVars2 = vue.computed(() => {
57
+ var _a, _b, _c, _d, _e;
58
+ return {
59
+ "--active-tab-color": (_a = tabsTokenStyle == null ? void 0 : tabsTokenStyle.value) == null ? void 0 : _a.colorBgActive,
60
+ "--splitColor": (_b = tabsTokenStyle == null ? void 0 : tabsTokenStyle.value) == null ? void 0 : _b.colorSplit,
61
+ "--active-text-color": (_c = tabsTokenStyle == null ? void 0 : tabsTokenStyle.value) == null ? void 0 : _c.colorTextActive,
62
+ "--active-shadow-color": (_d = tabsTokenStyle == null ? void 0 : tabsTokenStyle.value) == null ? void 0 : _d.colorShadowActive,
63
+ "--tabs-text-color": (_e = tabsTokenStyle == null ? void 0 : tabsTokenStyle.value) == null ? void 0 : _e.colorTabsText
64
+ };
65
+ });
66
+ const tabsNavStyle2 = vue.computed(
67
+ () => css.css`
68
+ --active-tab-color: var(--active-tab-color);
69
+ --splitColor: var(--splitColor);
70
+ --active-text-color: var(--active-text-color);
71
+ --active-shadow-color: var(--active-shadow-color);
72
+ --tabs-text-color: var(--tabs-text-color);
52
73
  padding-top: 10px;
53
74
  display: flex;
54
- `;
55
- });
56
- const tabHoverBgStyle2 = vue.computed(() => {
57
- return css.css`
75
+ `
76
+ );
77
+ const tabHoverBgStyle2 = vue.computed(
78
+ () => css.css`
58
79
  &:before {
59
80
  background: ${token.value.colorPrimaryBgHover};
60
81
  }
61
- `;
62
- });
63
- const closeBtnStyle2 = vue.computed(() => {
64
- return css.css`
82
+ `
83
+ );
84
+ const closeBtnStyle2 = vue.computed(
85
+ () => css.css`
65
86
  &:hover {
66
87
  background: ${token.value.colorPrimaryBorderHover};
67
88
  border-radius: 50%;
68
89
  }
69
- `;
70
- });
90
+ `
91
+ );
71
92
  return {
72
93
  tabsNavStyle: tabsNavStyle2,
73
94
  tabHoverBgStyle: tabHoverBgStyle2,
74
- closeBtnStyle: closeBtnStyle2
95
+ closeBtnStyle: closeBtnStyle2,
96
+ dynamicVars: dynamicVars2
75
97
  };
76
98
  }
77
- function useTab() {
99
+ function useTabAndMenu() {
78
100
  const route = vueRouter.useRoute();
79
101
  const router = vueRouter.useRouter();
80
102
  const store$1 = store.useNavTabStore();
81
- const { list: list2, activeKey: activeKey2 } = pinia.storeToRefs(store$1);
82
- const { save, deleteTabs } = store$1;
103
+ const appContext = vue.inject(
104
+ AppContext.AppContextKey,
105
+ null
106
+ );
107
+ const { list: rawList, activeKey: activeKey2 } = pinia.storeToRefs(store$1);
108
+ const instance = vue.getCurrentInstance();
109
+ const t = (key) => {
110
+ const fallback = {
111
+ reload: "\u5237\u65B0",
112
+ other: "\u5173\u95ED\u5176\u5B83",
113
+ selfClose: "\u5173\u95ED",
114
+ left: "\u5173\u95ED\u5DE6\u4FA7\u6807\u7B7E",
115
+ right: "\u5173\u95ED\u53F3\u4FA7\u6807\u7B7E"
116
+ };
117
+ const globalT = instance == null ? void 0 : instance.appContext.config.globalProperties.$t;
118
+ const i18nKey = `common.tabsContextMenu.${key}`;
119
+ if (typeof globalT === "function") {
120
+ const result = globalT(i18nKey);
121
+ if (result !== i18nKey) return result;
122
+ }
123
+ return fallback[key] || key;
124
+ };
125
+ const computedList = vue.computed(() => {
126
+ const total = rawList.value.length;
127
+ return rawList.value.map((item, index) => {
128
+ var _a, _b;
129
+ const isFirst = index === 0;
130
+ const isLast = index === total - 1;
131
+ const isOnly = total === 1;
132
+ const canCloseSelf = !((_a = item.meta) == null ? void 0 : _a.keepOpen) && !isOnly;
133
+ const hasLeftClosable = rawList.value.slice(0, index).some((i) => {
134
+ var _a2;
135
+ return !((_a2 = i.meta) == null ? void 0 : _a2.keepOpen);
136
+ });
137
+ const hasRightClosable = rawList.value.slice(index + 1).some((i) => {
138
+ var _a2;
139
+ return !((_a2 = i.meta) == null ? void 0 : _a2.keepOpen);
140
+ });
141
+ const hasOtherClosable = rawList.value.some(
142
+ (i) => {
143
+ var _a2;
144
+ return i.fullPath !== item.fullPath && !((_a2 = i.meta) == null ? void 0 : _a2.keepOpen);
145
+ }
146
+ );
147
+ return __spreadProps(__spreadValues({}, item), {
148
+ closeBtnVisible: !((_b = item.meta) == null ? void 0 : _b.keepOpen) && !isOnly,
149
+ menus: [
150
+ {
151
+ key: "reload",
152
+ title: t("reload"),
153
+ icon: iconsVue.ReloadOutlined,
154
+ disabled: false
155
+ },
156
+ {
157
+ key: "selfClose",
158
+ title: t("selfClose"),
159
+ icon: iconsVue.CloseOutlined,
160
+ disabled: !canCloseSelf
161
+ },
162
+ {
163
+ key: "other",
164
+ title: t("other"),
165
+ icon: iconsVue.CloseOutlined,
166
+ disabled: !hasOtherClosable
167
+ },
168
+ {
169
+ key: "left",
170
+ title: t("left"),
171
+ icon: iconsVue.VerticalRightOutlined,
172
+ disabled: isFirst || !hasLeftClosable
173
+ },
174
+ {
175
+ key: "right",
176
+ title: t("right"),
177
+ icon: iconsVue.VerticalLeftOutlined,
178
+ disabled: isLast || !hasRightClosable
179
+ }
180
+ ]
181
+ });
182
+ });
183
+ });
83
184
  vue.watch(
84
185
  () => route.fullPath,
85
186
  (val) => {
86
- save(route);
87
- activeKey2.value = val;
187
+ store$1.save(route);
188
+ vue.nextTick(() => {
189
+ activeKey2.value = val;
190
+ });
88
191
  },
89
- {
90
- immediate: true
91
- }
192
+ { immediate: true }
92
193
  );
93
194
  const onChange2 = (key) => {
94
- if (key !== route.path) {
95
- const rs = list2.value.filter(
96
- (item) => item.fullPath === key
97
- )[0];
98
- router.push(rs);
195
+ const targetKey = String(key);
196
+ if (targetKey !== route.path) {
197
+ const rs = rawList.value.find(
198
+ (item) => item.fullPath === targetKey
199
+ );
200
+ if (rs) router.push(rs);
99
201
  }
100
202
  };
101
203
  const onClose2 = ($event, key) => {
102
204
  if (!key) return;
103
205
  $event.stopPropagation();
104
- deleteTabs(key);
105
- const backRoute = list2.value[list2.value.length - 1];
106
- if (backRoute.fullPath) {
206
+ store$1.deleteTabs(key);
207
+ const backRoute = rawList.value[rawList.value.length - 1];
208
+ if (backRoute == null ? void 0 : backRoute.fullPath)
107
209
  router.push(backRoute.fullPath);
108
- }
109
- };
110
- const closeBtnStatus2 = (item) => {
111
- var _a;
112
- if ((_a = item.meta) == null ? void 0 : _a.keepOpen) {
113
- return false;
114
- } else {
115
- return list2.value.length !== 1;
116
- }
117
210
  };
118
- return {
119
- activeKey: activeKey2,
120
- list: list2,
121
- closeBtnStatus: closeBtnStatus2,
122
- onChange: onChange2,
123
- onClose: onClose2
124
- };
125
- }
126
- function useTabsContextMenu() {
127
- const appContext = vue.inject(
128
- AppContext.AppContextKey,
129
- null
130
- );
131
- const store$1 = store.useNavTabStore();
132
- const router = vueRouter.useRouter();
133
211
  const onContextMenuClick2 = ({ key }, item) => {
134
- var _a, _b, _c, _d;
212
+ var _a;
135
213
  const targetKey = item.fullPath;
214
+ if (!targetKey) return;
136
215
  switch (key) {
137
216
  case "reload":
138
217
  (_a = appContext == null ? void 0 : appContext.onReloadPage) == null ? void 0 : _a.call(appContext, item);
139
218
  break;
219
+ case "selfClose":
220
+ store$1.deleteTabs(targetKey);
221
+ if (activeKey2.value === targetKey) {
222
+ const last = rawList.value[rawList.value.length - 1];
223
+ if (last == null ? void 0 : last.fullPath) router.push(last.fullPath);
224
+ }
225
+ break;
140
226
  case "other":
141
- (_b = store$1.closeOtherTabs) == null ? void 0 : _b.call(store$1, targetKey);
142
- router.push(targetKey);
227
+ store$1.closeOtherTabs(targetKey);
228
+ if (activeKey2.value !== targetKey)
229
+ router.push(targetKey);
143
230
  break;
144
231
  case "left":
145
- (_c = store$1.closeLeftTabs) == null ? void 0 : _c.call(store$1, targetKey);
146
- router.push(targetKey);
232
+ store$1.closeLeftTabs(targetKey);
147
233
  break;
148
234
  case "right":
149
- (_d = store$1.closeRightTabs) == null ? void 0 : _d.call(store$1, targetKey);
150
- router.push(targetKey);
235
+ store$1.closeRightTabs(targetKey);
151
236
  break;
152
237
  }
153
238
  };
154
239
  return {
240
+ activeKey: activeKey2,
241
+ list: computedList,
155
242
  enableTabContextMenu: (appContext == null ? void 0 : appContext.enableTabContextMenu) || false,
243
+ onChange: onChange2,
244
+ onClose: onClose2,
156
245
  onContextMenuClick: onContextMenuClick2
157
246
  };
158
247
  }
248
+ const {
249
+ tabsNavStyle,
250
+ tabHoverBgStyle,
251
+ closeBtnStyle,
252
+ dynamicVars
253
+ } = useStyle();
254
+ const {
255
+ activeKey,
256
+ list,
257
+ enableTabContextMenu,
258
+ onChange,
259
+ onClose,
260
+ onContextMenuClick
261
+ } = useTabAndMenu();
159
262
  return (_ctx, _cache) => {
160
263
  const _component_a_menu_item = vue.resolveComponent("a-menu-item");
161
264
  const _component_a_menu = vue.resolveComponent("a-menu");
@@ -165,17 +268,17 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
165
268
  return vue.openBlock(), vue.createElementBlock(
166
269
  "div",
167
270
  {
168
- class: vue.normalizeClass(["tabs-nav-wrapper", vue.unref(tabsNavStyle)])
271
+ class: vue.normalizeClass(["tabs-nav-wrapper", vue.unref(css.cx)(vue.unref(tabsNavStyle))]),
272
+ style: vue.normalizeStyle(vue.unref(dynamicVars))
169
273
  },
170
274
  [
171
275
  vue.createVNode(vue.unref(Search.default)),
172
276
  vue.createElementVNode("div", _hoisted_1, [
173
277
  vue.createVNode(_component_a_tabs, {
174
278
  size: "small",
175
- activeKey: vue.unref(activeKey),
176
- "onUpdate:activeKey": _cache[0] || (_cache[0] = ($event) => vue.isRef(activeKey) ? activeKey.value = $event : null),
279
+ "active-key": vue.unref(activeKey),
177
280
  type: "card",
178
- "hide-add": "",
281
+ "hide-add": true,
179
282
  onChange: vue.unref(onChange)
180
283
  }, {
181
284
  default: vue.withCtx(() => [
@@ -200,108 +303,89 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
200
303
  2
201
304
  /* CLASS */
202
305
  ),
203
- _cache[5] || (_cache[5] = vue.createElementVNode(
306
+ _cache[0] || (_cache[0] = vue.createElementVNode(
204
307
  "div",
205
308
  { class: "tab-dividers" },
206
309
  null,
207
310
  -1
208
311
  /* CACHED */
209
312
  )),
210
- !vue.unref(enableTabContextMenu) ? (vue.openBlock(), vue.createElementBlock(
211
- "div",
212
- _hoisted_2,
213
- vue.toDisplayString(((_a = item.meta) == null ? void 0 : _a.title) || "\u65E0\u6807\u9898"),
214
- 1
215
- /* TEXT */
216
- )) : vue.createCommentVNode("v-if", true),
217
- vue.unref(enableTabContextMenu) ? (vue.openBlock(), vue.createBlock(
218
- _component_a_dropdown,
219
- {
220
- key: 1,
221
- trigger: ["contextmenu"]
222
- },
223
- {
224
- overlay: vue.withCtx(() => [
225
- vue.createVNode(_component_a_menu, {
226
- onClick: (e) => vue.unref(onContextMenuClick)(e, item)
227
- }, {
228
- default: vue.withCtx(() => [
229
- vue.createVNode(_component_a_menu_item, { key: "reload" }, {
230
- default: vue.withCtx(() => [
231
- vue.createVNode(vue.unref(iconsVue.ReloadOutlined)),
232
- _cache[1] || (_cache[1] = vue.createTextVNode(
233
- " \u91CD\u65B0\u52A0\u8F7D ",
234
- -1
235
- /* CACHED */
236
- ))
237
- ]),
238
- _: 1
239
- /* STABLE */
240
- }),
241
- vue.createVNode(_component_a_menu_item, { key: "other" }, {
242
- default: vue.withCtx(() => [
243
- vue.createVNode(vue.unref(iconsVue.CloseOutlined)),
244
- _cache[2] || (_cache[2] = vue.createTextVNode(
245
- " \u5173\u95ED\u5176\u4ED6 ",
246
- -1
247
- /* CACHED */
248
- ))
249
- ]),
250
- _: 1
251
- /* STABLE */
252
- }),
253
- vue.createVNode(_component_a_menu_item, { key: "right" }, {
254
- default: vue.withCtx(() => [..._cache[3] || (_cache[3] = [
255
- vue.createTextVNode(
256
- "\u5173\u95ED\u53F3\u4FA7\u6807\u7B7E ",
257
- -1
258
- /* CACHED */
259
- )
260
- ])]),
261
- _: 1
262
- /* STABLE */
263
- }),
264
- vue.createVNode(_component_a_menu_item, { key: "left" }, {
265
- default: vue.withCtx(() => [..._cache[4] || (_cache[4] = [
266
- vue.createTextVNode(
267
- "\u5173\u95ED\u5DE6\u4FA7\u6807\u7B7E ",
268
- -1
269
- /* CACHED */
270
- )
271
- ])]),
272
- _: 1
273
- /* STABLE */
274
- })
275
- ]),
276
- _: 1
277
- /* STABLE */
278
- }, 8, ["onClick"])
279
- ]),
280
- default: vue.withCtx(() => {
281
- var _a2;
282
- return [
283
- vue.createElementVNode(
284
- "div",
285
- _hoisted_3,
286
- vue.toDisplayString(((_a2 = item.meta) == null ? void 0 : _a2.title) || "\u65E0\u6807\u9898"),
287
- 1
288
- /* TEXT */
289
- )
290
- ];
291
- }),
292
- _: 2
293
- /* DYNAMIC */
294
- },
295
- 1024
296
- /* DYNAMIC_SLOTS */
297
- )) : vue.createCommentVNode("v-if", true),
298
- vue.unref(closeBtnStatus)(item) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4, [
313
+ vue.createElementVNode("div", _hoisted_2, [
314
+ !vue.unref(enableTabContextMenu) ? (vue.openBlock(), vue.createElementBlock(
315
+ "div",
316
+ _hoisted_3,
317
+ vue.toDisplayString(((_a = item.meta) == null ? void 0 : _a.title) || "\u65E0\u6807\u9898"),
318
+ 1
319
+ /* TEXT */
320
+ )) : (vue.openBlock(), vue.createBlock(
321
+ _component_a_dropdown,
322
+ {
323
+ key: 1,
324
+ trigger: ["contextmenu"],
325
+ "destroy-popup-on-hide": true
326
+ },
327
+ {
328
+ overlay: vue.withCtx(() => [
329
+ vue.createVNode(_component_a_menu, {
330
+ onClick: (e) => vue.unref(onContextMenuClick)(e, item)
331
+ }, {
332
+ default: vue.withCtx(() => [
333
+ (vue.openBlock(true), vue.createElementBlock(
334
+ vue.Fragment,
335
+ null,
336
+ vue.renderList(item.menus, (menu) => {
337
+ return vue.openBlock(), vue.createBlock(_component_a_menu_item, {
338
+ key: menu.key,
339
+ disabled: menu.disabled
340
+ }, {
341
+ default: vue.withCtx(() => [
342
+ menu.icon ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(menu.icon), { key: 0 })) : vue.createCommentVNode("v-if", true),
343
+ vue.createElementVNode(
344
+ "span",
345
+ _hoisted_5,
346
+ vue.toDisplayString(menu.title),
347
+ 1
348
+ /* TEXT */
349
+ )
350
+ ]),
351
+ _: 2
352
+ /* DYNAMIC */
353
+ }, 1032, ["disabled"]);
354
+ }),
355
+ 128
356
+ /* KEYED_FRAGMENT */
357
+ ))
358
+ ]),
359
+ _: 2
360
+ /* DYNAMIC */
361
+ }, 1032, ["onClick"])
362
+ ]),
363
+ default: vue.withCtx(() => {
364
+ var _a2;
365
+ return [
366
+ vue.createElementVNode(
367
+ "div",
368
+ _hoisted_4,
369
+ vue.toDisplayString(((_a2 = item.meta) == null ? void 0 : _a2.title) || "\u65E0\u6807\u9898"),
370
+ 1
371
+ /* TEXT */
372
+ )
373
+ ];
374
+ }),
375
+ _: 2
376
+ /* DYNAMIC */
377
+ },
378
+ 1024
379
+ /* DYNAMIC_SLOTS */
380
+ ))
381
+ ]),
382
+ item.closeBtnVisible ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6, [
299
383
  vue.createElementVNode("div", {
300
384
  class: vue.normalizeClass(["close-btn", vue.unref(closeBtnStyle)]),
301
385
  onClick: ($event) => vue.unref(onClose)($event, item.fullPath)
302
386
  }, [
303
387
  vue.createVNode(vue.unref(iconsVue.CloseOutlined))
304
- ], 10, _hoisted_5)
388
+ ], 10, _hoisted_7)
305
389
  ])) : vue.createCommentVNode("v-if", true)
306
390
  ];
307
391
  }),
@@ -315,11 +399,11 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
315
399
  ]),
316
400
  _: 1
317
401
  /* STABLE */
318
- }, 8, ["activeKey", "onChange"])
402
+ }, 8, ["active-key", "onChange"])
319
403
  ])
320
404
  ],
321
- 2
322
- /* CLASS */
405
+ 6
406
+ /* CLASS, STYLE */
323
407
  );
324
408
  };
325
409
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Tab.vue2.cjs","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":["theme","computed","tabsNavStyle","css","tabHoverBgStyle","closeBtnStyle","useRoute","useRouter","store","useNavTabStore","list","activeKey","storeToRefs","watch","onChange","onClose","closeBtnStatus","inject","AppContextKey","onContextMenuClick","_createElementBlock","_normalizeClass","_unref","_createVNode","Search","_createElementVNode","_Fragment","_renderList","_createBlock","_openBlock","_toDisplayString","ReloadOutlined","CloseOutlined","_a"],"mappings":"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"}
1
+ {"version":3,"file":"Tab.vue2.cjs","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":["theme","useAppStore","storeToRefs","dynamicVars","computed","tabsNavStyle","css","tabHoverBgStyle","closeBtnStyle","useRoute","useRouter","store","useNavTabStore","inject","AppContextKey","activeKey","getCurrentInstance","_a","ReloadOutlined","CloseOutlined","VerticalRightOutlined","VerticalLeftOutlined","watch","nextTick","onChange","onClose","onContextMenuClick","_createElementBlock","_normalizeClass","_unref","cx","_createVNode","Search","_createElementVNode","_Fragment","_renderList","_createBlock","_openBlock","_toDisplayString","_resolveDynamicComponent"],"mappings":"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"}