73 lines
1.9 KiB
JavaScript
73 lines
1.9 KiB
JavaScript
export default {
|
|
methods: {
|
|
getTabs () {
|
|
const { panels: children, activeKey, prefixCls } = this
|
|
const rst = []
|
|
children.forEach((child) => {
|
|
if (!child) {
|
|
return
|
|
}
|
|
const key = child.pKey
|
|
let cls = activeKey === key ? `${prefixCls}-tab-active` : ''
|
|
cls += ` ${prefixCls}-tab`
|
|
if (child.disabled) {
|
|
cls += ` ${prefixCls}-tab-disabled`
|
|
} else {
|
|
}
|
|
const onClick = () => {
|
|
!child.disabled && this.onTabClick(key)
|
|
}
|
|
const ref = {}
|
|
if (activeKey === key) {
|
|
ref.ref = this.saveRef('activeTab')
|
|
}
|
|
rst.push(
|
|
<div
|
|
role='tab'
|
|
aria-disabled={child.disabled ? 'true' : 'false'}
|
|
aria-selected={activeKey === key ? 'true' : 'false'}
|
|
class={cls}
|
|
key={key}
|
|
onClick={onClick}
|
|
>
|
|
{child.tab}
|
|
</div>
|
|
)
|
|
})
|
|
|
|
return rst
|
|
},
|
|
getRootNode (contents, createElement) {
|
|
const {
|
|
prefixCls, onKeyDown, tabBarPosition, $slots,
|
|
} = this
|
|
const cls = {
|
|
[`${prefixCls}-bar`]: true,
|
|
}
|
|
const topOrBottom = (tabBarPosition === 'top' || tabBarPosition === 'bottom')
|
|
const tabBarExtraContentStyle = topOrBottom ? { float: 'right' } : {}
|
|
let children = contents
|
|
if ($slots.default) {
|
|
children = [
|
|
<div key='extra' class='`${prefixCls}-extra-content`' style={tabBarExtraContentStyle}>
|
|
{$slots.default}
|
|
</div>,
|
|
contents,
|
|
]
|
|
children = topOrBottom ? children : children.reverse()
|
|
}
|
|
return (
|
|
<div
|
|
role='tablist'
|
|
class={cls}
|
|
tabIndex='0'
|
|
ref={this.saveRef('root')}
|
|
onKeydown={onKeyDown}
|
|
>
|
|
{children}
|
|
</div>
|
|
)
|
|
},
|
|
},
|
|
}
|