index.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. import React from 'react'
  2. import s from './index.less'
  3. import { Layout, Menu, Icon, Avatar, Dropdown, ConfigProvider } from 'antd'
  4. import zhCN from 'antd/es/locale/zh_CN'
  5. import router from 'umi/router'
  6. import logo from '@/assets/logo.jpg'
  7. const { Header, Sider, Content, Footer } = Layout
  8. const { SubMenu } = Menu
  9. export default class MainLayout extends React.PureComponent {
  10. state = {
  11. collapsed: false,
  12. selectedKeys: [window.location.pathname],
  13. defaultOpenKeys: this.getDefaultKeys()
  14. }
  15. getDefaultKeys () {
  16. const { pathname } = window.location
  17. const ps = pathname.split('/')
  18. return [`/${ps[1]}`]
  19. }
  20. toggle = () => {
  21. this.setState({
  22. collapsed: !this.state.collapsed
  23. })
  24. }
  25. async componentDidMount () { }
  26. handleLogout = () => {
  27. router.push('/login')
  28. }
  29. handleClick = (e) => {
  30. this.setState({ selectedKeys: [e.key] })
  31. }
  32. render () {
  33. const { collapsed, selectedKeys, defaultOpenKeys } = this.state
  34. const menu = (
  35. <Menu>
  36. <Menu.Item>
  37. <div onClick={this.handleLogout}>退出登录</div>
  38. </Menu.Item>
  39. </Menu>
  40. )
  41. return (
  42. <ConfigProvider locale={zhCN}>
  43. <Layout className={s.mainLayoutPage}>
  44. <Sider trigger={null} collapsible collapsed={collapsed}>
  45. <div className={s.logoWrap} href="/">
  46. <img src={logo} className={s.logo} alt="logo" />
  47. {collapsed ? '' : <p><a href="/">后端应用后台</a></p>}
  48. </div>
  49. {/* <Menu */}
  50. {/* theme="dark" */}
  51. {/* mode="inline" */}
  52. {/* defaultOpenKeys={defaultOpenKeys} */}
  53. {/* selectedKeys={selectedKeys} */}
  54. {/* onClick={this.handleClick} */}
  55. {/* > */}
  56. {/* <SubMenu */}
  57. {/* key="/index" */}
  58. {/* title={ */}
  59. {/* <span> */}
  60. {/* <Icon type="menu" /> */}
  61. {/* <span>首页</span> */}
  62. {/* </span>}> */}
  63. {/* <Menu.Item key="/index" onClick={() => { router.push('/') }}>首页列表</Menu.Item> */}
  64. {/* </SubMenu> */}
  65. {/* </Menu> */}
  66. <Menu
  67. theme="dark"
  68. mode="inline"
  69. defaultOpenKeys={defaultOpenKeys}
  70. selectedKeys={selectedKeys}
  71. onClick={this.handleClick}
  72. >
  73. <SubMenu
  74. key="/dc"
  75. title={
  76. <span>
  77. <Icon type="code-sandbox" />
  78. <span>数据中心</span>
  79. </span>}>
  80. <Menu.Item key="/dc/data" onClick={() => { router.push('/dc/data') }}>UA数据管理</Menu.Item>
  81. <Menu.Item key="/dc/list" onClick={() => { router.push('/dc/list') }}>UA数据报表</Menu.Item>
  82. <Menu.Item key="/dc/subscribe/data" onClick={() => { router.push('/dc/subscribe/data') }}>订阅数据管理</Menu.Item>
  83. <Menu.Item key="/dc/subscribe/list" onClick={() => { router.push('/dc/subscribe/list')}}>订阅数据报表</Menu.Item>
  84. </SubMenu>
  85. </Menu>
  86. </Sider>
  87. <Layout>
  88. <Header className={s.header}>
  89. <Icon
  90. className={s.trigger}
  91. type={this.state.collapsed ? 'menu-unfold' : 'menu-fold'}
  92. onClick={this.toggle}
  93. />
  94. <Dropdown overlay={menu}>
  95. <Avatar icon="user" className={s.avatar} />
  96. </Dropdown>
  97. </Header>
  98. <Content className={s.content}>
  99. {this.props.children}
  100. </Content>
  101. <Footer className={s.footer}>
  102. Copyright <Icon type="copyright" /> 杭州微拍堂文化创意有限公司 浙ICP备14041798号
  103. </Footer>
  104. </Layout>
  105. </Layout>
  106. </ConfigProvider>
  107. )
  108. }
  109. }