Browse Source

feat: 添加用户协议和隐私政策的同意框

feature/group
huangmin 1 month ago
parent
commit
e84af70b76
  1. 51
      src/components/auth/LoginModal.tsx

51
src/components/auth/LoginModal.tsx

@ -1,7 +1,7 @@
"use client"; "use client";
import { useCallback, useEffect, useRef, useState } from "react"; import { useCallback, useEffect, useRef, useState } from "react";
import { Alert, Button, Input, Modal, Segmented } from "antd"; import { Alert, Button, Checkbox, Input, Modal, Segmented } from "antd";
import { useI18n } from "@/i18n"; import { useI18n } from "@/i18n";
import { useLoginModalStore } from "@/store/loginModalStore"; import { useLoginModalStore } from "@/store/loginModalStore";
import { useUserStore } from "@/store/userStore"; import { useUserStore } from "@/store/userStore";
@ -54,6 +54,7 @@ export function LoginModal() {
const [isLoading, setIsLoading] = useState(false); const [isLoading, setIsLoading] = useState(false);
const [isSendingCode, setIsSendingCode] = useState(false); const [isSendingCode, setIsSendingCode] = useState(false);
const [error, setError] = useState(""); const [error, setError] = useState("");
const [agreementChecked, setAgreementChecked] = useState(false);
const [captchaOpen, setCaptchaOpen] = useState(false); const [captchaOpen, setCaptchaOpen] = useState(false);
const [captchaId, setCaptchaId] = useState(""); const [captchaId, setCaptchaId] = useState("");
@ -399,7 +400,8 @@ export function LoginModal() {
isLoading || isLoading ||
mode === "wechat" || mode === "wechat" ||
!phone.trim() || !phone.trim() ||
(mode === "password" ? !password : !code.trim()); (mode === "password" ? !password : !code.trim()) ||
!agreementChecked;
const isWxBindSubmitDisabled = const isWxBindSubmitDisabled =
isLoading || !wxRegisterToken || !wxBindPhone.trim() || !wxBindCode.trim(); isLoading || !wxRegisterToken || !wxBindPhone.trim() || !wxBindCode.trim();
@ -501,6 +503,26 @@ export function LoginModal() {
<Button onClick={() => void loadWxQrCode()} loading={wxQrLoading}> <Button onClick={() => void loadWxQrCode()} loading={wxQrLoading}>
{t("auth.wechatReloadQr")} {t("auth.wechatReloadQr")}
</Button> </Button>
<p className="text-center text-xs leading-5 text-neutral-500">
<a
href="https://www.popi.art/content/userTerms"
target="_blank"
rel="noreferrer"
className="text-blue-500 hover:underline"
>
</a>
<a
href="https://www.popi.art/content/privacyPolicy"
target="_blank"
rel="noreferrer"
className="text-blue-500 hover:underline"
>
</a>
</p>
</div> </div>
) )
) : ( ) : (
@ -562,6 +584,31 @@ export function LoginModal() {
> >
{mode === "password" ? t("auth.login") : t("auth.loginOrRegister")} {mode === "password" ? t("auth.login") : t("auth.loginOrRegister")}
</Button> </Button>
<Checkbox
checked={agreementChecked}
onChange={(event) => setAgreementChecked(event.target.checked)}
className="text-xs leading-5 text-neutral-500"
>
<a
href="https://www.popi.art/content/userTerms"
target="_blank"
rel="noreferrer"
className="text-blue-500 hover:underline"
>
</a>
<a
href="https://www.popi.art/content/privacyPolicy"
target="_blank"
rel="noreferrer"
className="text-blue-500 hover:underline"
>
</a>
</Checkbox>
</> </>
)} )}
</div> </div>

Loading…
Cancel
Save