AirShelf/电商AI平台/model-photo-demo-a.html
iye 086d92991e
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 7s
统一 Airshelf 界面组件与图标
2026-05-27 12:29:41 +08:00

666 lines
26 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<title>方案 A · 商品空间 · 模特上身图 · Airshelf</title>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="assets/restraint.css?v=2026052607">
<style>
.app { height: 100vh; overflow: hidden; }
main { display: flex; flex-direction: column; min-height: 0; }
#page-content { flex: 1; min-height: 0; display: flex; flex-direction: column; padding: 0; }
/* ===== 两栏:左侧栏 / 右侧主区 ===== */
.dma {
flex: 1; min-height: 0;
display: grid;
grid-template-columns: 260px 1fr;
}
/* ── 左侧栏 · 仅商品空间(搜索 + 列表 + 全部入口) ── */
.dma-side {
border-right: 1px solid var(--border-faint);
background: var(--surface);
display: flex; flex-direction: column;
min-height: 0;
}
.dma-side-h {
padding: 14px 14px 10px;
flex-shrink: 0;
}
.dma-side-h .ti-row {
display: flex; align-items: center;
margin-bottom: 10px;
}
.dma-side-h .ti {
font-size: 11px; font-family: var(--font-mono);
color: var(--black-alpha-48); letter-spacing: .08em;
text-transform: uppercase;
}
.dma-side-h .ti-row .add {
margin-left: auto;
width: 22px; height: 22px;
display: grid; place-items: center;
background: var(--heat-12); color: var(--heat);
border: 0; border-radius: var(--r-sm);
cursor: pointer;
}
.dma-side-h .add svg { width: 11px; height: 11px; }
/* 搜索框 (Q1-A) */
.dma-search {
display: flex; align-items: center; gap: 8px;
height: 32px; padding: 0 10px;
background: var(--background-lighter);
border: 1px solid var(--border-faint);
border-radius: var(--r-sm);
transition: border-color var(--t-base), background var(--t-base);
}
.dma-search:focus-within { border-color: var(--heat-40); background: var(--surface); }
.dma-search svg { width: 13px; height: 13px; color: var(--black-alpha-48); flex-shrink: 0; }
.dma-search input {
flex: 1; min-width: 0; height: 100%;
border: 0; outline: 0; background: transparent;
font-size: 12.5px; color: var(--accent-black); font-family: inherit;
}
/* 商品空间列表(flex:1 占据中部所有剩余空间) */
.dma-prod-list {
flex: 1; min-height: 0;
overflow-y: auto;
padding: 4px 10px 10px;
display: flex; flex-direction: column; gap: 4px;
}
.dma-prod {
display: flex; align-items: center; gap: 10px;
padding: 8px;
border: 1px solid transparent;
border-radius: var(--r-sm);
cursor: pointer;
transition: background var(--t-base), border-color var(--t-base);
}
.dma-prod:hover { background: var(--background-lighter); }
.dma-prod.active { background: var(--heat-12); border-color: var(--heat-20); }
.dma-prod .thumb {
flex-shrink: 0;
width: 40px; height: 40px;
border: 1px solid var(--border-faint);
border-radius: var(--r-sm);
overflow: hidden;
background: repeating-linear-gradient(135deg, transparent 0 4px, rgba(0,0,0,.04) 4px 5px);
display: grid; place-items: center;
font-family: var(--font-mono); font-size: 9px;
color: var(--black-alpha-32);
}
.dma-prod.active .thumb { border-color: var(--heat); }
.dma-prod .body { flex: 1; min-width: 0; }
.dma-prod .nm {
font-size: 12.5px;
color: var(--accent-black); font-weight: 500;
line-height: 1.3;
white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.dma-prod.active .nm { color: var(--heat); font-weight: 600; }
.dma-prod .sub {
margin-top: 2px;
font-family: var(--font-mono); font-size: 10px;
color: var(--black-alpha-48); letter-spacing: .02em;
}
/* 全部商品入口(Q1-B · 固定贴底) */
.dma-all {
flex-shrink: 0;
margin: 0 10px 12px;
padding: 10px 12px;
background: var(--background-lighter);
border: 1px dashed var(--border-faint);
border-radius: var(--r-sm);
color: var(--black-alpha-72);
font-size: 12px;
font-family: inherit;
cursor: pointer;
display: flex; align-items: center; gap: 6px;
transition: border-color var(--t-base), color var(--t-base), background var(--t-base);
}
.dma-all:hover { border-color: var(--heat); color: var(--heat); background: var(--heat-12); }
.dma-all .ct {
color: var(--black-alpha-48);
font-family: var(--font-mono); font-size: 10.5px;
margin-left: auto;
}
.dma-all svg { width: 12px; height: 12px; }
/* ── 右侧主区 ── */
.dma-main {
display: flex; flex-direction: column;
min-height: 0;
overflow: hidden;
}
.dma-main-h {
flex-shrink: 0;
display: flex; align-items: center; gap: 14px;
padding: 14px 28px;
border-bottom: 1px solid var(--border-faint);
background: var(--surface);
}
.dma-main-h .crumb {
font-family: var(--font-mono); font-size: 10.5px;
color: var(--black-alpha-48); letter-spacing: .04em;
}
.dma-main-h h2 {
font-size: 20px; font-weight: 600;
letter-spacing: -.015em;
color: var(--accent-black);
}
.dma-main-h .stats {
margin-left: auto;
display: flex; gap: 6px;
font-family: var(--font-mono); font-size: 11px;
color: var(--black-alpha-48); letter-spacing: .02em;
}
.dma-main-h .stats b { color: var(--accent-black); font-weight: 600; }
.dma-main-h .stats .sep { color: var(--black-alpha-24); }
/* 主区:参数 + 结果横向二栏 */
.dma-body {
flex: 1; min-height: 0;
display: grid;
grid-template-columns: 320px 1fr;
gap: 0;
}
/* 左侧参数面板 */
.dma-form {
border-right: 1px solid var(--border-faint);
background: var(--surface);
display: flex; flex-direction: column;
min-height: 0;
}
.dma-form-scroll {
flex: 1; min-height: 0; overflow-y: auto;
padding: 16px 18px;
}
.dma-field { margin-bottom: 16px; }
.dma-field-h {
font-size: 12px; font-weight: 600;
color: var(--accent-black);
margin-bottom: 8px;
}
.dma-field-h .opt {
font-weight: 400; font-size: 11px;
color: var(--black-alpha-48); margin-left: 4px;
}
.dma-models {
display: grid; grid-template-columns: repeat(3, 1fr);
gap: 8px;
}
.dma-model {
aspect-ratio: 3 / 4;
border: 1px solid var(--border-faint);
background: var(--background-lighter);
border-radius: var(--r-sm);
position: relative; cursor: pointer;
overflow: hidden;
transition: border-color var(--t-base);
}
.dma-model:hover { border-color: var(--black-alpha-32); }
.dma-model.selected { border-color: var(--heat); border-width: 2px; }
.dma-model .ph {
position: absolute; inset: 0;
display: grid; place-items: center;
font-family: var(--font-mono); font-size: 10px;
color: var(--black-alpha-32);
background: repeating-linear-gradient(135deg, transparent 0 6px, rgba(0,0,0,.03) 6px 7px);
}
.dma-model .nm {
position: absolute; bottom: 0; left: 0; right: 0;
padding: 4px 6px;
background: linear-gradient(transparent, rgba(0,0,0,.5));
font-size: 10px; color: #fff; font-weight: 500;
}
.dma-model.selected::after {
content: ''; position: absolute; top: 4px; right: 4px;
width: 14px; height: 14px;
background: var(--heat) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E") no-repeat center / 9px;
border-radius: 50%;
}
.dma-chip-row { display: flex; flex-wrap: wrap; gap: 6px; }
.dma-chip {
display: inline-flex; align-items: center;
height: 28px; padding: 0 11px;
background: var(--surface);
border: 1px solid var(--border-faint);
border-radius: var(--r-sm);
font-size: 12px; color: var(--black-alpha-72);
font-family: inherit; cursor: pointer;
transition: border-color var(--t-base), color var(--t-base), background var(--t-base);
}
.dma-chip:hover { border-color: var(--black-alpha-32); color: var(--accent-black); }
.dma-chip.active { background: var(--heat-12); color: var(--heat); border-color: var(--heat-20); font-weight: 600; }
.dma-form-cta {
flex-shrink: 0;
padding: 14px 18px;
border-top: 1px solid var(--border-faint);
background: var(--surface);
}
.dma-cost {
display: flex; align-items: center; justify-content: space-between;
margin-bottom: 10px;
font-family: var(--font-mono); font-size: 11px;
color: var(--black-alpha-48); letter-spacing: .02em;
}
.dma-cost .v { color: var(--accent-black); font-weight: 600; }
.dma-gen {
width: 100%; height: 42px;
background: var(--heat); color: #fff;
border: 1px solid var(--heat); border-radius: var(--r-md);
font-size: 14px; font-weight: 600; font-family: inherit;
cursor: pointer;
display: inline-flex; align-items: center; justify-content: center; gap: 8px;
box-shadow: var(--shadow-cta);
}
.dma-gen svg { width: 15px; height: 15px; }
/* 右侧结果区 */
.dma-result {
background: var(--background-base);
min-height: 0; overflow-y: auto;
padding: 22px 24px;
}
.dma-result-h {
display: flex; align-items: baseline; gap: 10px;
margin-bottom: 14px;
}
.dma-result-h .ti { font-size: 15px; font-weight: 600; color: var(--accent-black); }
.dma-result-h .sub { font-family: var(--font-mono); font-size: 10.5px; color: var(--black-alpha-48); letter-spacing: .02em; }
/* 批次卡 */
.dma-batch {
background: var(--surface);
border: 1px solid var(--border-faint);
border-radius: var(--r-md);
padding: 14px 16px;
margin-bottom: 14px;
}
.dma-batch-h {
display: flex; align-items: center; gap: 10px;
margin-bottom: 12px;
padding-bottom: 10px;
border-bottom: 1px solid var(--border-faint);
}
.dma-batch-h .pic {
width: 28px; height: 28px;
background: var(--background-lighter);
border: 1px solid var(--border-faint);
border-radius: var(--r-sm);
display: grid; place-items: center;
color: var(--heat);
font-family: var(--font-mono); font-size: 11px; font-weight: 600;
}
.dma-batch-h .meta { flex: 1; min-width: 0; }
.dma-batch-h .nm { font-size: 13px; font-weight: 600; color: var(--accent-black); }
.dma-batch-h .info { margin-top: 2px; font-family: var(--font-mono); font-size: 10.5px; color: var(--black-alpha-48); letter-spacing: .02em; }
.dma-batch-h .info .sep { color: var(--black-alpha-24); }
.dma-batch-h .ops { display: flex; gap: 4px; }
.dma-batch-h .ops button {
width: 28px; height: 28px;
background: var(--surface);
border: 1px solid var(--border-faint);
border-radius: var(--r-sm);
color: var(--black-alpha-56); cursor: pointer;
display: grid; place-items: center;
}
.dma-batch-h .ops button:hover { border-color: var(--heat-20); color: var(--heat); }
.dma-batch-h .ops button svg { width: 13px; height: 13px; }
.dma-batch-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; }
@media (max-width: 1400px) { .dma-batch-grid { grid-template-columns: repeat(3, 1fr); } }
.dma-cell {
aspect-ratio: 3 / 4;
background: var(--background-lighter);
border: 1px solid var(--border-faint);
border-radius: var(--r-sm);
overflow: hidden; position: relative;
cursor: pointer;
}
.dma-cell .ph {
position: absolute; inset: 0;
display: grid; place-items: center;
font-family: var(--font-mono); font-size: 11px;
color: var(--black-alpha-32);
background: repeating-linear-gradient(135deg, transparent 0 6px, rgba(0,0,0,.03) 6px 7px);
}
.dma-cell .tag {
position: absolute; top: 6px; left: 6px;
padding: 2px 6px;
background: rgba(0,0,0,.65);
color: #fff;
border-radius: var(--r-sm);
font-size: 10px; font-weight: 500;
backdrop-filter: blur(4px);
}
/* 空态 */
.dma-empty {
height: 100%;
display: flex; flex-direction: column; align-items: center; justify-content: center;
gap: 12px;
color: var(--black-alpha-48);
text-align: center;
}
.dma-empty .ic {
width: 56px; height: 56px;
background: var(--surface); border: 1px solid var(--border-faint);
border-radius: var(--r-md);
display: grid; place-items: center;
color: var(--heat);
}
.dma-empty .ic svg { width: 22px; height: 22px; }
.dma-empty .mono { font-family: var(--font-mono); font-size: 11px; letter-spacing: .04em; }
/* 顶部"提示条" · 这是 demo */
.dma-banner {
margin: 12px 28px 0;
padding: 8px 12px;
background: var(--heat-12);
border: 1px dashed var(--heat-20);
border-radius: var(--r-sm);
font-size: 12px;
color: var(--accent-black);
font-family: var(--font-mono); letter-spacing: .02em;
}
.dma-banner b { color: var(--heat); }
</style>
</head>
<body>
<div id="page">
<div class="dma-banner">// DEMO · 方案 A · <b>商品 = 项目空间</b>(Q1: A+B)。左栏仅商品空间:🔍 搜索 + 最近 6 条 + <b>全部商品</b>兜底入口;历史任务已挪进主区。主区:模特卡 + 张数 + 比例 + 立即生成,生成结果自动绑定到当前商品。</div>
<div class="dma">
<!-- ===== 左侧栏 · 仅商品空间 (搜索 + 列表 + 全部入口) ===== -->
<aside class="dma-side">
<div class="dma-side-h">
<div class="ti-row">
<span class="ti">商品空间</span>
<button class="add" type="button" title="新建商品">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 5v14M5 12h14"/></svg>
</button>
</div>
<!-- Q1-A · 搜索框 -->
<div class="dma-search">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><circle cx="11" cy="11" r="7"/><path d="m21 21-4.3-4.3"/></svg>
<input type="text" placeholder="搜索商品 / 分类">
</div>
</div>
<!-- 商品列表 · 最近 6 条 -->
<div class="dma-prod-list">
<div class="dma-prod active">
<div class="thumb">主图</div>
<div class="body">
<div class="nm">透真补水面膜</div>
<div class="sub">// 美妆个护 · 6 批</div>
</div>
</div>
<div class="dma-prod">
<div class="thumb">主图</div>
<div class="body">
<div class="nm">透真清透防晒霜</div>
<div class="sub">// 美妆个护 · 3 批</div>
</div>
</div>
<div class="dma-prod">
<div class="thumb">主图</div>
<div class="body">
<div class="nm">南卡 Lite Pro 蓝牙耳机</div>
<div class="sub">// 数码 3C · 2 批</div>
</div>
</div>
<div class="dma-prod">
<div class="thumb">主图</div>
<div class="body">
<div class="nm">滋啦速食牛肉面</div>
<div class="sub">// 食品饮料 · 1 批</div>
</div>
</div>
<div class="dma-prod">
<div class="thumb">主图</div>
<div class="body">
<div class="nm">三顿半同款冻干咖啡</div>
<div class="sub">// 食品饮料 · 1 批</div>
</div>
</div>
<div class="dma-prod">
<div class="thumb">主图</div>
<div class="body">
<div class="nm">小熊 4L 可视空气炸锅</div>
<div class="sub">// 家居家电 · 0 批</div>
</div>
</div>
</div>
<!-- Q1-B · 全部商品入口(贴底) -->
<button class="dma-all" type="button">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="16" rx="2"/><path d="M3 9h18M9 4v16"/></svg>
全部商品
<span class="ct">24 个</span>
<svg style="margin-left:4px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
</button>
</aside>
<!-- ===== 右侧主区 ===== -->
<section class="dma-main">
<!-- 顶部 · 商品名 + 统计 -->
<div class="dma-main-h">
<div>
<div class="crumb">// 商品空间</div>
<h2>透真补水面膜</h2>
</div>
<div class="stats">
<span>本商品 <b>6</b></span>
<span class="sep">·</span>
<span>累计 <b>22</b> 张图</span>
<span class="sep">·</span>
<span>最近 <b>3 分钟前</b></span>
</div>
</div>
<!-- 中间:参数面板 + 结果 -->
<div class="dma-body">
<!-- 参数面板(单一职责:挑模特 + 张数) -->
<div class="dma-form">
<div class="dma-form-scroll">
<div class="dma-field">
<div class="dma-field-h">选择模特<span class="opt">(已锁定商品 · 透真补水面膜)</span></div>
<div class="dma-models">
<div class="dma-model selected">
<div class="ph">Ava · 3:4</div>
<div class="nm">Ava</div>
</div>
<div class="dma-model">
<div class="ph">Zoe · 3:4</div>
<div class="nm">Zoe</div>
</div>
<div class="dma-model">
<div class="ph">Ben · 3:4</div>
<div class="nm">Ben</div>
</div>
<div class="dma-model">
<div class="ph">Lin · 3:4</div>
<div class="nm">Lin</div>
</div>
<div class="dma-model">
<div class="ph">Mia · 3:4</div>
<div class="nm">Mia</div>
</div>
<div class="dma-model" style="border-style:dashed;display:flex;align-items:center;justify-content:center;color:var(--black-alpha-48);">
<span style="font-size:18px">+</span>
</div>
</div>
</div>
<div class="dma-field">
<div class="dma-field-h">生成张数</div>
<div class="dma-chip-row">
<button class="dma-chip" type="button">1 张</button>
<button class="dma-chip" type="button">2 张</button>
<button class="dma-chip active" type="button">4 张</button>
<button class="dma-chip" type="button">8 张</button>
</div>
</div>
<div class="dma-field">
<div class="dma-field-h">画面比例</div>
<div class="dma-chip-row">
<button class="dma-chip" type="button">1:1</button>
<button class="dma-chip active" type="button">3:4</button>
<button class="dma-chip" type="button">9:16</button>
<button class="dma-chip" type="button">16:9</button>
</div>
</div>
<div class="dma-field">
<div class="dma-field-h">补充提示词<span class="opt">(选填)</span></div>
<textarea style="width:100%;min-height:60px;padding:8px 10px;background:var(--background-lighter);border:1px solid var(--black-alpha-12);border-radius:var(--r-sm);font-family:inherit;font-size:12.5px;outline:none;resize:vertical" placeholder="例:户外阳光、敷面膜的特写、白底产品摄影"></textarea>
</div>
</div>
<div class="dma-form-cta">
<div class="dma-cost">
<span>预估扣费 <span class="v">≈ ¥1.20</span></span>
<span>余额 ¥327.40</span>
</div>
<button class="dma-gen" type="button">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3l1.7 4.6L18 9l-4.3 1.4L12 15l-1.7-4.6L6 9l4.3-1.4L12 3z"/></svg>
立即生成 · 透真补水面膜 × Ava
</button>
</div>
</div>
<!-- 右侧结果 · 当前商品全部批次 -->
<div class="dma-result">
<div class="dma-result-h">
<span class="ti">最近批次 · Ava × 4 张</span>
<span class="sub">// 3 分钟前 · 已完成</span>
</div>
<!-- 批次 1 -->
<div class="dma-batch">
<div class="dma-batch-h">
<div class="pic">4×</div>
<div class="meta">
<div class="nm">Ava × 4 张</div>
<div class="info">透真补水面膜 <span class="sep">·</span> 3:4 <span class="sep">·</span> 3 分钟前 <span class="sep">·</span> ¥1.20</div>
</div>
<div class="ops">
<button type="button" title="全部重跑"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12a9 9 0 11-3-6.7L21 8M21 3v5h-5"/></svg></button>
<button type="button" title="全部下载"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M7 10l5 5 5-5M12 15V3"/></svg></button>
<button type="button" title="加入资产库"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M19 21l-7-5-7 5V5a2 2 0 012-2h10a2 2 0 012 2z"/></svg></button>
</div>
</div>
<div class="dma-batch-grid">
<div class="dma-cell"><div class="ph">Ava · #1</div><span class="tag">3:4</span></div>
<div class="dma-cell"><div class="ph">Ava · #2</div><span class="tag">3:4</span></div>
<div class="dma-cell"><div class="ph">Ava · #3</div><span class="tag">3:4</span></div>
<div class="dma-cell"><div class="ph">Ava · #4</div><span class="tag">3:4</span></div>
</div>
</div>
<!-- 批次 2 -->
<div class="dma-batch">
<div class="dma-batch-h">
<div class="pic">4×</div>
<div class="meta">
<div class="nm">Zoe × 4 张</div>
<div class="info">透真补水面膜 <span class="sep">·</span> 3:4 <span class="sep">·</span> 12 分钟前 <span class="sep">·</span> ¥1.20</div>
</div>
<div class="ops">
<button type="button" title="全部重跑"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12a9 9 0 11-3-6.7L21 8M21 3v5h-5"/></svg></button>
<button type="button" title="全部下载"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M7 10l5 5 5-5M12 15V3"/></svg></button>
<button type="button" title="加入资产库"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M19 21l-7-5-7 5V5a2 2 0 012-2h10a2 2 0 012 2z"/></svg></button>
</div>
</div>
<div class="dma-batch-grid">
<div class="dma-cell"><div class="ph">Zoe · #1</div><span class="tag">3:4</span></div>
<div class="dma-cell"><div class="ph">Zoe · #2</div><span class="tag">3:4</span></div>
<div class="dma-cell"><div class="ph">Zoe · #3</div><span class="tag">3:4</span></div>
<div class="dma-cell"><div class="ph">Zoe · #4</div><span class="tag">3:4</span></div>
</div>
</div>
<!-- 批次 3 -->
<div class="dma-batch">
<div class="dma-batch-h">
<div class="pic">2×</div>
<div class="meta">
<div class="nm">Ben × 2 张</div>
<div class="info">透真补水面膜 <span class="sep">·</span> 3:4 <span class="sep">·</span> 刚刚 <span class="sep">·</span> 生成中</div>
</div>
<div class="ops">
<button type="button" title="取消"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M6 6l12 12M6 18L18 6"/></svg></button>
</div>
</div>
<div class="dma-batch-grid">
<div class="dma-cell"><div class="ph">生成中…</div></div>
<div class="dma-cell"><div class="ph">生成中…</div></div>
</div>
</div>
</div>
</div>
</section>
</div>
</div>
<script src="assets/icons.js?v=2026052608"></script>
<script src="assets/shell.js?v=2026052607"></script>
<script>
Shell.render({
active: 'asset-factory',
crumbs: [
{ label: '工作台', href: 'index.html' },
{ label: '图片生成', href: 'asset-factory.html' },
{ label: '模特上身图 · 方案 A · Demo' }
]
});
// 简单交互:点击商品 / 任务切换激活态
document.querySelectorAll('.dma-prod').forEach(el => {
el.addEventListener('click', () => {
document.querySelectorAll('.dma-prod').forEach(x => x.classList.remove('active'));
el.classList.add('active');
});
});
document.querySelectorAll('.dma-task').forEach(el => {
el.addEventListener('click', () => {
document.querySelectorAll('.dma-task').forEach(x => x.classList.remove('active'));
el.classList.add('active');
});
});
document.querySelectorAll('.dma-model').forEach(el => {
el.addEventListener('click', () => {
document.querySelectorAll('.dma-model').forEach(x => x.classList.remove('selected'));
el.classList.add('selected');
});
});
document.querySelectorAll('.dma-chip').forEach(el => {
el.addEventListener('click', () => {
// 同组互斥
el.parentElement.querySelectorAll('.dma-chip').forEach(x => x.classList.remove('active'));
el.classList.add('active');
});
});
</script>
</body>
</html>