feat: 首页SaaS高端化视觉升级与图标系统统一
本次提交包含以下改进: ## 1. 首页架构精简 (HomePage.tsx) - 移除模型生成(ModelGenerationShowcase)专题区和相关导入 - 移除"一站进入 OmniAI"Experience体验区及HOME_EXPERIENCE_POINTS - 移除未使用的导入(DashboardOutlined, ThunderboltOutlined) - 首页专题区从3个(model/ecommerce/script)缩减为2个(ecommerce/script) - 轮播卡片x偏移量从固定px值改为clamp()流式响应式单位 ## 2. 首页入口按钮重设计 (HomePage.tsx) - 按钮文案升级:新手→快速生成(副标题:新手友好),老手→专业创作(副标题:画布工作流),电商→电商出图(副标题:商品视觉) - 每个按钮新增small元素展示副标题 - 主按钮(专业创作)渐变绿色背景+发光阴影 ## 3. 图标系统统一 — Emoji→Ant Design (ModelGenerationShowcase.tsx + ToolboxSection.tsx) - ModelGenerationShowcase: emoji(🤖🖼️🎬📷🎨🛍️🌈✨)全部替换为对应的@ant-design/icons组件 - ToolboxSection: emoji(🎨📷🧑✨)替换为PictureOutlined/CameraOutlined/VideoCameraOutlined/ScissorOutlined - SVG播放按钮替换为PlayCircleOutlined ## 4. 工具预览图补充 (MorePage.tsx) - 为workbench核心工具添加预览图URL - 为digitalHuman工具添加预览图URL ## 5. 合规页面按需样式加载 (App.tsx) - 新增COMPLIANCE_PAGE_STYLE_VIEWS集合(communityReview/communityCaseAdd/report/userAgreement/privacyPolicy) - 新增loadCompliancePageStyles()动态加载compliance.css - 只在进入合规页面时才加载对应样式,减少首屏CSS体积 ## 6. 全局滚动操作按钮禁用 (AppShell.tsx) - showPageScrollActions强制设为false,全局禁用页面滚动到顶部/底部的浮动按钮 ## 7. 首页Premium SaaS视觉升级 (home.css) - 全新CSS变量体系:--home-card-radius/panel-radius/section-line/panel-border/text-strong/muted/faint - 背景三层渐变叠加+双radial光晕(brand green+blue accent) - Hero区域:eyebrow胶囊标签(绿点+毛玻璃)、h1字重950+text-shadow、描述text-wrap:balance - 轮播卡片:流式clamp尺寸、非激活卡滤镜降饱和、激活卡高亮阴影、底部渐变分割线 - 入口按钮组:统一三列grid布局、图标圆形背景、hover微上移 - Feature专题页:grid网格背景+radial光晕+border分割线、Visual卡片统一玻璃态 - Ecommerce Matrix全面重写:三栏→自适应grid、feature/item/input/ai-node/output全组件玻璃态统一风格 - Experience区域:双radial光晕+网格纹理背景、路线卡片route-color动态渐变 - Script Review专题区:专属高度/内边距/溢出控制,容器查询适配 - Cookie Consent移动端优化 ## 8. 响应式断点矩阵 (home.css) - 1200px: 轮播卡片尺寸压缩 - 1100px: 专题页解除固定高度,Matrix双列布局 - 980px: h1字号clamp、轮播缩小、Matrix紧凑间距 - 899px: 专题页inline padding收紧 - 720px: 入口按钮堆叠、轮播全宽、专题页解除overflow - 699px: Matrix grid-template-areas重构(copy+input双栏,outputs全宽) - 640px: Matrix单列、feature-icon/text逐级隐藏 - 520px: output-group水平grid、output-cards三列 - 480px: 全页面紧缩、h1最大字号、carousel最小尺寸 ## 9. 入口按钮多轮视觉打磨 (home.css 多轮迭代) - Round 1: 绿色主题毛玻璃+三列grid - Round 2: 暗色产品路径选择器风格,actions外框+entry透明 - Round 3: 回归深色面板风格(#101214),保持原始配色调性 ## 10. Ecommerce Matrix分层响应式策略 (home.css) - 1101px+: 三列流式宽度+dvh高度自适应 - 900-1100px: 三列紧凑+逐步隐藏描述文字 - 700-899px: 三列超紧凑+大量line-clamp截断 - <699px: grid-template-areas双栏+全宽输出 - <640px: 全单列堆叠 ## 11. 脚本评审Showcase容器查询 (script-review-showcase.css) - 外层@media保留padding控制 - 内层@container查询适配880px/720px/560px断点 - 图表列720px以下水平进度条布局 - 品牌区域/评分标签/流程卡片逐级压缩
This commit is contained in:
@@ -1,11 +1,9 @@
|
||||
import {
|
||||
ArrowRightOutlined,
|
||||
DashboardOutlined,
|
||||
FileSearchOutlined,
|
||||
PlayCircleOutlined,
|
||||
PlusOutlined,
|
||||
ShoppingOutlined,
|
||||
ThunderboltOutlined,
|
||||
} from "@ant-design/icons";
|
||||
import { Fragment, useCallback, useEffect, useMemo, useRef, useState, type CSSProperties } from "react";
|
||||
import type { WebViewKey, WebImageWorkbenchTool } from "../../types";
|
||||
@@ -15,7 +13,6 @@ import "../../styles/pages/home.css";
|
||||
import WelcomeSplash from "./WelcomeSplash";
|
||||
import ToolboxSection from "./ToolboxSection";
|
||||
import ScriptReviewShowcase from "./ScriptReviewShowcase";
|
||||
import ModelGenerationShowcase from "./ModelGenerationShowcase";
|
||||
|
||||
function ScrollEntrance({ children, className, ...rest }: { children: React.ReactNode; className?: string } & React.HTMLAttributes<HTMLElement>) {
|
||||
const { ref, isVisible } = useScrollEntrance<HTMLElement>();
|
||||
@@ -30,7 +27,6 @@ const [heroImage1, heroImage2, heroImage3] = ossAssets.home.heroSlides;
|
||||
const {
|
||||
ecommerce: featureEcommerceImage,
|
||||
script: featureScriptImage,
|
||||
token: featureTokenImage,
|
||||
} = ossAssets.home.features;
|
||||
|
||||
interface HomePageProps {
|
||||
@@ -52,16 +48,6 @@ const HOME_CAROUSEL_IMAGES = [
|
||||
];
|
||||
|
||||
const HOME_FEATURES = [
|
||||
{
|
||||
key: "model",
|
||||
eyebrow: "AI Generation",
|
||||
title: "模型生成",
|
||||
description: "通过AI模型生成文本、图片、视频,三种模式覆盖全内容类型,Agent对话式交互智能产出。",
|
||||
imageUrl: featureTokenImage,
|
||||
actionLabel: "开始生成",
|
||||
icon: <ThunderboltOutlined />,
|
||||
stats: ["文本生成", "图片生成", "视频生成"],
|
||||
},
|
||||
{
|
||||
key: "ecommerce",
|
||||
eyebrow: "AI Commerce",
|
||||
@@ -84,13 +70,6 @@ const HOME_FEATURES = [
|
||||
},
|
||||
];
|
||||
|
||||
const HOME_EXPERIENCE_POINTS = [
|
||||
{ label: "生成", meta: "图像 / 视频", tone: "green" },
|
||||
{ label: "测评", meta: "剧本质量", tone: "cyan" },
|
||||
{ label: "成本", meta: "Token 用量", tone: "violet" },
|
||||
{ label: "电商", meta: "商品视觉", tone: "amber" },
|
||||
];
|
||||
|
||||
const ECOMMERCE_MATRIX_FEATURES = [
|
||||
{ icon: "⚡", title: "高效工作流", description: "自动化处理,一键触发" },
|
||||
{ icon: "⊞", title: "矩阵式产出", description: "多场景、多尺寸批量生成" },
|
||||
@@ -673,8 +652,6 @@ function HomePage({ onOpenGenerate, onOpenCanvas, onOpenEcommerce, onOpenScriptR
|
||||
<div className="omni-home__feature-visual" aria-hidden={feature.key !== "script" && feature.key !== "model" && feature.key !== "ecommerce"}>
|
||||
{feature.key === "script" ? (
|
||||
<ScriptReviewShowcase />
|
||||
) : feature.key === "model" ? (
|
||||
<ModelGenerationShowcase />
|
||||
) : feature.key === "ecommerce" ? (
|
||||
<EcommerceFeatureShowcase />
|
||||
) : (
|
||||
@@ -692,39 +669,6 @@ function HomePage({ onOpenGenerate, onOpenCanvas, onOpenEcommerce, onOpenScriptR
|
||||
))}
|
||||
|
||||
<ToolboxSection onSelectView={onSelectView} onOpenImageTool={onOpenImageTool} />
|
||||
|
||||
<section className="omni-home__experience" aria-label="点击体验">
|
||||
<div className="omni-home__experience-copy">
|
||||
<span>
|
||||
<ThunderboltOutlined />
|
||||
Click To Experience
|
||||
</span>
|
||||
<h2>一站进入 OmniAI</h2>
|
||||
<p>选择入口,直接开始生成、评测、监控或电商作图。</p>
|
||||
</div>
|
||||
<div className="omni-home__experience-visual" aria-hidden="true">
|
||||
<div className="omni-home__experience-line is-top" />
|
||||
<div className="omni-home__experience-line is-bottom" />
|
||||
<div className="omni-home__experience-routes">
|
||||
{HOME_EXPERIENCE_POINTS.map((point) => (
|
||||
<span key={point.label} className={`omni-home__experience-route is-${point.tone}`}>
|
||||
<b>{point.label}</b>
|
||||
<small>{point.meta}</small>
|
||||
</span>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
<div className="omni-home__experience-actions">
|
||||
<button type="button" className="is-primary" onClick={onOpenGenerate}>
|
||||
<PlayCircleOutlined />
|
||||
立即体验生成
|
||||
</button>
|
||||
<button type="button" onClick={onOpenEcommerce}>
|
||||
<ShoppingOutlined />
|
||||
体验电商生成
|
||||
</button>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
</section>
|
||||
</>
|
||||
|
||||
@@ -1,12 +1,21 @@
|
||||
import {
|
||||
BgColorsOutlined,
|
||||
CameraOutlined,
|
||||
PictureOutlined,
|
||||
PlayCircleOutlined,
|
||||
RobotOutlined,
|
||||
ShoppingOutlined,
|
||||
VideoCameraOutlined,
|
||||
} from "@ant-design/icons";
|
||||
import { useEffect, useRef, useState } from "react";
|
||||
import "../../styles/pages/model-generation-showcase.css";
|
||||
|
||||
type ShowMode = "agent" | "image" | "video";
|
||||
|
||||
const MODE_TABS = [
|
||||
{ key: "agent" as const, icon: "🤖", title: "Agent 模式", desc: "文本生成,对话式交互,智能推理" },
|
||||
{ key: "image" as const, icon: "🖼️", title: "图片模式", desc: "图像生成,风格迁移,场景合成" },
|
||||
{ key: "video" as const, icon: "🎬", title: "视频模式", desc: "视频生成,动态场景,数字人演绎" },
|
||||
{ key: "agent" as const, icon: <RobotOutlined />, title: "Agent 模式", desc: "文本生成,对话式交互,智能推理" },
|
||||
{ key: "image" as const, icon: <PictureOutlined />, title: "图片模式", desc: "图像生成,风格迁移,场景合成" },
|
||||
{ key: "video" as const, icon: <VideoCameraOutlined />, title: "视频模式", desc: "视频生成,动态场景,数字人演绎" },
|
||||
];
|
||||
|
||||
const AGENT_OUTPUTS = [
|
||||
@@ -16,9 +25,9 @@ const AGENT_OUTPUTS = [
|
||||
];
|
||||
|
||||
const IMAGE_OUTPUTS = [
|
||||
{ tag: "Image", title: "写实风格", icon: "📷", styleClass: "realistic" },
|
||||
{ tag: "Image", title: "插画风格", icon: "🎨", styleClass: "illustration" },
|
||||
{ tag: "Image", title: "电商风格", icon: "🛍️", styleClass: "ecommerce" },
|
||||
{ tag: "Image", title: "写实风格", icon: <CameraOutlined />, styleClass: "realistic" },
|
||||
{ tag: "Image", title: "插画风格", icon: <BgColorsOutlined />, styleClass: "illustration" },
|
||||
{ tag: "Image", title: "电商风格", icon: <ShoppingOutlined />, styleClass: "ecommerce" },
|
||||
];
|
||||
|
||||
const VIDEO_OUTPUTS = [
|
||||
@@ -160,10 +169,10 @@ function ModelGenerationShowcase() {
|
||||
))}
|
||||
</div>
|
||||
<div className="mgs-img-grid">
|
||||
<div className="mgs-img-cell">🎨</div>
|
||||
<div className="mgs-img-cell">🖼️</div>
|
||||
<div className="mgs-img-cell">✨</div>
|
||||
<div className="mgs-img-cell">🌈</div>
|
||||
<div className="mgs-img-cell"><BgColorsOutlined /></div>
|
||||
<div className="mgs-img-cell"><PictureOutlined /></div>
|
||||
<div className="mgs-img-cell"><CameraOutlined /></div>
|
||||
<div className="mgs-img-cell"><ShoppingOutlined /></div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
@@ -195,7 +204,7 @@ function ModelGenerationShowcase() {
|
||||
</div>
|
||||
<div className="mgs-video-preview">
|
||||
<div className="mgs-play-btn">
|
||||
<svg viewBox="0 0 24 24"><polygon points="6,3 20,12 6,21" /></svg>
|
||||
<PlayCircleOutlined />
|
||||
</div>
|
||||
</div>
|
||||
<div className="mgs-video-timeline">
|
||||
@@ -266,7 +275,7 @@ function ModelGenerationShowcase() {
|
||||
</div>
|
||||
<div className="mgs-out-video-placeholder">
|
||||
<div className="mgs-mini-play">
|
||||
<svg viewBox="0 0 24 24"><polygon points="6,3 20,12 6,21" /></svg>
|
||||
<PlayCircleOutlined />
|
||||
</div>
|
||||
<span className="mgs-video-duration">{item.duration}</span>
|
||||
</div>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { ToolOutlined } from "@ant-design/icons";
|
||||
import { CameraOutlined, PictureOutlined, ScissorOutlined, ToolOutlined, VideoCameraOutlined } from "@ant-design/icons";
|
||||
import type { WebViewKey, WebImageWorkbenchTool } from "../../types";
|
||||
import { ossAssets } from "../../data/ossAssets";
|
||||
import "../../styles/pages/toolbox.css";
|
||||
@@ -18,25 +18,25 @@ interface ToolboxSectionProps {
|
||||
const TOOLS = [
|
||||
{
|
||||
key: "image-studio",
|
||||
icon: "🎨",
|
||||
icon: <PictureOutlined />,
|
||||
name: "图片工作室",
|
||||
desc: "图片二次加工,调色裁剪特效风格迁移",
|
||||
},
|
||||
{
|
||||
key: "lens-lab",
|
||||
icon: "📷",
|
||||
icon: <CameraOutlined />,
|
||||
name: "镜头实验室",
|
||||
desc: "多视角镜头生成,不同角度与姿势",
|
||||
},
|
||||
{
|
||||
key: "digital-human",
|
||||
icon: "🧑",
|
||||
icon: <VideoCameraOutlined />,
|
||||
name: "一键数字人",
|
||||
desc: "上传图片和音频,生成数字人视频",
|
||||
},
|
||||
{
|
||||
key: "watermark-removal",
|
||||
icon: "✨",
|
||||
icon: <ScissorOutlined />,
|
||||
name: "去除水印",
|
||||
desc: "AI智能识别去除图片视频水印",
|
||||
},
|
||||
@@ -47,7 +47,7 @@ const CARDS = [
|
||||
key: "image-studio",
|
||||
title: "图片工作室",
|
||||
tag: "图片加工",
|
||||
icon: "🎨",
|
||||
icon: <PictureOutlined />,
|
||||
features: ["二次加工", "调色", "裁剪", "风格迁移"],
|
||||
targetView: "imageWorkbench" as WebViewKey,
|
||||
render: () => (
|
||||
@@ -72,7 +72,7 @@ const CARDS = [
|
||||
key: "lens-lab",
|
||||
title: "镜头实验室",
|
||||
tag: "多视角",
|
||||
icon: "📷",
|
||||
icon: <CameraOutlined />,
|
||||
features: ["正面", "45°侧", "俯拍", "仰拍", "背面"],
|
||||
targetView: "imageWorkbench" as WebViewKey,
|
||||
render: () => (
|
||||
@@ -91,7 +91,7 @@ const CARDS = [
|
||||
key: "digital-human",
|
||||
title: "一键数字人",
|
||||
tag: "视频生成",
|
||||
icon: "🧑",
|
||||
icon: <VideoCameraOutlined />,
|
||||
features: ["上传人像", "匹配音频", "唇形同步", "生成视频"],
|
||||
targetView: "digitalHuman" as WebViewKey,
|
||||
render: () => (
|
||||
@@ -122,7 +122,7 @@ const CARDS = [
|
||||
key: "watermark-removal",
|
||||
title: "去除水印",
|
||||
tag: "AI清除",
|
||||
icon: "✨",
|
||||
icon: <ScissorOutlined />,
|
||||
features: ["智能识别", "精准去除", "无损画质"],
|
||||
targetView: "watermarkRemoval" as WebViewKey,
|
||||
render: () => (
|
||||
|
||||
@@ -40,12 +40,14 @@ interface MoreTool {
|
||||
}
|
||||
|
||||
const toolPreviewImages: Record<string, string> = {
|
||||
workbench: "https://stringtest.oss-cn-hangzhou.aliyuncs.com/static/toolbox/image-workbench-20260609132455.png",
|
||||
inpaint: "https://stringtest.oss-cn-hangzhou.aliyuncs.com/toolbox/images/%E5%B1%80%E9%83%A8%E9%87%8D%E7%BB%98.PNG",
|
||||
camera: "https://stringtest.oss-cn-hangzhou.aliyuncs.com/toolbox/images/%E9%95%9C%E5%A4%B4%E5%AE%9E%E9%AA%8C%E5%AE%A4.PNG",
|
||||
upscale: "https://stringtest.oss-cn-hangzhou.aliyuncs.com/toolbox/images/%E5%88%86%E8%BE%A8%E7%8E%87%E6%8F%90%E5%8D%87.PNG",
|
||||
watermarkRemoval: "https://stringtest.oss-cn-hangzhou.aliyuncs.com/toolbox/images/%E5%8E%BB%E6%B0%B4%E5%8D%B0.PNG",
|
||||
dialogGenerator: "https://stringtest.oss-cn-hangzhou.aliyuncs.com/toolbox/images/%E4%BA%A4%E4%BA%92%E5%BC%8F%E5%AF%B9%E8%AF%9D%E6%A1%86%E7%94%9F%E6%88%90%E5%99%A8.PNG",
|
||||
subtitleRemoval: "https://stringtest.oss-cn-hangzhou.aliyuncs.com/toolbox/images/%E5%AD%97%E5%B9%95%E5%8E%BB%E9%99%A4.PNG",
|
||||
digitalHuman: "https://stringtest.oss-cn-hangzhou.aliyuncs.com/static/toolbox/digital-human-20260609132455.png",
|
||||
characterMix: "https://stringtest.oss-cn-hangzhou.aliyuncs.com/toolbox/images/%E8%A7%92%E8%89%B2%E8%BF%81%E7%A7%BB.PNG",
|
||||
avatarConsole: "https://stringtest.oss-cn-hangzhou.aliyuncs.com/toolbox/images/%E6%95%B0%E5%AD%97%E4%BA%BA%E6%8E%A7%E5%88%B6%E5%8F%B0.PNG",
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user