基於Ant Design Pro 的修改的項目 (多標籤tabs、拖拽、富文本、多功能table、多選Select)

Ant Tabs(pro 2.0)

本文介紹Ant Tabs一些 新增的功能和原理及思路介紹及更新日誌。html

實現多頁籤的原理及思路

Ant Tabs 基於 Ant Design Pro 2.0 基礎上修改的多標籤Tabs,修改此多標籤也是工做上的需求,原來後臺項目也是基於 Antd Design 來開發的,在 github上demo也不是不少,基本上也不符合本身的需求,因而就本着本身動手,豐衣足食的思想,本身在Antd Design的基礎上修改了部分文件。node

可是,中間也走了不少彎路,踩了不少坑,修改了多個版本最終才成了如今的需求,不過我以爲還能夠,僅供你們參考。react

引入 ant Tabs

主要修改文件 react-ant/src/layouts/BasicLayout.js 中引入Tabs 組件git

代碼解析github

constructor(props) {
    super(props);
    const {routes} = props.route,routeKey = '/home/home'; // routeKey 爲設置首頁設置 試試 '/dashboard/analysis' 或其餘key值
    const tabLists = this.updateTree(routes);
    let tabList=[];
    tabLists.map((v) => {
      if(v.key === routeKey){
        if(tabList.length === 0){
          v.closable = false
          tabList.push(v);
        }
      }
    });
    this.state = ({
        tabList:tabList,
        tabListKey:[routeKey],
        activeKey:routeKey,
        routeKey
    })

    this.getPageTitle = memoizeOne(this.getPageTitle);
    this.matchParamsPath = memoizeOne(this.matchParamsPath, isEqual);
  }
複製代碼
  • tabList: 用來存儲打開的多標籤
  • tabListKe:用來判斷 tabList 是否重複保持tabList標籤惟一性
  • activeKey:當前激活 tab 面板的 key
  • routeKey: 爲設置首頁設置 試試 '/dashboard/analysis' 或其餘key值
updateTree = data => {
    const treeData = data;
    const treeList = [];
    // 遞歸獲取樹列表
    const getTreeList = data => {
      data.forEach(node => {
        if(!node.level){
          treeList.push({ tab: node.name, key: node.path,locale:node.locale,closable:true,content:node.component });
        }
        if (node.routes && node.routes.length > 0) { //!node.hideChildrenInMenu &&
          getTreeList(node.routes);
        }
      });
    };
    getTreeList(treeData);
    return treeList;
  };
複製代碼
  • updateTree函數:爲遞歸 routes 多維數據變成一維數據
<SiderMenu
            logo={logo}
            theme={navTheme}
            onCollapse={this.handleMenuCollapse}
            menuData={menuData}
            isMobile={isMobile}
            {...this.props}
            onHandlePage ={this.onHandlePage}
          />
複製代碼
  • onHandlePage: 點擊左側及頁面內觸發的函數
{hidenAntTabs ?
              (<Authorized authority={routerConfig} noMatch={<Exception403 />}> {children} </Authorized>) :
              (this.state.tabList && this.state.tabList.length ? (
              <Tabs // className={styles.tabs} activeKey={activeKey} onChange={this.onChange} tabBarExtraContent={operations} tabBarStyle={{background:'#fff'}} tabPosition="top" tabBarGutter={-1} hideAdd type="editable-card" onEdit={this.onEdit} > {this.state.tabList.map(item => ( <TabPane tab={item.tab} key={item.key} closable={item.closable}> <Authorized authority={routerConfig} noMatch={<Exception403 />}> {/*{item.content}*/} <Route key={item.key} path={item.path} component={item.content} exact={item.exact} /> </Authorized> </TabPane> ))} </Tabs> ) : null)} 複製代碼
  • hidenAntTabs:添加這個字段爲在抽屜屑中控制是否顯示多標籤

相關連接

更新日誌

2019-04-23

  • 增長功能:增長了左側點擊出發的函數,及çonHandlePage ={this.onHandlePage}
  • 增長文檔:主要解釋了Ant Tabs的原理及功能

2019-04-18

  • 增長功能:AntTableFinder-多功能Table 深度封裝 ant Table 表格

2019-04-10

  • 增長功能:Tabs-支持多標籤功能
  • 增長功能:支持-關閉當前標籤頁、關閉其餘標籤頁、關閉所有標籤頁
  • 增長功能:拖拽組件
  • 增長功能:富文本編譯器
  • 增長功能:支持-是否 隱藏 Ant-Tabs 功能

反饋

若是你以爲有用,對你有些幫助,歡迎給個Star😊,若是你還爲明白及文中有錯誤,請提交Issues😊ide

相關文章
相關標籤/搜索