parent
2f0d39b1b4
commit
137939d91c
@ -0,0 +1,38 @@
|
||||
'use client';
|
||||
|
||||
import { parseCookies } from 'nookies';
|
||||
import { useShallow } from 'zustand/react/shallow';
|
||||
|
||||
import HeaderAvatar from './HeaderAvatar';
|
||||
|
||||
import { LoginModal } from '@/components';
|
||||
import useUserStore from '@/store/user';
|
||||
|
||||
export default function Auth() {
|
||||
const { token } = parseCookies();
|
||||
const { showLogin, setShowLogin } = useUserStore(
|
||||
useShallow((state) => ({
|
||||
showLogin: state.showLogin,
|
||||
setShowLogin: state.setShowLogin,
|
||||
})),
|
||||
);
|
||||
|
||||
return (
|
||||
<div>
|
||||
{!!token ? (
|
||||
<HeaderAvatar className="ml-[40px]" />
|
||||
) : (
|
||||
<div>
|
||||
<button
|
||||
className="w-[74px] h-[36px] ml-[40px] border-[#000] border-[1.5px] rounded-[60px] text-[17px] hover:bg-brand hover:border-brand hover:text-[#fff] "
|
||||
onClick={() => setShowLogin(true)}
|
||||
>
|
||||
登录
|
||||
</button>
|
||||
</div>
|
||||
)}
|
||||
{/* 登录框 */}
|
||||
{showLogin && <LoginModal />}
|
||||
</div>
|
||||
);
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
'use client';
|
||||
|
||||
import Auth from './Auth';
|
||||
import Nav from './Nav';
|
||||
|
||||
import { Logo } from '@/components';
|
||||
|
||||
export default function Header({ className }: { className?: string }) {
|
||||
return (
|
||||
<header className={`w-full h-[80px] z-2 ${className}`}>
|
||||
<div className="relative w-[1200px] h-full mx-auto flex items-center justify-between">
|
||||
<Logo />
|
||||
<div className="h-full flex items-center">
|
||||
<Nav />
|
||||
<Auth />
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
);
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
'use client';
|
||||
|
||||
import Link from 'next/link';
|
||||
import { usePathname } from 'next/navigation';
|
||||
|
||||
export default function Nav() {
|
||||
const pathName = usePathname();
|
||||
const menuList = [
|
||||
{
|
||||
name: '首页',
|
||||
path: '/',
|
||||
},
|
||||
{
|
||||
name: 'APP下载',
|
||||
path: '/download',
|
||||
},
|
||||
{
|
||||
name: '关于我们',
|
||||
path: '/about',
|
||||
},
|
||||
];
|
||||
|
||||
return (
|
||||
<nav>
|
||||
<ul className="flex flex-row items-center space-x-[40px]">
|
||||
{menuList.map(({ name, path }) => (
|
||||
<li
|
||||
key={path}
|
||||
className={`text-[18px] leading-[25.2px] font-medium hover:text-[rgba(0,0,0,0.95)] ${pathName === path ? 'text-[rgba(0,0,0,0.95)]' : 'text-[rgba(0,0,0,0.4)]'}`}
|
||||
>
|
||||
<Link href={path}>{name}</Link>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</nav>
|
||||
);
|
||||
}
|
@ -1,83 +0,0 @@
|
||||
'use client';
|
||||
|
||||
import { useEffect, useState } from 'react';
|
||||
|
||||
import Link from 'next/link';
|
||||
import { usePathname } from 'next/navigation';
|
||||
import { useShallow } from 'zustand/react/shallow';
|
||||
|
||||
import HeaderAvatar from './HeaderAvatar';
|
||||
|
||||
import { Logo, LoginModal } from '@/components';
|
||||
import useUserStore from '@/store/user';
|
||||
|
||||
export default function Header({ className }: { className?: string }) {
|
||||
const { userInfo, showLogin, setShowLogin } = useUserStore(
|
||||
useShallow((state) => ({
|
||||
userInfo: state.userInfo,
|
||||
showLogin: state.showLogin,
|
||||
setShowLogin: state.setShowLogin,
|
||||
})),
|
||||
);
|
||||
const pathName = usePathname();
|
||||
const [redirect, setRedirect] = useState<string>('');
|
||||
const menuList = [
|
||||
{
|
||||
name: '首页',
|
||||
path: '/',
|
||||
},
|
||||
{
|
||||
name: 'APP下载',
|
||||
path: '/download',
|
||||
},
|
||||
{
|
||||
name: '关于我们',
|
||||
path: '/about',
|
||||
},
|
||||
];
|
||||
|
||||
// 登录重定向
|
||||
useEffect(() => {
|
||||
const searchParams = new URLSearchParams(window.location.search);
|
||||
const redirectParam = searchParams.get('redirect');
|
||||
setRedirect(redirectParam || '');
|
||||
if (!userInfo.id && redirectParam) {
|
||||
setShowLogin(true);
|
||||
}
|
||||
}, [pathName]);
|
||||
|
||||
return (
|
||||
<header className={`w-full h-[80px] z-2 ${className}`}>
|
||||
<div className="relative w-[1200px] h-full mx-auto flex items-center justify-between">
|
||||
<Logo />
|
||||
<div className="h-full flex flex-row items-center">
|
||||
<ul className="flex flex-row items-center space-x-[40px]">
|
||||
{menuList.map(({ name, path }) => (
|
||||
<li
|
||||
key={path}
|
||||
className={`text-[18px] leading-[25.2px] font-medium hover:text-[rgba(0,0,0,0.95)] ${pathName === path ? 'text-[rgba(0,0,0,0.95)]' : 'text-[rgba(0,0,0,0.4)]'}`}
|
||||
>
|
||||
<Link href={path}>{name}</Link>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
|
||||
{/* 登录按钮/头像 */}
|
||||
{!!userInfo.id ? (
|
||||
<HeaderAvatar className="ml-[40px]" />
|
||||
) : (
|
||||
<button
|
||||
className="w-[74px] h-[36px] ml-[40px] border-[#000] border-[1.5px] rounded-[60px] text-[17px] hover:bg-brand hover:border-brand hover:text-[#fff] "
|
||||
onClick={() => setShowLogin(true)}
|
||||
>
|
||||
登录
|
||||
</button>
|
||||
)}
|
||||
</div>
|
||||
|
||||
{/* 登录框 */}
|
||||
{showLogin && <LoginModal redirect={redirect} />}
|
||||
</div>
|
||||
</header>
|
||||
);
|
||||
}
|
Loading…
Reference in new issue