import React, { useContext, useState } from 'react'; import { Link, useNavigate } from 'react-router-dom'; import { UserContext } from '../context/User'; import { useTranslation } from 'react-i18next'; import { Button, Container, Dropdown, Icon, Menu, Segment, } from 'semantic-ui-react'; import { API, getLogo, getSystemName, isAdmin, isMobile, showSuccess, } from '../helpers'; import '../index.css'; // Header Buttons let headerButtons = [ { name: 'header.channel', to: '/channel', icon: 'sitemap', admin: true, }, { name: 'header.token', to: '/token', icon: 'key', }, { name: 'header.redemption', to: '/redemption', icon: 'dollar sign', admin: true, }, { name: 'header.topup', to: '/topup', icon: 'cart', }, { name: 'header.user', to: '/user', icon: 'user', admin: true, }, { name: 'header.dashboard', to: '/dashboard', icon: 'chart bar', }, { name: 'header.log', to: '/log', icon: 'book', }, { name: 'header.setting', to: '/setting', icon: 'setting', }, { name: 'header.about', to: '/about', icon: 'info circle', }, ]; if (localStorage.getItem('chat_link')) { headerButtons.splice(1, 0, { name: 'header.chat', to: '/chat', icon: 'comments', }); } const Header = () => { const { t, i18n } = useTranslation(); const [userState, userDispatch] = useContext(UserContext); let navigate = useNavigate(); const [showSidebar, setShowSidebar] = useState(false); const systemName = getSystemName(); const logo = getLogo(); async function logout() { setShowSidebar(false); await API.get('/api/user/logout'); showSuccess('注销成功!'); userDispatch({ type: 'logout' }); localStorage.removeItem('user'); navigate('/login'); } const toggleSidebar = () => { setShowSidebar(!showSidebar); }; const renderButtons = (isMobile) => { return headerButtons.map((button) => { if (button.admin && !isAdmin()) return <>; if (isMobile) { return ( { navigate(button.to); setShowSidebar(false); }} style={{ fontSize: '15px' }} > {t(button.name)} ); } return ( {t(button.name)} ); }); }; // Add language switcher dropdown const languageOptions = [ { key: 'zh', text: '中文', value: 'zh' }, { key: 'en', text: 'English', value: 'en' }, ]; const changeLanguage = (language) => { i18n.changeLanguage(language); }; if (isMobile()) { return ( <> logo
{systemName}
{showSidebar ? ( {renderButtons(true)} } options={languageOptions} value={i18n.language} onChange={(_, { value }) => changeLanguage(value)} /> {userState.user ? ( ) : ( <> )} ) : ( <> )} ); } return ( <> logo
{systemName}
{renderButtons(false)} } options={languageOptions} value={i18n.language} onChange={(_, { value }) => changeLanguage(value)} style={{ fontSize: '16px', fontWeight: '400', color: '#666', padding: '0 10px', }} /> {userState.user ? ( {t('header.logout')} ) : ( )}
); }; export default Header;