parent
8ce5bff0a1
commit
684148879c
@ -0,0 +1,21 @@
|
||||
export default function Footer() {
|
||||
return (
|
||||
<div className="absolute bottom-[30px] left-0 right-0 text-[13px] leading-[18px] text-[rgba(0,0,0,0.4)] text-center">
|
||||
注册登录即代表同意
|
||||
<a
|
||||
className="text-[#000]"
|
||||
href={`${process.env.NEXT_PUBLIC_MOBILE_HOST}/agreement/registrationAgreement.html`}
|
||||
target="_blank"
|
||||
>
|
||||
《注册协议》
|
||||
</a>
|
||||
<a
|
||||
className="text-[#000]"
|
||||
href={`${process.env.NEXT_PUBLIC_MOBILE_HOST}/agreement/privacyPolicy.html`}
|
||||
target="_blank"
|
||||
>
|
||||
《隐私政策》
|
||||
</a>
|
||||
</div>
|
||||
);
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
'use client';
|
||||
|
||||
import { useState, useContext } from 'react';
|
||||
|
||||
import { Dialog, DialogContent, DialogTrigger, DialogClose } from '@/components/ui/dialog';
|
||||
|
||||
import Footer from './Footer';
|
||||
import { LoginContext } from './LoginContext';
|
||||
import LoginPhone from './LoginPhone';
|
||||
import LoginQrcode from './LoginQrcode';
|
||||
import Tab from './Tab';
|
||||
|
||||
import { IconClose } from '@/components';
|
||||
|
||||
export default function Login() {
|
||||
const { state, dispatch } = useContext(LoginContext);
|
||||
const [currentTab, setCurrent] = useState<string>('qrCode');
|
||||
|
||||
return (
|
||||
<Dialog open={state.showLogin} onOpenChange={(open) => dispatch({ type: 'SHOW_LOGIN', payload: open })}>
|
||||
<DialogTrigger asChild>
|
||||
<button
|
||||
id="header_login_button_for_gobal"
|
||||
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] "
|
||||
>
|
||||
登录
|
||||
</button>
|
||||
</DialogTrigger>
|
||||
|
||||
<DialogContent className="w-420px h-450px px-40px bg-#f2f3f7" onPointerDownOutside={(e) => e.preventDefault()}>
|
||||
<Tab value={currentTab} changeTab={(value: string) => setCurrent(value)} />
|
||||
|
||||
<DialogClose className="absolute top-[24px] right-[24px] w-24px h-24px cursor-pointer outline-none">
|
||||
<IconClose />
|
||||
</DialogClose>
|
||||
|
||||
<div>
|
||||
{currentTab === 'qrCode' && <LoginQrcode />}
|
||||
{currentTab === 'phone' && <LoginPhone />}
|
||||
</div>
|
||||
|
||||
<Footer />
|
||||
</DialogContent>
|
||||
</Dialog>
|
||||
);
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
'use client';
|
||||
|
||||
import { useContext } from 'react';
|
||||
|
||||
import { Dialog, DialogContent, DialogTrigger, DialogClose } from '@/components/ui/dialog';
|
||||
|
||||
import { LoginContext } from './LoginContext';
|
||||
import LoginForm from './LoginForm';
|
||||
|
||||
import { IconClose } from '@/components';
|
||||
|
||||
export default function LoginQrcode() {
|
||||
const { state, dispatch } = useContext(LoginContext);
|
||||
|
||||
return (
|
||||
<div className="flex flex-col items-center px-40px bg-#f2f3f7">
|
||||
{/* title */}
|
||||
<div className="mt-9px text-13px leading-18px text-#000/70 text-center">通过雀乐APP扫码登录</div>
|
||||
|
||||
<div className="w-200px h-200px rounded-6px mt-15px bg-#fff overflow-hidden shadow-black-[0px_8px_30px_0px]"></div>
|
||||
</div>
|
||||
);
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
export default function Tab({
|
||||
className,
|
||||
value,
|
||||
changeTab,
|
||||
}: {
|
||||
className?: string;
|
||||
value: string;
|
||||
changeTab: (value: string) => void;
|
||||
}) {
|
||||
const tabs = [
|
||||
{ name: 'qrCode', label: '扫码登录' },
|
||||
{ name: 'phone', label: '手机登录' },
|
||||
];
|
||||
|
||||
return (
|
||||
<div className={`flex justify-center gap-24px w-full ${className}`}>
|
||||
{tabs.map((tab) => {
|
||||
return (
|
||||
<div
|
||||
className={`text-20px leading-28px font-600 cursor-pointer text-#000/40 ${tab.name === value && 'text-#000/95'}`}
|
||||
key={tab.name}
|
||||
onClick={() => changeTab(tab.name)}
|
||||
>
|
||||
{tab.label}
|
||||
</div>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
);
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
declare namespace Login {
|
||||
export interface Tabs {
|
||||
name: string;
|
||||
label: string;
|
||||
}
|
||||
}
|
Loading…
Reference in new issue