|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import React from 'react'; |
|
|
import { Link } from 'react-router-dom'; |
|
|
import { Typography, Tag } from '@douyinfe/semi-ui'; |
|
|
import SkeletonWrapper from '../components/SkeletonWrapper'; |
|
|
|
|
|
const HeaderLogo = ({ |
|
|
isMobile, |
|
|
isConsoleRoute, |
|
|
logo, |
|
|
logoLoaded, |
|
|
isLoading, |
|
|
systemName, |
|
|
isSelfUseMode, |
|
|
isDemoSiteMode, |
|
|
t, |
|
|
}) => { |
|
|
if (isMobile && isConsoleRoute) { |
|
|
return null; |
|
|
} |
|
|
|
|
|
return ( |
|
|
<Link to='/' className='group flex items-center gap-2'> |
|
|
<div className='relative w-8 h-8 md:w-8 md:h-8'> |
|
|
<SkeletonWrapper loading={isLoading || !logoLoaded} type='image' /> |
|
|
<img |
|
|
src={logo} |
|
|
alt='logo' |
|
|
className={`absolute inset-0 w-full h-full transition-all duration-200 group-hover:scale-110 rounded-full ${!isLoading && logoLoaded ? 'opacity-100' : 'opacity-0'}`} |
|
|
/> |
|
|
</div> |
|
|
<div className='hidden md:flex items-center gap-2'> |
|
|
<div className='flex items-center gap-2'> |
|
|
<SkeletonWrapper |
|
|
loading={isLoading} |
|
|
type='title' |
|
|
width={120} |
|
|
height={24} |
|
|
> |
|
|
<Typography.Title |
|
|
heading={4} |
|
|
className='!text-lg !font-semibold !mb-0' |
|
|
> |
|
|
{systemName} |
|
|
</Typography.Title> |
|
|
</SkeletonWrapper> |
|
|
{(isSelfUseMode || isDemoSiteMode) && !isLoading && ( |
|
|
<Tag |
|
|
color={isSelfUseMode ? 'purple' : 'blue'} |
|
|
className='text-xs px-1.5 py-0.5 rounded whitespace-nowrap shadow-sm' |
|
|
size='small' |
|
|
shape='circle' |
|
|
> |
|
|
{isSelfUseMode ? t('自用模式') : t('演示站点')} |
|
|
</Tag> |
|
|
)} |
|
|
</div> |
|
|
</div> |
|
|
</Link> |
|
|
); |
|
|
}; |
|
|
|
|
|
export default HeaderLogo; |
|
|
|