From 14b867a3a5d2bc0bb630ab66aa375a65fbb30502 Mon Sep 17 00:00:00 2001 From: jacy <18049821889@163.com> Date: Fri, 17 Jul 2026 10:20:32 +0800 Subject: [PATCH] fix(auth): show user agreement before login actions Quick login required agreement without a checkbox; move the consent row above CTAs across partner/shop/user/mini login pages so it stays visible on short screens. Co-authored-by: Cursor --- apps/h5-partner/src/pages/LoginPage.tsx | 58 +++++++++++----- apps/h5-partner/src/styles.css | 31 +++++++-- apps/h5-shop/src/pages/LoginPage.tsx | 63 ++++++++++++------ apps/h5-shop/src/styles.css | 23 +++++-- apps/h5-user/src/pages/LoginPage.tsx | 41 ++++++------ apps/h5-user/src/styles.css | 7 +- apps/mini-hq/src/pages/login/index.css | 5 ++ apps/mini-hq/src/pages/login/index.tsx | 36 +++++----- apps/mini-user/src/pages/login/index.tsx | 85 +++++++++++++++--------- apps/mini-user/src/styles/login.css | 3 +- 10 files changed, 235 insertions(+), 117 deletions(-) diff --git a/apps/h5-partner/src/pages/LoginPage.tsx b/apps/h5-partner/src/pages/LoginPage.tsx index d3722b0..6b32241 100644 --- a/apps/h5-partner/src/pages/LoginPage.tsx +++ b/apps/h5-partner/src/pages/LoginPage.tsx @@ -1,4 +1,4 @@ -import { useEffect, useState } from 'react'; +import { useEffect, useRef, useState, type RefObject } from 'react'; import { Link, useNavigate, useSearchParams } from 'react-router-dom'; import { isWxAuthorizeEnabled } from '@dukang/shared-types'; import { WECHAT_INAPP_REQUIRED_MSG } from '@dukang/weixin-sdk'; @@ -24,6 +24,32 @@ import { isWechatEnv } from '../lib/weixin'; const REMEMBER_PHONE_KEY = 'partner_remember_phone'; const REMEMBER_FLAG_KEY = 'partner_remember_account'; +function AgreementCheckbox({ + agreed, + onChange, + inputRef, +}: { + agreed: boolean; + onChange: (next: boolean) => void; + inputRef?: RefObject; +}) { + return ( + + ); +} + function maskPhone(phone: string) { if (phone.length < 7) return phone; return `${phone.slice(0, 3)} **** ${phone.slice(-4)}`; @@ -74,6 +100,7 @@ export default function LoginPage() { const [msg, setMsg] = useState(''); const [codeCooldown, setCodeCooldown] = useState(0); const [wxAuthorize, setWxAuthorize] = useState(false); + const agreementRef = useRef(null); useEffect(() => { fetchClientConfig() @@ -88,6 +115,7 @@ export default function LoginPage() { function ensureAgreed() { if (!agreed) { setMsg('请先勾选并同意用户协议'); + agreementRef.current?.scrollIntoView({ behavior: 'smooth', block: 'center' }); return false; } return true; @@ -230,10 +258,16 @@ export default function LoginPage() {