@zat-design/sisyphus-react 4.0.13 → 4.0.15

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 (41) hide show
  1. package/dist/index.esm.css +1 -1
  2. package/dist/less.esm.css +1 -1
  3. package/es/ProEditLabel/index.js +81 -31
  4. package/es/ProEditLabel/propsType.d.ts +4 -4
  5. package/es/ProForm/components/combination/Group/utils/index.d.ts +17 -17
  6. package/es/ProLayout/components/Layout/Menu/FoldMenu/index.js +42 -9
  7. package/es/ProLayout/components/Layout/Menu/OpenMenu/index.js +9 -8
  8. package/es/ProLayout/components/TabsManager/components/TabItem.js +9 -1
  9. package/es/ProLayout/components/TabsManager/hooks/useTabsState.js +52 -7
  10. package/es/ProLayout/components/TabsManager/index.js +52 -16
  11. package/es/ProLayout/components/TabsManager/propTypes.d.ts +2 -0
  12. package/es/ProLayout/components/TabsManager/style/index.less +115 -3
  13. package/es/ProLayout/index.js +30 -16
  14. package/es/ProLayout/propTypes.d.ts +3 -3
  15. package/es/ProLayout/utils/index.js +85 -21
  16. package/es/ProTable/style/index.less +19 -3
  17. package/es/ProWaterMark/propsType.d.ts +3 -61
  18. package/es/locale/en_US.d.ts +1 -0
  19. package/es/locale/en_US.js +2 -1
  20. package/es/locale/zh_CN.d.ts +1 -0
  21. package/es/locale/zh_CN.js +2 -1
  22. package/lib/ProEditLabel/index.js +81 -31
  23. package/lib/ProEditLabel/propsType.d.ts +4 -4
  24. package/lib/ProForm/components/combination/Group/utils/index.d.ts +17 -17
  25. package/lib/ProLayout/components/Layout/Menu/FoldMenu/index.js +42 -9
  26. package/lib/ProLayout/components/Layout/Menu/OpenMenu/index.js +9 -8
  27. package/lib/ProLayout/components/TabsManager/components/TabItem.js +9 -1
  28. package/lib/ProLayout/components/TabsManager/hooks/useTabsState.js +54 -7
  29. package/lib/ProLayout/components/TabsManager/index.js +52 -16
  30. package/lib/ProLayout/components/TabsManager/propTypes.d.ts +2 -0
  31. package/lib/ProLayout/components/TabsManager/style/index.less +115 -3
  32. package/lib/ProLayout/index.js +30 -16
  33. package/lib/ProLayout/propTypes.d.ts +3 -3
  34. package/lib/ProLayout/utils/index.js +85 -21
  35. package/lib/ProTable/style/index.less +19 -3
  36. package/lib/ProWaterMark/propsType.d.ts +3 -61
  37. package/lib/locale/en_US.d.ts +1 -0
  38. package/lib/locale/en_US.js +2 -1
  39. package/lib/locale/zh_CN.d.ts +1 -0
  40. package/lib/locale/zh_CN.js +2 -1
  41. package/package.json +1 -1
@@ -1,3 +1,5 @@
1
+ @import '../../../../style/variables.less'; // 引入变量
2
+
1
3
  .pro-layout-tabs {
2
4
  --pro-layout-tabs-primary: var(--ant-primary-color, #1677ff);
3
5
  --pro-layout-tabs-active-bg: var(--ant-color-success, #00b578);
@@ -8,18 +10,22 @@
8
10
  height: 100%;
9
11
 
10
12
  &-header {
11
- display: flex;
12
13
  align-items: center;
13
14
  min-height: 48px;
14
15
  padding: 12px 0;
15
16
  border-bottom: none;
17
+ position: sticky;
18
+ top: 48px;
19
+ z-index: 1;
20
+ background: #f3f5f8;
21
+ .@{ant-prefix}-tabs-nav-list{
22
+ overflow: initial;
23
+ }
16
24
 
17
25
  .pro-layout-tab-list {
18
26
  display: flex;
19
27
  flex: 1;
20
28
  gap: 12px;
21
- overflow-x: auto;
22
- overflow-y: hidden;
23
29
 
24
30
  &::-webkit-scrollbar {
25
31
  height: 3px;
@@ -46,12 +52,109 @@
46
52
  }
47
53
 
48
54
  &-content {
55
+ flex: 1;
56
+ overflow-y: auto;
57
+ min-height: 0; // 重要:允许 flex 子元素缩小到内容以下
58
+
49
59
  .tab-pane {
50
60
  &.hidden {
51
61
  display: none;
52
62
  }
53
63
  }
54
64
  }
65
+
66
+ // antd Tabs 样式覆盖
67
+ .pro-layout-tabs-antd {
68
+ width: 100%;
69
+ height: 100%;
70
+
71
+ // 隐藏 Tabs 的内容区域,因为我们使用 renderContent() 渲染
72
+ .@{ant-prefix}-tabs-content-holder {
73
+ display: none !important;
74
+ }
75
+
76
+ // 覆盖 nav 样式,使其匹配 pro-layout-tabs-header
77
+ .@{ant-prefix}-tabs-nav {
78
+ margin: 0;
79
+ padding: 0;
80
+ border-bottom: none;
81
+
82
+ &::before {
83
+ display: none; // 隐藏底部边框
84
+ }
85
+ }
86
+
87
+ // 覆盖 nav-list 样式,使其匹配 pro-layout-tab-list
88
+ .@{ant-prefix}-tabs-nav-list {
89
+ display: flex;
90
+ flex: 1;
91
+ gap: 12px;
92
+
93
+ &::-webkit-scrollbar {
94
+ height: 3px;
95
+ }
96
+
97
+ &::-webkit-scrollbar-track {
98
+ background: transparent;
99
+ }
100
+
101
+ &::-webkit-scrollbar-thumb {
102
+ background: #d9d9d9;
103
+ border-radius: 3px;
104
+
105
+ &:hover {
106
+ background: #bfbfbf;
107
+ }
108
+ }
109
+ }
110
+
111
+ // 覆盖 tab 样式,使其匹配 pro-layout-tab-item
112
+ .@{ant-prefix}-tabs-tab {
113
+ position: relative;
114
+ display: flex;
115
+ flex-shrink: 0;
116
+ align-items: center;
117
+ min-height: 36px;
118
+ padding: 0 !important;
119
+ margin: 0 !important;
120
+ background: transparent !important;
121
+ border: none !important;
122
+ border-radius: 0 !important;
123
+ cursor: pointer;
124
+ transition: none; // 由内部 TabItemComponent 处理过渡
125
+
126
+ &:hover {
127
+ background: transparent !important;
128
+ }
129
+
130
+ // 隐藏 antd 默认的关闭按钮(我们使用自定义的)
131
+ .@{ant-prefix}-tabs-tab-remove {
132
+ display: none !important;
133
+ }
134
+
135
+ // TabItemComponent 的样式应该在这里应用
136
+ .pro-layout-tab-item {
137
+ width: 100%;
138
+ height: 100%;
139
+ }
140
+ }
141
+
142
+ // 激活状态样式(由 TabItemComponent 内部处理)
143
+ .@{ant-prefix}-tabs-tab-active {
144
+ background: transparent !important;
145
+ border: none !important;
146
+
147
+ &::before {
148
+ display: none;
149
+ }
150
+ }
151
+
152
+ // 隐藏 ink-bar(下划线)
153
+ .@{ant-prefix}-tabs-ink-bar {
154
+ display: none !important;
155
+ }
156
+
157
+ }
55
158
  }
56
159
 
57
160
  .pro-layout-tab-item {
@@ -165,6 +268,15 @@
165
268
  --pro-layout-tabs-text-color: rgba(255, 255, 255, 0.85);
166
269
  }
167
270
 
271
+ .pro-layout-tabs-dropdown-menu{
272
+ .@{ant-prefix}-tabs-dropdown-menu-item-remove{
273
+ display: none !important;
274
+ }
275
+ .pro-layout-tab-content{
276
+ width: 100%;
277
+ }
278
+ }
279
+
168
280
  // 响应式适配
169
281
  @media (max-width: 768px) {
170
282
  .pro-layout-tab-item {
@@ -142,23 +142,37 @@ var ProLayout = props => {
142
142
  });
143
143
  };
144
144
  var handleMenuClick = useCallback(params => {
145
- if (isTabsLayout) {
146
- var _tabsManagerRef$curre, _tabsManagerRef$curre2;
147
- // 只有最后一级菜单(叶子节点)才设置选中路径
148
- if (params.item && isLeafMenuItem(params.item)) {
149
- var _params$item, _params$item2, _params$item3;
150
- var targetPath = ((_params$item = params.item) === null || _params$item === void 0 ? void 0 : _params$item.url) || ((_params$item2 = params.item) === null || _params$item2 === void 0 ? void 0 : _params$item2.redirectUrl) || ((_params$item3 = params.item) === null || _params$item3 === void 0 ? void 0 : _params$item3.router);
151
- if (targetPath && targetPath !== selectedPath) {
152
- setState({
153
- selectedPath: targetPath
154
- });
155
- }
156
- }
157
- (_tabsManagerRef$curre = tabsManagerRef.current) === null || _tabsManagerRef$curre === void 0 || (_tabsManagerRef$curre2 = _tabsManagerRef$curre.handleMenuClick) === null || _tabsManagerRef$curre2 === void 0 || _tabsManagerRef$curre2.call(_tabsManagerRef$curre, params);
158
- return;
145
+ var _tabsManagerRef$curre, _tabsManagerRef$curre2, _tabsManagerRef$curre3, _tabsManagerRef$curre4, _params$item, _params$item2, _params$item3;
146
+ // tabs 模式,直接调用原始回调并允许激活
147
+ if (!isTabsLayout) {
148
+ onMenuClick === null || onMenuClick === void 0 || onMenuClick(params);
149
+ return true;
150
+ }
151
+
152
+ // tabs 模式:调用 TabsManager 的 handleMenuClick 来添加标签页
153
+ (_tabsManagerRef$curre = tabsManagerRef.current) === null || _tabsManagerRef$curre === void 0 || (_tabsManagerRef$curre2 = _tabsManagerRef$curre.handleMenuClick) === null || _tabsManagerRef$curre2 === void 0 || _tabsManagerRef$curre2.call(_tabsManagerRef$curre, params);
154
+
155
+ // 非叶子节点,直接允许激活
156
+ if (!params.item || !isLeafMenuItem(params.item)) {
157
+ return true;
158
+ }
159
+
160
+ // 叶子节点:检查是否可以添加标签页(检查 max 限制)
161
+ var canAdd = (_tabsManagerRef$curre3 = tabsManagerRef.current) === null || _tabsManagerRef$curre3 === void 0 || (_tabsManagerRef$curre4 = _tabsManagerRef$curre3.canAddTab) === null || _tabsManagerRef$curre4 === void 0 ? void 0 : _tabsManagerRef$curre4.call(_tabsManagerRef$curre3, params.item);
162
+ if (!canAdd) {
163
+ // 超过限制,返回 false 阻止菜单激活
164
+ return false;
165
+ }
166
+
167
+ // 可以添加标签页,设置选中路径(激活菜单)
168
+ var targetPath = ((_params$item = params.item) === null || _params$item === void 0 ? void 0 : _params$item.url) || ((_params$item2 = params.item) === null || _params$item2 === void 0 ? void 0 : _params$item2.redirectUrl) || ((_params$item3 = params.item) === null || _params$item3 === void 0 ? void 0 : _params$item3.router);
169
+ if (targetPath && targetPath !== selectedPath) {
170
+ setState({
171
+ selectedPath: targetPath
172
+ });
159
173
  }
160
- onMenuClick === null || onMenuClick === void 0 || onMenuClick(params);
161
- }, [isTabsLayout, onMenuClick, selectedPath, setState]);
174
+ return true;
175
+ }, [isTabsLayout, onMenuClick, selectedPath]);
162
176
 
163
177
  /**
164
178
  * 关闭提示框
@@ -1,5 +1,5 @@
1
1
  import { CSSProperties, ReactNode } from 'react';
2
- import { ProWaterMarkProps } from '../ProWaterMark/propsType';
2
+ import { ProWaterMarkType } from '../ProWaterMark/propsType';
3
3
  export interface MenusType {
4
4
  /**
5
5
  * @description 菜单ID
@@ -174,7 +174,7 @@ interface ProLayoutBaseProps {
174
174
  * @description 水印配置
175
175
  * @default {}
176
176
  */
177
- waterMarkProps?: ProWaterMarkProps;
177
+ waterMarkProps?: ProWaterMarkType;
178
178
  /**
179
179
  * @description 折叠回调事件
180
180
  * @default -
@@ -188,7 +188,7 @@ interface ProLayoutBaseProps {
188
188
  item: MenusType | null;
189
189
  key: string;
190
190
  keyPath: string[];
191
- }) => void;
191
+ }) => void | boolean;
192
192
  /**
193
193
  * @description 规定在何处打开被链接文档
194
194
  * @default "_self"
@@ -9,6 +9,40 @@ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e =
9
9
  /* eslint-disable prefer-destructuring */
10
10
  /* eslint-disable no-mixed-operators */
11
11
  import { isPlainObject } from 'lodash';
12
+ /**
13
+ * 检查并更新最佳模糊匹配
14
+ * @param pathName 目标路径
15
+ * @param itemUrl 菜单项URL
16
+ * @param itemRedirectUrl 菜单项重定向URL
17
+ * @param keyIdPath 菜单项ID路径
18
+ * @param bestMatch 当前最佳匹配
19
+ * @returns 更新后的最佳匹配
20
+ */
21
+ var updateBestMatch = (pathName, itemUrl, itemRedirectUrl, keyIdPath, bestMatch) => {
22
+ // 检查 itemUrl 是否匹配
23
+ if (itemUrl && pathName.includes(itemUrl)) {
24
+ var urlLength = itemUrl.length;
25
+ if (!bestMatch || urlLength > bestMatch.urlLength) {
26
+ return {
27
+ keyIdPath,
28
+ urlLength
29
+ };
30
+ }
31
+ }
32
+
33
+ // 检查 itemRedirectUrl 是否匹配
34
+ if (itemRedirectUrl && pathName.includes(itemRedirectUrl)) {
35
+ var _urlLength = itemRedirectUrl.length;
36
+ if (!bestMatch || _urlLength > bestMatch.urlLength) {
37
+ return {
38
+ keyIdPath,
39
+ urlLength: _urlLength
40
+ };
41
+ }
42
+ }
43
+ return bestMatch;
44
+ };
45
+
12
46
  /**
13
47
  * 通过URL获取对应keyIdPath
14
48
  * @param menus 菜单数据
@@ -16,30 +50,42 @@ import { isPlainObject } from 'lodash';
16
50
  * @return result
17
51
  */
18
52
  export var getIdsByPathName = (menus, activeMenu) => {
19
- var _pathName = window.location.pathname;
20
- if (activeMenu) {
21
- _pathName = activeMenu;
22
- }
53
+ var _bestMatch;
54
+ var _pathName = activeMenu || window.location.pathname;
23
55
  var result;
56
+ var bestMatch = null;
24
57
  var menuDeep = menuDeepItem => {
25
58
  for (var i = 0; i <= menuDeepItem.length - 1; i++) {
59
+ var _item$url, _item$redirectUrl;
26
60
  var item = menuDeepItem[i];
27
- // 只包含一级菜单时,解决URL:/endorsement/demo/123无法选中问题
61
+ var itemUrl = (item === null || item === void 0 || (_item$url = item.url) === null || _item$url === void 0 ? void 0 : _item$url.split('?')[0]) || '';
62
+ var itemRedirectUrl = (item === null || item === void 0 || (_item$redirectUrl = item.redirectUrl) === null || _item$redirectUrl === void 0 ? void 0 : _item$redirectUrl.split('?')[0]) || '';
63
+
64
+ // 精确匹配:完全相等时直接返回
28
65
  if ((item === null || item === void 0 ? void 0 : item.url) === _pathName || item.redirectUrl === _pathName) {
29
66
  result = item.keyIdPath;
30
- break;
67
+ return;
31
68
  }
32
- if (Array.isArray(item.children) && item.children.length) {
69
+
70
+ // 如果有子菜单,递归查找
71
+ var hasChildren = Array.isArray(item.children) && item.children.length;
72
+ if (hasChildren) {
33
73
  menuDeep(item.children);
34
- } else if ((item !== null && item !== void 0 && item.url && _pathName.includes(item.url.split('?')[0]) || item !== null && item !== void 0 && item.redirectUrl && _pathName.includes(item.redirectUrl.split('?')[0])) && !result) {
35
- // 当循环到最后一层时判断URL是否包含最后一层的URL,解决URL在URL中不存在的场景
36
- result = item.keyIdPath;
37
- break;
74
+ // 如果递归后找到了精确匹配,直接返回
75
+ if (result) {
76
+ return;
77
+ }
78
+ continue;
38
79
  }
80
+
81
+ // 叶子节点:使用最长匹配策略选择最精确的匹配
82
+ bestMatch = updateBestMatch(_pathName, itemUrl, itemRedirectUrl, item.keyIdPath, bestMatch);
39
83
  }
40
84
  };
41
85
  menuDeep(menus);
42
- return result || [];
86
+
87
+ // 如果没有精确匹配,使用最佳模糊匹配
88
+ return result || ((_bestMatch = bestMatch) === null || _bestMatch === void 0 ? void 0 : _bestMatch.keyIdPath) || [];
43
89
  };
44
90
 
45
91
  /**
@@ -144,33 +190,51 @@ export function getUrlParams(name) {
144
190
  * @param routerMatch 匹配模式id & url
145
191
  */
146
192
  export var getPathNameKey = _ref => {
193
+ var _bestMatch2;
147
194
  var menus = _ref.menus,
148
195
  pathName = _ref.pathName;
149
196
  var result;
197
+ var bestMatch = null;
150
198
  var menuDeep = menuDeepItem => {
151
199
  if (!Array.isArray(menuDeepItem) || !menuDeepItem.length) {
152
- return [];
200
+ return;
153
201
  }
154
202
  for (var i = 0; i <= menuDeepItem.length - 1; i++) {
203
+ var _item$url2, _item$redirectUrl2;
155
204
  var item = menuDeepItem[i];
205
+
206
+ // 跳过无效的菜单项
156
207
  if (!Array.isArray(item.keyUrlPath) || !item.keyUrlPath.length) {
157
- break;
208
+ continue;
158
209
  }
210
+ var itemUrl = (item === null || item === void 0 || (_item$url2 = item.url) === null || _item$url2 === void 0 ? void 0 : _item$url2.split('?')[0]) || '';
211
+ var itemRedirectUrl = (item === null || item === void 0 || (_item$redirectUrl2 = item.redirectUrl) === null || _item$redirectUrl2 === void 0 ? void 0 : _item$redirectUrl2.split('?')[0]) || '';
212
+
213
+ // 精确匹配:完全相等时直接返回
159
214
  if ((item === null || item === void 0 ? void 0 : item.url) === pathName || (item === null || item === void 0 ? void 0 : item.redirectUrl) === pathName) {
160
215
  result = item.keyIdPath;
161
- break;
216
+ return;
162
217
  }
163
- if (Array.isArray(item.children) && item.children.length) {
218
+
219
+ // 如果有子菜单,递归查找
220
+ var hasChildren = Array.isArray(item.children) && item.children.length;
221
+ if (hasChildren) {
164
222
  menuDeep(item.children);
165
- } else if ((item !== null && item !== void 0 && item.url && pathName.includes(item.url.split('?')[0]) || item !== null && item !== void 0 && item.redirectUrl && pathName.includes(item.redirectUrl.split('?')[0])) && !result) {
166
- // URL未匹配时,循环到最后一层时判断URL是否包含最后一层的URL,解决URL在URL中不存在的场景
167
- result = item.keyIdPath;
168
- break;
223
+ // 如果递归后找到了精确匹配,直接返回
224
+ if (result) {
225
+ return;
226
+ }
227
+ continue;
169
228
  }
229
+
230
+ // 叶子节点:使用最长匹配策略选择最精确的匹配
231
+ bestMatch = updateBestMatch(pathName, itemUrl, itemRedirectUrl, item.keyIdPath, bestMatch);
170
232
  }
171
233
  };
172
234
  menuDeep(menus);
173
- return result;
235
+
236
+ // 如果没有精确匹配,使用最佳模糊匹配
237
+ return result || ((_bestMatch2 = bestMatch) === null || _bestMatch2 === void 0 ? void 0 : _bestMatch2.keyIdPath);
174
238
  };
175
239
 
176
240
  /**
@@ -50,10 +50,14 @@
50
50
  white-space: normal;
51
51
  }
52
52
  &.@{ant-prefix}-table-row-expand-icon-cell {
53
+ display: flex;
54
+ justify-content: center;
55
+ align-items: center;
53
56
  >button.@{ant-prefix}-table-row-expand-icon{
54
- left: 50%;
55
- top: 50%;
56
- transform: translate(-50%, -50%);
57
+ position: relative;
58
+ left: auto;
59
+ top: auto;
60
+ transform: none;
57
61
  }
58
62
  }
59
63
  }
@@ -488,6 +492,7 @@
488
492
  align-items: center;
489
493
 
490
494
  .icon-tip {
495
+ margin-left: 8px;
491
496
  div {
492
497
  width: 14px;
493
498
  height: 14px;
@@ -609,6 +614,17 @@
609
614
  border: none;
610
615
  }
611
616
  }
617
+
618
+ // 嵌套子表格缩进样式(针对展开行中的 ProTable)
619
+ .@{ant-prefix}-table-tbody {
620
+ > tr.@{ant-prefix}-table-expanded-row {
621
+ > td {
622
+ > .pro-table {
623
+ margin-inline: calc(var(--ant-control-interactive-size) + 2 * var(--ant-padding) - var(--ant-table-cell-padding-inline)) calc(-1 * var(--ant-table-cell-padding-inline));
624
+ }
625
+ }
626
+ }
627
+ }
612
628
  }
613
629
 
614
630
  .@{ant-prefix}-dropdown-placement-bottomLeft {
@@ -1,64 +1,6 @@
1
1
  import type { ReactNode } from 'react';
2
- export interface ProWaterMarkType {
3
- /**
4
- * @description 水印内容
5
- * @default -
6
- */
2
+ import type { WatermarkProps } from 'antd';
3
+ export interface ProWaterMarkType extends WatermarkProps {
7
4
  children?: ReactNode;
8
- /**
9
- * @description 水印文本, 为数组时表示多行水印
10
- * @default -
11
- */
12
- content: string | string[];
13
- /**
14
- * @description 水印层级
15
- * @default 9999
16
- */
17
- zIndex?: number;
18
- /**
19
- * @description 图片源,建议导出 2 倍或 3 倍图,优先使用图片渲染水印
20
- * @default -
21
- */
22
- image?: string;
23
- /**
24
- * @description 单个水印宽度
25
- * @default 120
26
- */
27
- width?: number;
28
- /**
29
- * @description 单个水印高度
30
- * @default 64
31
- */
32
- height?: number;
33
- /**
34
- * @description 旋转的角度
35
- * @default -22
36
- */
37
- rotate?: number;
38
- /**
39
- * @description 设置字体大小
40
- * @default 16
41
- */
42
- fontSize?: number;
43
- /**
44
- * @description 设置字体粗细
45
- * @default normal
46
- */
47
- fontWeight?: number | string;
48
- /**
49
- * @description 规定字体样式
50
- * @default 'normal'
51
- */
52
- fontStyle?: 'normal' | 'italic';
53
- /**
54
- * @description 设置字体颜色
55
- * @default #000
56
- */
57
- fontColor?: string;
58
- /**
59
- * @description 设置水印文字的字体
60
- * @default sans-serif
61
- */
62
- fontFamily?: string;
5
+ [key: string]: any;
63
6
  }
64
- export type ProWaterMarkProps = ProWaterMarkType;
@@ -9,6 +9,7 @@ declare const _default: {
9
9
  ProLayout: {
10
10
  tipAlt: string;
11
11
  closeAlt: string;
12
+ tabMaxLimitMessage: string;
12
13
  };
13
14
  ProHeader: {
14
15
  versionTitle: string;
@@ -8,7 +8,8 @@ export default {
8
8
  },
9
9
  ProLayout: {
10
10
  tipAlt: 'Tips',
11
- closeAlt: 'Close'
11
+ closeAlt: 'Close',
12
+ tabMaxLimitMessage: 'Menu tabs cannot exceed the maximum limit of {max}'
12
13
  },
13
14
  ProHeader: {
14
15
  versionTitle: 'Version number',
@@ -9,6 +9,7 @@ declare const _default: {
9
9
  ProLayout: {
10
10
  tipAlt: string;
11
11
  closeAlt: string;
12
+ tabMaxLimitMessage: string;
12
13
  };
13
14
  ProHeader: {
14
15
  versionTitle: string;
@@ -8,7 +8,8 @@ export default {
8
8
  },
9
9
  ProLayout: {
10
10
  tipAlt: '提示',
11
- closeAlt: '关闭'
11
+ closeAlt: '关闭',
12
+ tabMaxLimitMessage: '菜单tab不能超过上限{max}'
12
13
  },
13
14
  ProHeader: {
14
15
  versionTitle: '版本号',