| import { GridContent } from '@ant-design/pro-components'; | 
| import { Menu } from 'antd'; | 
| import React, { useLayoutEffect, useRef, useState } from 'react'; | 
| import { FormattedMessage, useIntl } from '@umijs/max'; | 
| import BaseView from './components/base'; | 
| import SecurityView from './components/security'; | 
| import useStyles from './style.style'; | 
|   | 
| const Settings = () => { | 
|     const intl = useIntl(); | 
|     const { styles } = useStyles(); | 
|     const [initConfig, setInitConfig] = useState({ | 
|         mode: 'inline', | 
|         selectKey: 'base', | 
|     }); | 
|   | 
|     const menuMap = { | 
|         base: intl.formatMessage({ id: 'personal.base.setting', defaultMessage: '基本设置' }), | 
|         security: intl.formatMessage({ id: 'personal.security.setting', defaultMessage: '安全设置' }), | 
|     }; | 
|      | 
|     const getMenu = () => { | 
|         return Object.keys(menuMap).map((item) => ({ key: item, label: menuMap[item] })); | 
|     }; | 
|   | 
|     const dom = useRef(); | 
|   | 
|     const resize = () => { | 
|         requestAnimationFrame(() => { | 
|             if (!dom.current) { | 
|                 return; | 
|             } | 
|             let mode = 'inline'; | 
|             const { offsetWidth } = dom.current; | 
|             if (dom.current.offsetWidth < 641 && offsetWidth > 400) { | 
|                 mode = 'horizontal'; | 
|             } | 
|             if (window.innerWidth < 768 && offsetWidth > 400) { | 
|                 mode = 'horizontal'; | 
|             } | 
|             setInitConfig({ | 
|                 ...initConfig, | 
|                 mode: mode, | 
|             }); | 
|         }); | 
|     }; | 
|   | 
|     useLayoutEffect(() => { | 
|         if (dom.current) { | 
|             window.addEventListener('resize', resize); | 
|             resize(); | 
|         } | 
|         return () => { | 
|             window.removeEventListener('resize', resize); | 
|         }; | 
|     }, [dom.current]); | 
|   | 
|     const renderChildren = () => { | 
|         const { selectKey } = initConfig; | 
|         switch (selectKey) { | 
|             case 'base': | 
|                 return <BaseView />; | 
|             case 'security': | 
|                 return <SecurityView />; | 
|             default: | 
|                 return null; | 
|         } | 
|     }; | 
|   | 
|     return ( | 
|         <GridContent> | 
|             <div | 
|                 className={styles.main} | 
|                 ref={(ref) => { | 
|                     if (ref) { | 
|                         dom.current = ref; | 
|                     } | 
|                 }} | 
|             > | 
|                 <div className={styles.leftMenu}> | 
|                     <Menu | 
|                         mode={initConfig.mode} | 
|                         selectedKeys={[initConfig.selectKey]} | 
|                         onClick={({ key }) => { | 
|                             setInitConfig({ | 
|                                 ...initConfig, | 
|                                 selectKey: key, | 
|                             }); | 
|                         }} | 
|                         items={getMenu()} | 
|                     /> | 
|                 </div> | 
|                 <div className={styles.right}> | 
|                     <div className={styles.title}>{menuMap[initConfig.selectKey]}</div> | 
|                     {renderChildren()} | 
|                 </div> | 
|             </div> | 
|         </GridContent> | 
|     ); | 
| }; | 
|   | 
| export default Settings; |