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() {
)}
+
)}
-
-
);
}
diff --git a/apps/h5-user/src/styles.css b/apps/h5-user/src/styles.css
index 26ea5e2..e04665b 100644
--- a/apps/h5-user/src/styles.css
+++ b/apps/h5-user/src/styles.css
@@ -1558,8 +1558,9 @@
.login-agreement {
display: flex;
- align-items: center;
+ align-items: flex-start;
gap: 8px;
+ margin: 12px 0 16px;
font-family: var(--font-label);
font-size: 12px;
font-weight: 500;
@@ -1571,8 +1572,8 @@
.login-agreement input {
margin-top: 0;
- width: 16px;
- height: 16px;
+ width: 18px;
+ height: 18px;
flex-shrink: 0;
accent-color: var(--color-heritage-red);
}
diff --git a/apps/mini-hq/src/pages/login/index.css b/apps/mini-hq/src/pages/login/index.css
index ffd3613..ee9e639 100644
--- a/apps/mini-hq/src/pages/login/index.css
+++ b/apps/mini-hq/src/pages/login/index.css
@@ -177,6 +177,11 @@
color: var(--hq-muted);
}
+.login-agreement {
+ margin: 8px 0 12px;
+ padding: 4px 0;
+}
+
.login-remember {
align-items: center;
padding: 0 4px;
diff --git a/apps/mini-hq/src/pages/login/index.tsx b/apps/mini-hq/src/pages/login/index.tsx
index 387f301..a680e91 100644
--- a/apps/mini-hq/src/pages/login/index.tsx
+++ b/apps/mini-hq/src/pages/login/index.tsx
@@ -212,24 +212,6 @@ export default function LoginPage() {
记住账号
-
- 登录
-
-
- {msg ? {msg} : null}
-
-
- 其他登录方式
-
-
-
-
- {wxLoading ? '登录中...' : '微信一键授权'}
-
-
setAgreed((v) => !v)}>
@@ -255,6 +237,24 @@ export default function LoginPage() {
+
+ {msg ? {msg} : null}
+
+
+ 登录
+
+
+
+ 其他登录方式
+
+
+
+
+ {wxLoading ? '登录中...' : '微信一键授权'}
+
diff --git a/apps/mini-user/src/pages/login/index.tsx b/apps/mini-user/src/pages/login/index.tsx
index c4dd81d..8b3a959 100644
--- a/apps/mini-user/src/pages/login/index.tsx
+++ b/apps/mini-user/src/pages/login/index.tsx
@@ -329,6 +329,33 @@ export default function LoginPage() {
使用微信支付前需授权微信账号
+ setAgreed((v) => !v)}>
+
+ {agreed ? ✓ : null}
+
+
+ 我已阅读并同意
+ {
+ e.stopPropagation();
+ Taro.navigateTo({ url: '/pages/user-agreement/index' });
+ }}
+ >
+ 《用户协议》
+
+ 和
+ {
+ e.stopPropagation();
+ Taro.navigateTo({ url: '/pages/privacy-policy/index' });
+ }}
+ >
+ 《隐私政策》
+
+
+
{showWechatLogin ? (
void wechatLogin()} />
) : null}
@@ -376,6 +403,34 @@ export default function LoginPage() {
) : null}
+ setAgreed((v) => !v)}>
+
+ {agreed ? ✓ : null}
+
+
+ 我已阅读并同意
+ {
+ e.stopPropagation();
+ Taro.navigateTo({ url: '/pages/user-agreement/index' });
+ }}
+ >
+ 《用户协议》
+
+ 和
+ {
+ e.stopPropagation();
+ Taro.navigateTo({ url: '/pages/privacy-policy/index' });
+ }}
+ >
+ 《隐私政策》
+
+
+
+
void login()}
@@ -415,36 +470,6 @@ export default function LoginPage() {
>
) : null}
-
-
- setAgreed((v) => !v)}>
-
- {agreed ? ✓ : null}
-
-
- 我已阅读并同意
- {
- e.stopPropagation();
- Taro.navigateTo({ url: '/pages/user-agreement/index' });
- }}
- >
- 《用户协议》
-
- 和
- {
- e.stopPropagation();
- Taro.navigateTo({ url: '/pages/privacy-policy/index' });
- }}
- >
- 《隐私政策》
-
-
-
-
);
}
diff --git a/apps/mini-user/src/styles/login.css b/apps/mini-user/src/styles/login.css
index 30d18f9..f13b9f7 100644
--- a/apps/mini-user/src/styles/login.css
+++ b/apps/mini-user/src/styles/login.css
@@ -306,8 +306,9 @@
.login-agreement {
display: flex;
- align-items: center;
+ align-items: flex-start;
gap: 8px;
+ margin: 12px 0 16px;
}
.login-agreement-check {