index.js 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import React from 'react';
  2. import { Tabs,Dropdown, Button,Menu,message } from 'antd';
  3. import { DownOutlined } from '@ant-design/icons';
  4. import { useDispatch,useSelector } from 'react-redux'
  5. import { active, close, closeOther} from '../../store/reducers/tabPanes'
  6. import './index.less'
  7. import iconLt from '@images/lt.png';
  8. import iconRt from '@images/rt.png';
  9. const { TabPane } = Tabs;
  10. const propTypes = {
  11. }
  12. const defaultProps = {};
  13. function ATabs(){
  14. const panes =useSelector(state => {
  15. return state.tabPanes.panes
  16. });
  17. const dispatch = useDispatch();
  18. const activeTab = useSelector(state => {
  19. return state.tabPanes.activeTab
  20. });
  21. //切换tab
  22. function onChange(activeKey){
  23. dispatch(active(activeKey))
  24. }
  25. //关闭当前tab
  26. function onDelTab(activeKey){
  27. if(panes.length===1){
  28. message.warning("至少保留一个标签哦~",1);
  29. return;
  30. }
  31. const paneIndex = panes.findIndex((it)=>it.key===activeKey);
  32. dispatch(close({del:paneIndex,active:panes[1].key}))
  33. }
  34. //关闭其他tab
  35. function onDelOtherTab(activeKey){
  36. const paneIndex = panes.findIndex((it)=>it.key===activeKey);
  37. dispatch(closeOther({del:paneIndex}))
  38. }
  39. const menu = (
  40. <Menu>
  41. <Menu.Item key="1" onClick={()=>onDelTab(activeTab)}>
  42. 关闭当前标签
  43. </Menu.Item>
  44. <Menu.Item key="2" onClick={()=>onDelOtherTab(activeTab)}>
  45. 关闭其他标签
  46. </Menu.Item>
  47. </Menu>
  48. );
  49. return (
  50. <div className="tab-container">
  51. <span className='pre-tab'><img src={iconLt} alt="向左滑"/></span>
  52. <Tabs
  53. className='tab-cont'
  54. hideAdd
  55. onChange={onChange}
  56. onEdit={onDelTab}
  57. type="editable-card"
  58. activeKey={activeTab}
  59. >
  60. {panes.map(pane => (
  61. <TabPane tab={pane.title} key={pane.key}>
  62. {pane.content}
  63. </TabPane>
  64. ))}
  65. </Tabs>
  66. <span className='next-tab'><img src={iconRt} alt="向右滑"/></span>
  67. <Dropdown className='tab-oper' overlay={menu}>
  68. <Button size='small'>
  69. <DownOutlined />
  70. </Button>
  71. </Dropdown>
  72. </div>
  73. )
  74. }
  75. ATabs.propTypes = propTypes;
  76. ATabs.defaultProps = defaultProps;
  77. export default ATabs;