From 9ababfda462b1b77bc6e90052729c811f6953fff Mon Sep 17 00:00:00 2001 From: ludan <251918489@qq.com> Date: Tue, 2 Jun 2026 18:18:00 +0800 Subject: [PATCH 1/7] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=89=A7=E6=9C=AC?= =?UTF-8?q?=E8=AF=84=E5=88=86=E6=96=87=E6=9C=AC=E6=A1=86=E9=9A=8F=E5=86=85?= =?UTF-8?q?=E5=AE=B9=E6=97=A0=E9=99=90=E4=B8=8B=E6=8B=89=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E8=A2=AB=E6=8C=A4=E5=87=BA=E8=A7=86=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - textarea 增加 max-height 限制高度不随内容增长 - textarea 增加 overflow-y: auto 启用内部滚动 - text-shell 同步增加 max-height 约束 --- src/styles/pages/script-tokens.css | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/styles/pages/script-tokens.css b/src/styles/pages/script-tokens.css index 488dba1..ff90426 100644 --- a/src/styles/pages/script-tokens.css +++ b/src/styles/pages/script-tokens.css @@ -3400,6 +3400,7 @@ width: 100%; height: 100%; min-height: 520px; + max-height: 520px; padding: 18px 22px; border: none; outline: none; @@ -3409,6 +3410,7 @@ font-size: 14px; line-height: 1.9; resize: none; + overflow-y: auto; } .script-eval-v4-text-input::placeholder { @@ -4268,6 +4270,11 @@ .script-eval-v4-text-shell, .script-eval-v4-text-input { min-height: calc(100vh - 422px); + max-height: calc(100vh - 422px); +} + +.script-eval-v4-text-input { + overflow-y: auto; } .script-eval-v4-score-card { -- 2.52.0 From 324ebf5ce5ba4003d8b6e7145ccb4888c98c4b72 Mon Sep 17 00:00:00 2001 From: ludan <251918489@qq.com> Date: Tue, 2 Jun 2026 19:09:00 +0800 Subject: [PATCH 2/7] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E9=A6=96?= =?UTF-8?q?=E9=A1=B5=E5=85=A5=E5=8F=A3=E6=8C=89=E9=92=AE=E8=B4=A8=E6=84=9F?= =?UTF-8?q?=EF=BC=8C=E6=8F=90=E5=8D=87=E5=95=86=E4=B8=9A=E4=BA=A7=E5=93=81?= =?UTF-8?q?=E7=B2=BE=E8=87=B4=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 按钮背景改为微渐变+毛玻璃效果(backdrop-filter) - 边框改为半透明白色,圆角从8px升级到12px - 增加内高光+外层深度阴影提升层次感 - 字间距、字重大小幅调整,更精致克制 - hover态增加accent光晕+图标变绿+放大效果 - 主按钮增加渐变绿底+内高光+绿色辉光阴影 - 增加按压态scale(0.97)反馈 - 主按钮图标hover放大1.12倍 --- src/styles/pages/home.css | 78 +++++++++++++++++++++++++++++++-------- 1 file changed, 62 insertions(+), 16 deletions(-) diff --git a/src/styles/pages/home.css b/src/styles/pages/home.css index 15513d5..87c3155 100644 --- a/src/styles/pages/home.css +++ b/src/styles/pages/home.css @@ -148,37 +148,83 @@ min-width: 0; min-height: 72px; padding: 0 28px; - border: 1px solid var(--border-subtle); - border-radius: 8px; - background: var(--bg-inset); + border: 1px solid rgba(255, 255, 255, 0.08); + border-radius: 12px; + background: linear-gradient(180deg, rgba(20, 23, 26, 0.72) 0%, rgba(15, 17, 19, 0.84) 100%); + backdrop-filter: blur(12px); + -webkit-backdrop-filter: blur(12px); + box-shadow: + 0 1px 0 rgba(255, 255, 255, 0.04) inset, + 0 2px 8px rgba(0, 0, 0, 0.28); color: var(--fg-body); cursor: pointer; - font-size: 17px; - font-weight: 850; - transition: border-color 160ms ease, background 160ms ease, color 160ms ease, transform 160ms ease; + font-size: 16px; + font-weight: 700; + letter-spacing: 0.03em; + transition: + border-color 240ms ease, + background 240ms ease, + color 240ms ease, + transform 240ms cubic-bezier(0.34, 1.2, 0.64, 1), + box-shadow 240ms ease; } .omni-home__entry .anticon { - font-size: 18px; + font-size: 19px; + transition: color 240ms ease, transform 240ms ease; } .omni-home__entry:hover { - border-color: var(--border-default); - background: var(--bg-hover); + border-color: rgba(255, 255, 255, 0.16); + background: linear-gradient(180deg, rgba(28, 32, 36, 0.78) 0%, rgba(18, 22, 25, 0.88) 100%); + box-shadow: + 0 1px 0 rgba(255, 255, 255, 0.06) inset, + 0 0 24px rgba(var(--accent-rgb), 0.06), + 0 4px 16px rgba(0, 0, 0, 0.36); color: #ffffff; - transform: translateY(-1px); + transform: translateY(-2px); +} + +.omni-home__entry:hover .anticon { + color: var(--accent); + transform: scale(1.08); +} + +.omni-home__entry:active { + transform: translateY(0) scale(0.97); + box-shadow: + 0 1px 0 rgba(255, 255, 255, 0.02) inset, + 0 1px 4px rgba(0, 0, 0, 0.32); + transition-duration: 80ms; } .omni-home__entry--primary { - border-color: var(--accent); - background: var(--accent); - color: var(--dg-button-text, #061014); + border-color: rgba(var(--accent-rgb), 0.48); + background: linear-gradient(180deg, rgba(0, 255, 136, 0.22) 0%, rgba(0, 220, 118, 0.14) 100%), var(--accent); + box-shadow: + 0 1px 0 rgba(255, 255, 255, 0.12) inset, + 0 0 28px rgba(var(--accent-rgb), 0.18), + 0 2px 12px rgba(0, 0, 0, 0.28); + color: #061014; } .omni-home__entry--primary:hover { - border-color: var(--accent-hover, var(--accent)); - background: var(--accent-hover, var(--accent)); - color: var(--dg-button-text, #061014); + border-color: rgba(var(--accent-rgb), 0.64); + background: linear-gradient(180deg, rgba(0, 255, 136, 0.28) 0%, rgba(0, 230, 124, 0.18) 100%), var(--accent-hover); + box-shadow: + 0 1px 0 rgba(255, 255, 255, 0.16) inset, + 0 0 40px rgba(var(--accent-rgb), 0.28), + 0 6px 24px rgba(0, 0, 0, 0.36); + color: #061014; +} + +.omni-home__entry--primary .anticon { + color: #061014; +} + +.omni-home__entry--primary:hover .anticon { + color: #061014; + transform: scale(1.12); } .omni-home__carousel { -- 2.52.0 From 87d81d2c864058225c0cc1e77981665484739f13 Mon Sep 17 00:00:00 2001 From: ludan <251918489@qq.com> Date: Wed, 3 Jun 2026 09:53:05 +0800 Subject: [PATCH 3/7] =?UTF-8?q?feat:=20=E4=B8=AA=E4=BA=BA=E4=B8=AD?= =?UTF-8?q?=E5=BF=83=E7=95=8C=E9=9D=A2UI=E4=BC=98=E5=8C=96=EF=BC=8C?= =?UTF-8?q?=E6=8F=90=E5=8D=87=E5=95=86=E4=B8=9A=E4=BA=A7=E5=93=81=E7=B2=BE?= =?UTF-8?q?=E8=87=B4=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ProfilePage组件优化: - 新增个性签名编辑功能(内联编辑/确认/取消交互) - 新增 icon 导入(EditOutlined, CheckOutlined, CloseOutlined) - 新增 formatProfileDate 工具函数,统一日期格式化(中文友好) - 新增 formatTaskType 函数,任务类型中文化显示 - 新增 formatTaskStatus 函数,任务状态中文化显示 - 新增 formatAssetStatus 函数,资产状态中文化显示 - 优化空状态展示,增加图标占位 dark-green主题层样式增强: - 个人中心背景增加微光渐变(accent光晕+半透明遮罩) - Banner区域高度优化为214px,增加底部渐变分割线 - Banner叠加层增加径向光晕效果 - Banner编辑按钮增加毛玻璃质感(backdrop-filter) - 侧边栏/主体/选项卡/列表卡片等多处细节增强 - 按钮、标签、统计数字等组件加入微交互 - 保持暗绿主题配色体系不变,仅提升精致度 --- src/features/profile/ProfilePage.tsx | 154 +++++- src/styles/themes/dark-green.css | 781 +++++++++++++++++++++++++++ 2 files changed, 912 insertions(+), 23 deletions(-) diff --git a/src/features/profile/ProfilePage.tsx b/src/features/profile/ProfilePage.tsx index 9a06565..e443091 100644 --- a/src/features/profile/ProfilePage.tsx +++ b/src/features/profile/ProfilePage.tsx @@ -1,7 +1,10 @@ import { CameraOutlined, + CheckOutlined, CheckCircleFilled, + CloseOutlined, DeleteOutlined, + EditOutlined, LockOutlined, MailOutlined, MobileOutlined, @@ -135,6 +138,48 @@ function mapAssetToSavedItem(asset: Awaited> }; } +function formatProfileDate(value: string | null | undefined): string { + if (!value) return "刚刚"; + const date = new Date(value); + if (Number.isNaN(date.getTime())) return value; + + return new Intl.DateTimeFormat("zh-CN", { + month: "numeric", + day: "numeric", + hour: "2-digit", + minute: "2-digit", + }).format(date); +} + +function formatTaskType(type: WebGenerationPreviewTask["type"]): string { + const labels: Record = { + image: "图像", + video: "视频", + agent: "智能体", + "digital-human": "数字人", + "character-mix": "角色融合", + }; + return labels[type] || type; +} + +function formatTaskStatus(status: WebGenerationPreviewTask["status"]): string { + const labels: Record = { + queued: "排队中", + running: "生成中", + completed: "已完成", + failed: "失败", + }; + return labels[status] || status; +} + +function formatAssetStatus(status: string | undefined): string { + const normalized = String(status || "").toLowerCase(); + if (normalized === "completed" || normalized === "ready" || normalized === "success") return "可用"; + if (normalized === "running" || normalized === "processing") return "处理中"; + if (normalized === "failed" || normalized === "error") return "失败"; + return status || "资产"; +} + function ProfilePage({ session, usage, @@ -182,6 +227,9 @@ function ProfilePage({ const [profileNotice, setProfileNotice] = useState(null); const [localAvatarUrl, setLocalAvatarUrl] = useState(() => session?.user.avatarUrl || readLocalProfileValue(userId, "avatar")); const [profileBio, setProfileBio] = useState(() => session?.user.bio || readLocalProfileValue(userId, "bio")); + const [isBioEditing, setIsBioEditing] = useState(false); + const [bioEditBackup, setBioEditBackup] = useState(""); + const [bioStatusNotice, setBioStatusNotice] = useState(null); const [bannerUrl, setBannerUrl] = useState(() => session?.user.backgroundUrl || readLocalProfileValue(userId, "background")); const completedTasks = tasks.filter((task) => task.status === "completed"); @@ -497,8 +545,29 @@ function ProfilePage({ void syncProfilePatch({ bio: nextBio || null }); }; + const startBioEdit = () => { + setBioEditBackup(profileBio); + setBioStatusNotice(null); + setIsBioEditing(true); + }; + + const confirmBioEdit = () => { + handleBioBlur(); + setIsBioEditing(false); + setBioStatusNotice("个性签名已保存"); + }; + + const cancelBioEdit = () => { + setProfileBio(bioEditBackup); + setIsBioEditing(false); + setBioStatusNotice(null); + }; + const renderEmptyState = (text: string, actionLabel: string, action: () => void) => (
+

{text}

{displayName} -