Add login to ToolsFramework

This commit is contained in:
2023-10-14 23:00:52 +08:00
parent b41c55f3de
commit 8b5880fab5
9 changed files with 136 additions and 17 deletions

View File

@@ -4,9 +4,15 @@ import '@/assets/css/pages/tools-framework.scss'
import Icon from '@ant-design/icons'
import { toolsJsonObjects } from '@/router/tools.tsx'
import HideScrollbar, { HideScrollbarElement } from '@/components/common/HideScrollbar.tsx'
import { getLocalStorage, setLocalStorage } from '@/utils/common.ts'
import { getLocalStorage, getRedirectUrl, setLocalStorage } from '@/utils/common.ts'
import { getLoginStatus, logout } from '@/utils/auth.ts'
import { NavLink, Outlet } from 'react-router-dom'
const ToolsFramework: React.FC = () => {
const matches = useMatches()
const lastMatch = matches.reduce((_, second) => second)
const location = useLocation()
const navigate = useNavigate()
const hideScrollbarRef = useRef<HideScrollbarElement>(null)
const [submenuTop, setSubmenuTop] = useState(0)
const [submenuLeft, setSubmenuLeft] = useState(0)
@@ -37,6 +43,21 @@ const ToolsFramework: React.FC = () => {
}
}
const handleClickAvatar = () => {
if (getLoginStatus()) {
navigate(`${lastMatch.pathname}${location.search}`)
} else {
navigate(getRedirectUrl('/login', `${lastMatch.pathname}${location.search}`))
}
}
const handleLogout = () => {
logout()
setTimeout(() => {
window.location.reload()
}, 1500)
}
return (
<>
<FitFullScreen className={'flex-horizontal'}>
@@ -183,13 +204,42 @@ const ToolsFramework: React.FC = () => {
</div>
<div className={'separate'} style={{ marginTop: 0, marginBottom: 0 }} />
<div className={'footer'}>
<span className={'icon-box'}>
<span className={'icon-user'} onClick={handleClickAvatar}>
<Icon component={IconFatwebUser} />
</span>
<span className={'text'}></span>
<span hidden={getLoginStatus()} className={'text'}>
<NavLink
to={getRedirectUrl(
'/login',
`${lastMatch.pathname}${location.search}`
)}
>
</NavLink>
</span>
<span hidden={!getLoginStatus()} className={'text'}>
</span>
<div
hidden={!getLoginStatus()}
className={`submenu-exit${!getLoginStatus() ? ' hide' : ''}`}
>
<div className={'content'}>
<span
hidden={!getLoginStatus()}
className={'icon-exit'}
onClick={handleLogout}
>
<Icon component={IconFatwebExit} />
</span>
</div>
</div>
</div>
</div>
<div className={'right-panel'}></div>
<div className={'right-panel'}>
<Outlet />
</div>
</FitFullScreen>
</>
)