From f0f6f66d608f88a4d0ca631ac18c63aacd9687c0 Mon Sep 17 00:00:00 2001 From: ludan <251918489@qq.com> Date: Wed, 3 Jun 2026 15:38:52 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=99=BB=E5=BD=95=E6=B3=A8=E5=86=8C?= =?UTF-8?q?=E8=A1=A8=E5=8D=95=E4=BD=93=E9=AA=8C=E4=BC=98=E5=8C=96=E3=80=81?= =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E5=8F=B0=E6=BB=9A=E5=8A=A8=E6=8C=89=E9=92=AE?= =?UTF-8?q?=E4=BA=A4=E4=BA=92=E5=A2=9E=E5=BC=BA=E3=80=81=E4=B8=BB=E9=A2=98?= =?UTF-8?q?=E5=B1=82=E8=A7=86=E8=A7=89=E7=B2=BE=E4=BF=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ProfilePage.tsx(登录/注册表单优化): - 新增邮箱格式、手机号、密码强度前端校验逻辑 - 输入框内联校验提示(CheckCircleFilled图标+绿色文字) - 登录态展示区增加平台能力Stats(Studio/Assets/Team) - 表单增加kicker标签区分"账户登录"/"新用户注册" - 手机验证码tab标签精简为"手机" WorkbenchPage.tsx(工作台滚动交互增强): - 新增滚动操作按钮显隐状态管理(scrollActionsVisible/direction) - 滚动时自动展示上下滚动按钮,950ms后自动隐藏 - scrollMessagesToLatest触发时间接展示滚动按钮 - 组件卸载时清理定时器避免内存泄漏 dark-green.css(主题层视觉精修): - 工作台激活态页面背景增加微光渐变和径向光晕 - 消息表面区域增加内边距和scrollbar-gutter稳定布局 - 消息列表最大宽度约束为1040px,左右padding自适应 - 消息气泡增加边框、背景、阴影层次感 - AI助手气泡与用户气泡差异化背景色 - 头像增加微边框和accent色区分 - 作者标签字号和颜色精细调整 --- src/features/profile/ProfilePage.tsx | 62 +- src/features/workbench/WorkbenchPage.tsx | 44 +- src/styles/themes/dark-green.css | 1443 +++++++++++++++++++++- 3 files changed, 1531 insertions(+), 18 deletions(-) diff --git a/src/features/profile/ProfilePage.tsx b/src/features/profile/ProfilePage.tsx index 3add68c..fa509d9 100644 --- a/src/features/profile/ProfilePage.tsx +++ b/src/features/profile/ProfilePage.tsx @@ -235,6 +235,9 @@ function ProfilePage({ const packageLabel = session?.user.activePackages?.[0]?.name || "按量积分"; const avatarUrl = session?.user.avatarUrl || localAvatarUrl || null; const displayedBio = profileBio.trim() || "这个人还没有填写个性签名"; + const emailLooksValid = /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email.trim()); + const phoneLooksValid = /^1[3-9]\d{9}$/.test(phone.trim()); + const passwordLooksReady = password.length >= (mode === "register" ? 6 : 1); useEffect(() => { setLocalAvatarUrl(session?.user.avatarUrl || readLocalProfileValue(userId, "avatar")); @@ -812,12 +815,30 @@ function ProfilePage({
一句话,从创意到成片
{mode === "login" ? "登录后继续你的 AI 创作之旅" : "注册即可免费体验全部功能"} @@ -868,7 +890,8 @@ function ProfilePage({ 邮箱 { setAuthTab("phone"); setFieldErrors({}); }}> - 手机验证码 + + 手机 @@ -924,6 +947,11 @@ function ProfilePage({ autoComplete={mode === "login" ? "current-password" : "new-password"} /> {fieldErrors.password ? {fieldErrors.password} : null} + {mode === "register" && passwordLooksReady && !fieldErrors.password ? ( + + 密码长度符合要求 + + ) : null} {mode === "login" ? (