@@ -87,14 +87,6 @@ export default san.defineComponent({
8787 // resize事件的触发频率较高,因此延迟66ms(意味着updateFoldedItems函数的执行频率变为15fps)
8888 this . updateFoldedItemsBind = throttle ( this . updateFoldedItems , 66 ) . bind ( this ) ;
8989 on ( window , 'resize' , this . updateFoldedItemsBind ) ;
90- this . nextTick ( ( ) => {
91- const foldedItemWidth = getOffset ( this . ref ( `${ prefixCls } -fold-item` ) ) . width ;
92- // 用户是否传入了和默认折叠图标的宽度不一样的折叠图标
93- if ( foldedItemWidth !== DEFAULT_FOLDED_ITEM_WIDTH ) {
94- this . foldedItemWidth = foldedItemWidth ;
95- this . updateFoldedItems ( ) ;
96- }
97- } ) ;
9890 } ,
9991 updated ( ) {
10092 this . updateItems ( ) ;
@@ -116,7 +108,16 @@ export default san.defineComponent({
116108 this . foldedItemWidth = DEFAULT_FOLDED_ITEM_WIDTH ;
117109 } ,
118110 updateFoldedItems ( ) {
119- let availableMenuWidth = getOffset ( this . el ) . width - ( this . foldedItemWidth + FOLDED_ITEM_PADDING ) ;
111+ let availableMenuWidth = getOffset ( this . el ) . width ;
112+ const itemFoldedFlags = this . data . get ( 'itemFoldedFlags' ) ;
113+ // 是否是可用空间正在变大且目前只有一项折叠项
114+ const isSpecialCase = this . lastAvailableMenuWidth
115+ && ( availableMenuWidth - this . lastAvailableMenuWidth ) > 0
116+ && itemFoldedFlags [ itemFoldedFlags . length - 1 ] && ! itemFoldedFlags [ itemFoldedFlags . length - 2 ] ;
117+ if ( this . data . get ( 'hasFoldedItem' ) && ! isSpecialCase ) {
118+ availableMenuWidth -= this . foldedItemWidth + FOLDED_ITEM_PADDING ;
119+ }
120+ this . lastAvailableMenuWidth = availableMenuWidth ;
120121 this . items . forEach ( ( item , index , items ) => {
121122 // 折叠项(最后一项)不参与菜单项是否需要被折叠的计算
122123 if ( index === items . length - 1 ) {
@@ -128,7 +129,20 @@ export default san.defineComponent({
128129 item . data . set ( 'isFolded' , isFolded ) ;
129130 this . data . set ( `itemFoldedFlags[${ index } ]` , isFolded ) ;
130131 } ) ;
131- this . data . set ( 'hasFoldedItem' , availableMenuWidth < 0 ) ;
132+ const hasFoldedItem = availableMenuWidth < 0 ;
133+ this . data . set ( 'hasFoldedItem' , hasFoldedItem ) ;
134+ // 用户是否自定义了折叠图标
135+ if ( this . sourceSlots . named . overflowedIndicator
136+ && this . foldedItemWidth === DEFAULT_FOLDED_ITEM_WIDTH
137+ && hasFoldedItem ) {
138+ this . nextTick ( ( ) => {
139+ const foldedItemWidth = getOffset ( this . ref ( `${ prefixCls } -fold-item` ) ) . width ;
140+ if ( foldedItemWidth !== DEFAULT_FOLDED_ITEM_WIDTH ) {
141+ this . foldedItemWidth = foldedItemWidth ;
142+ this . updateFoldedItems ( ) ;
143+ }
144+ } ) ;
145+ }
132146 } ,
133147 getSelectedKeys ( defaultSelectedKeys ) {
134148 let selectedKeys = this . data . get ( 'selectedKeys' ) || defaultSelectedKeys || [ ] ;
0 commit comments