From d819cecfc683a1d8e3b2d4ad8fad81b74ed2d4e4 Mon Sep 17 00:00:00 2001 From: Codex Date: Wed, 17 Jun 2026 11:33:36 +0800 Subject: [PATCH 01/12] fix(ecommerce): restore quick action colors for product/copywriting/more MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add missing --quick-accent/--quick-bg/--quick-text variables for - product (商品套图) - copywriting (一键文案) - more (更多功能) --- src/styles/ecommerce-standalone.css | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/styles/ecommerce-standalone.css b/src/styles/ecommerce-standalone.css index a38e487..c42ad74 100644 --- a/src/styles/ecommerce-standalone.css +++ b/src/styles/ecommerce-standalone.css @@ -12168,6 +12168,24 @@ html body #root .ecommerce-standalone.ecommerce-standalone .product-clone-page[d --quick-shadow: rgba(232, 89, 12, 0.1); } +html body #root .ecommerce-standalone.ecommerce-standalone .product-clone-page[data-tool="clone"][data-tool="clone"] .ecom-command-quick-board .ecom-command-quick-card--product { + --quick-accent: #0f8f72; + --quick-bg: #e6f7f3; + --quick-text: #0a4d3d; +} + +html body #root .ecommerce-standalone.ecommerce-standalone .product-clone-page[data-tool="clone"][data-tool="clone"] .ecom-command-quick-board .ecom-command-quick-card--copywriting { + --quick-accent: #4f46e5; + --quick-bg: #eef2ff; + --quick-text: #312e81; +} + +html body #root .ecommerce-standalone.ecommerce-standalone .product-clone-page[data-tool="clone"][data-tool="clone"] .ecom-command-quick-board .ecom-command-quick-card--more { + --quick-accent: #6b7280; + --quick-bg: #f3f4f6; + --quick-text: #374151; +} + html body #root .ecommerce-standalone.ecommerce-standalone .product-clone-page[data-tool="clone"][data-tool="clone"] .ecom-command-quick-board, html body #root .ecommerce-standalone.ecommerce-standalone .product-clone-page[data-tool="clone"][data-tool="clone"] .ecom-command-quick-board button, html body #root .ecommerce-standalone.ecommerce-standalone .product-clone-page[data-tool="clone"][data-tool="clone"] .ecom-command-quick-board button > span, From 98acb79a200128889564e7525ce60d1641d5b25a Mon Sep 17 00:00:00 2001 From: Codex Date: Wed, 17 Jun 2026 11:51:14 +0800 Subject: [PATCH 02/12] fix(ecommerce): align product set count stepper with local light theme Add local-theme-parity overrides for .clone-ai-count-stepper container and count value so they match the page's light palette. --- src/styles/pages/local-theme-parity.css | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/styles/pages/local-theme-parity.css b/src/styles/pages/local-theme-parity.css index 884189d..4e257ee 100644 --- a/src/styles/pages/local-theme-parity.css +++ b/src/styles/pages/local-theme-parity.css @@ -371,3 +371,14 @@ border-color: rgba(var(--accent-rgb), 0.42); background: var(--bg-panel); } + +/* ── Product set count stepper: align with local light theme ── */ +.product-clone-page[data-tool="clone"] .clone-ai-count-stepper { + border-color: var(--border-subtle); + background: var(--bg-inset); + color: var(--fg-body); +} + +.product-clone-page[data-tool="clone"] .clone-ai-count-stepper b { + color: var(--fg-body); +} From 65be92ba430004874d67c1916e4e1ad715e69c6d Mon Sep 17 00:00:00 2001 From: Codex Date: Wed, 17 Jun 2026 11:56:30 +0800 Subject: [PATCH 03/12] fix(ecommerce): strengthen product set count stepper theme override Use html body #root .ecommerce-standalone prefix and !important to ensure the stepper matches the local light theme. --- src/styles/pages/local-theme-parity.css | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/styles/pages/local-theme-parity.css b/src/styles/pages/local-theme-parity.css index 4e257ee..b5fda92 100644 --- a/src/styles/pages/local-theme-parity.css +++ b/src/styles/pages/local-theme-parity.css @@ -373,12 +373,12 @@ } /* ── Product set count stepper: align with local light theme ── */ -.product-clone-page[data-tool="clone"] .clone-ai-count-stepper { - border-color: var(--border-subtle); - background: var(--bg-inset); - color: var(--fg-body); +html body #root .ecommerce-standalone .product-clone-page[data-tool="clone"] .clone-ai-count-stepper { + border-color: var(--border-subtle) !important; + background: var(--bg-inset) !important; + color: var(--fg-body) !important; } -.product-clone-page[data-tool="clone"] .clone-ai-count-stepper b { - color: var(--fg-body); +html body #root .ecommerce-standalone .product-clone-page[data-tool="clone"] .clone-ai-count-stepper b { + color: var(--fg-body) !important; } From 2bc6fb7ab19f169d48c7bd6687417748cbc6224d Mon Sep 17 00:00:00 2001 From: Codex Date: Wed, 17 Jun 2026 14:25:18 +0800 Subject: [PATCH 04/12] feat(ecommerce): add one-click video quick tool page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add '一键视频' button left of '更多功能' in quick action board - Create EcommerceOneClickVideoPanel with hot-clone-like UI - Reuse EcommerceVideoWorkspace on the right for video flow - Add light-theme CSS matching quick-set/hot-clone pages --- src/features/ecommerce/EcommercePage.tsx | 69 ++- .../panels/EcommerceOneClickVideoPanel.tsx | 407 ++++++++++++++++++ src/styles/ecommerce-standalone.css | 294 +++++++++++++ 3 files changed, 766 insertions(+), 4 deletions(-) create mode 100644 src/features/ecommerce/panels/EcommerceOneClickVideoPanel.tsx diff --git a/src/features/ecommerce/EcommercePage.tsx b/src/features/ecommerce/EcommercePage.tsx index 8561020..adf2e32 100644 --- a/src/features/ecommerce/EcommercePage.tsx +++ b/src/features/ecommerce/EcommercePage.tsx @@ -51,6 +51,7 @@ import EcommerceSetPanel from "./panels/EcommerceSetPanel"; import EcommerceTryOnPanel from "./panels/EcommerceTryOnPanel"; import EcommerceClonePanel from "./panels/EcommerceClonePanel"; import EcommerceCopywritingPanel from "./panels/EcommerceCopywritingPanel"; +import EcommerceOneClickVideoPanel from "./panels/EcommerceOneClickVideoPanel"; import { ecommerceOssScopes, saveUnifiedEcommerceGenerationRecord, deleteEcommerceGenerationRecord } from "./ecommerceGenerationPersistence"; import { downloadResultAsset } from "../workbench/workbenchDownload"; import type { CloneOutputKey, ProductSetOutputKey } from "./utils/platformRules"; @@ -1885,7 +1886,7 @@ function ProductClonePage(_props: ProductClonePageProps = {}) { const [selectedProductSetPreview, setSelectedProductSetPreview] = useState(null); const [showHostingModal, setShowHostingModal] = useState(false); const [productImages, setProductImages] = useState([]); - const [activeQuickTool, setActiveQuickTool] = useState<"cutout" | "detail" | "watermark" | "image-edit" | "translate" | "hot" | "quick-set" | "copywriting" | null>(null); + const [activeQuickTool, setActiveQuickTool] = useState<"cutout" | "detail" | "watermark" | "image-edit" | "translate" | "hot" | "quick-set" | "copywriting" | "oneClickVideo" | null>(null); const [smartCutoutImage, setSmartCutoutImage] = useState(null); const [smartCutoutBatchImages, setSmartCutoutBatchImages] = useState([]); const [smartCutoutBackgroundColor, setSmartCutoutBackgroundColor] = useState("#ffffff"); @@ -5019,6 +5020,26 @@ function ProductClonePage(_props: ProductClonePageProps = {}) { setComposerMenu(null); }; + const openOneClickVideoPage = () => { + clearSmartCutoutTransition(); + setActiveQuickTool("oneClickVideo"); + setComposerMenu(null); + setIsCloneSettingsCollapsed(false); + setIsQuickPanelCollapsed(false); + }; + + const closeOneClickVideoPage = () => { + setActiveQuickTool(null); + setComposerMenu(null); + }; + + const handleOneClickVideoPlatformChange = (nextPlatform: string) => { + const normalizedPlatform = normalizePlatform(nextPlatform); + setPlatform(normalizedPlatform); + setRatio((current) => normalizeRatioForPlatform(normalizedPlatform, current, "video")); + setLanguage(getPlatformDefaultLanguage(normalizedPlatform, market)); + }; + const resetTask = () => { setSetImages([]); setProductSetRequirement(""); @@ -5084,6 +5105,7 @@ function ProductClonePage(_props: ProductClonePageProps = {}) { const isHotCloneTool = isCloneTool && activeQuickTool === "hot"; const isQuickSetTool = isCloneTool && activeQuickTool === "quick-set"; const isCopywritingTool = isCloneTool && activeQuickTool === "copywriting"; + const isOneClickVideoTool = isCloneTool && activeQuickTool === "oneClickVideo"; const pageLabel = isSetTool ? "商品套图" : isDetail ? "A+/详情页" : isTryOn ? "AI服饰穿戴" : activeToolMeta?.label || "商品工具"; const setPrimaryLabel = setImages.length === 0 @@ -6587,6 +6609,7 @@ function ProductClonePage(_props: ProductClonePageProps = {}) { { label: "图片翻译", tone: "translate", icon: , onClick: openImageTranslatePage }, { label: "商品套图", tone: "product", icon: , onClick: openQuickSetPage }, { label: "一键文案", tone: "copywriting", icon: , onClick: openCopywritingPage }, + { label: "一键视频", tone: "video", icon: , onClick: openOneClickVideoPage }, { label: "更多功能", tone: "more", icon: , disabled: true }, ].map((item) => ( + + ))} + + ); + + return ( +
+
+