Files

346 lines
28 KiB
HTML
Raw Permalink 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>自动合成印花服饰效果图工具 — 完整版</title>
<style>
:root{
--win:#f0f0f0;--panel:#fff;--panel-2:#f7f7f7;--line:#d6d6d6;--line-2:#e3e3e3;
--canvas:#9a9da3;--txt:#202020;--txt-2:#555;--txt-3:#888;
--accent:#0067c0;--accent-2:#0078d4;--accent-soft:#cfe4f7;--accent-bg:#e8f1fb;
--green:#107c10;--amber:#b87a00;--red:#c42b1c;--r:3px;
--font:"Segoe UI","Microsoft YaHei","微软雅黑",sans-serif;
}
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:var(--font);color:var(--txt);font-size:12px;background:#cfcfcf;display:flex;align-items:center;justify-content:center;padding:24px;min-height:100vh}
.app{width:1920px;height:1080px;background:var(--win);display:grid;grid-template-rows:34px 40px 1fr 188px 26px;border:1px solid #b5b5b5;overflow:hidden;box-shadow:0 18px 50px rgba(0,0,0,.35);transform-origin:center}
@media(max-width:2000px){.app{transform:scale(.92)}}
@media(max-width:1800px){.app{transform:scale(.78)}}
@media(max-width:1500px){.app{transform:scale(.62)}}
@media(max-width:1200px){.app{transform:scale(.48)}}
@media(max-width:950px){.app{transform:scale(.34)}}
.title{background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;padding:0 0 0 12px;height:34px}
.title .ic{width:18px;height:18px;border-radius:3px;background:linear-gradient(135deg,#0078d4,#005a9e);display:grid;place-items:center;color:#fff;font-size:11px;font-weight:700;margin-right:8px}
.title .t{font-size:12px;color:var(--txt)}
.title .ver{font-size:11px;color:var(--txt-3);margin-left:8px}
.title .gear{margin-left:auto;display:flex;align-items:center;gap:6px;height:100%;padding:0 12px;color:var(--txt-2);border-left:1px solid var(--line-2)}
.title .gear:hover{background:#f0f0f0}
.title .win-btns{display:flex;height:34px}
.title .wb{width:46px;display:grid;place-items:center;color:#444;font-size:11px}
.title .wb.close:hover{background:#c42b1c;color:#fff}.title .wb:hover{background:#e6e6e6}
.tabs{background:var(--win);border-bottom:1px solid var(--line);display:flex;align-items:flex-end;padding:0 12px;gap:4px}
.tab{display:flex;align-items:center;gap:8px;height:32px;padding:0 18px;background:#e4e4e4;border:1px solid var(--line);border-bottom:none;border-radius:6px 6px 0 0;color:var(--txt-2);position:relative;top:1px}
.tab .num{width:18px;height:18px;border-radius:50%;background:#bcbcbc;color:#fff;font-size:11px;font-weight:700;display:grid;place-items:center}
.tab .nm{font-size:13px}
.tab.on{background:#fff;color:var(--txt);border-color:var(--line);font-weight:600}
.tab.on .num{background:var(--accent)}
.tab:not(.on):hover{background:#ececec}
.tab .arw{color:var(--txt-3);margin:0 -2px 0 6px;font-size:12px}
.toolbar{background:var(--win);border-bottom:1px solid var(--line);display:flex;align-items:center;padding:0 8px;gap:2px}
.menu{display:flex;gap:2px;margin-right:10px}
.menu .m{padding:4px 9px;border-radius:var(--r)}.menu .m:hover{background:#e5e5e5}
.tsep{width:1px;height:24px;background:var(--line);margin:0 6px}
.tb{display:flex;align-items:center;gap:6px;height:30px;padding:0 10px;background:#fff;border:1px solid var(--line);border-radius:var(--r)}
.tb:hover{background:#f3f8fd;border-color:var(--accent-soft)}.tb .g{font-size:13px}
.spacer{flex:1}
.body{display:grid;grid-template-columns:374px 1fr 318px;min-height:0}
.left{background:var(--panel);border-right:1px solid var(--line);display:grid;grid-template-rows:1fr 1fr;min-height:0}
.mat{display:flex;flex-direction:column;min-height:0}.mat+.mat{border-top:1px solid var(--line)}
.open-btn{display:flex;align-items:center;justify-content:center;gap:7px;height:32px;margin:8px 12px 0;background:var(--accent);color:#fff;border-radius:var(--r);font-size:12px;font-weight:600;border:1px solid var(--accent)}
.open-btn:hover{background:var(--accent-2)}.open-btn .g{font-size:14px}
.mat-h{display:flex;align-items:center;justify-content:space-between;padding:8px 12px 6px;background:var(--panel-2);border-bottom:1px solid var(--line-2)}
.mat-h .t{font-weight:600}.mat-h .c{color:var(--txt-3);font-size:11px}
.mat-bar{display:flex;align-items:center;gap:10px;padding:6px 12px;border-bottom:1px solid var(--line-2);font-size:11px;color:var(--txt-2)}
.ckall{display:flex;align-items:center;gap:5px}
.cbox{width:13px;height:13px;border:1px solid #999;border-radius:2px;background:#fff;display:inline-block;flex:none}
.cbox.on{background:var(--accent);border-color:var(--accent)}
.cbox.on::after{content:"✓";color:#fff;font-size:9px;line-height:12px;display:block;text-align:center}
.cbox.dash{background:var(--accent);border-color:var(--accent)}
.cbox.dash::after{content:"–";color:#fff;font-size:11px;line-height:11px;display:block;text-align:center}
.mat-bar .srt{margin-left:auto;display:flex;align-items:center;gap:4px;color:var(--txt-3)}
.grid{flex:1;overflow:auto;display:grid;grid-template-columns:repeat(4,1fr);gap:8px;padding:10px 12px;align-content:start}
.th{position:relative;aspect-ratio:1/1.12;border:1px solid var(--line);border-radius:var(--r);background:#fafafa;overflow:hidden}
.th .im{position:absolute;inset:0}
.th .cap{position:absolute;left:0;right:0;bottom:0;background:rgba(255,255,255,.93);border-top:1px solid var(--line-2);font-size:10px;color:#333;padding:2px 4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.th .ck{position:absolute;top:4px;left:4px;width:14px;height:14px;border:1px solid #aaa;border-radius:2px;background:rgba(255,255,255,.92)}
.th .fld{position:absolute;top:4px;right:4px;background:rgba(40,40,40,.72);color:#fff;font-size:9px;line-height:1;padding:2px 5px;border-radius:8px;max-width:64px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.th.sel{border:2px solid var(--accent);background:var(--accent-bg)}
.th.sel .ck,.th.ckd .ck{background:var(--accent);border-color:var(--accent)}
.th.sel .ck::after,.th.ckd .ck::after{content:"✓";color:#fff;font-size:9px;line-height:12px;display:block;text-align:center}
.tee-1{background:radial-gradient(circle at 50% 36%,#fff 0 34%,#ededeb 62%,#dcdcd8 100%)}
.tee-2{background:radial-gradient(circle at 50% 36%,#3a3f47 0 34%,#2c3037 62%,#202329 100%)}
.tee-3{background:radial-gradient(circle at 50% 36%,#2f567a 0 34%,#274764 62%,#1d3950 100%)}
.tee-4{background:radial-gradient(circle at 50% 36%,#883535 0 34%,#6e2a2a 62%,#541f1f 100%)}
.tee-5{background:radial-gradient(circle at 50% 36%,#46784a 0 34%,#3a623d 62%,#2c4b2f 100%)}
.tee-6{background:radial-gradient(circle at 50% 36%,#cdb56e 0 34%,#bba258 62%,#a18a45 100%)}
.pr-1{background:conic-gradient(from 20deg,#ff6b6b,#feca57,#48dbfb,#ff9ff3,#ff6b6b)}
.pr-2{background:linear-gradient(135deg,#222 0 50%,#f1f1f1 50%)}
.pr-3{background:repeating-linear-gradient(45deg,#333 0 7px,#eee 7px 14px)}
.pr-4{background:radial-gradient(circle at 50% 50%,#ff7e5f,#feb47b)}
.pr-5{background:linear-gradient(120deg,#5f27cd,#48dbfb)}
.pr-6{background:radial-gradient(circle at 30% 30%,#10ac84,#222f3e)}
.center{background:var(--canvas);display:grid;grid-template-rows:34px 1fr;min-height:0}
.cbar{display:flex;align-items:center;gap:14px;padding:0 12px;background:#e8e8e8;border-bottom:1px solid var(--line)}
.cbar .f{color:#444}.cbar .f b{color:#000}
.vtool{display:flex;gap:2px;margin-left:6px}
.vtool .v{width:26px;height:24px;display:grid;place-items:center;border:1px solid transparent;border-radius:var(--r);color:#444;font-size:13px}
.vtool .v.on{background:#fff;border-color:var(--line);color:var(--accent)}
.zoom{margin-left:auto;display:flex;align-items:center;gap:2px}
.zoom .zb{width:24px;height:24px;display:grid;place-items:center;background:#fff;border:1px solid var(--line);border-radius:var(--r);font-size:13px}
.zoom .zv{min-width:46px;text-align:center;color:#444}
.stage{position:relative;display:grid;place-items:center;overflow:hidden;background:linear-gradient(45deg,#90939a 25%,transparent 25%) 0 0/20px 20px,linear-gradient(-45deg,#90939a 25%,transparent 25%) 0 10px/20px 20px,linear-gradient(45deg,transparent 75%,#90939a 75%) 10px -10px/20px 20px,linear-gradient(-45deg,transparent 75%,#90939a 75%) -10px 0/20px 20px,var(--canvas)}
.garment{position:relative;width:470px;height:574px;filter:drop-shadow(0 10px 26px rgba(0,0,0,.32))}
.shirt{position:absolute;inset:0;background:#fcfcfa;clip-path:polygon(32% 0%,42% 6%,58% 6%,68% 0%,88% 12%,100% 30%,86% 42%,78% 36%,78% 100%,22% 100%,22% 36%,14% 42%,0% 30%,12% 12%);box-shadow:inset 0 0 50px rgba(0,0,0,.05)}
.collar{position:absolute;top:0;left:50%;transform:translateX(-50%);width:118px;height:44px;border-radius:0 0 59px 59px;background:var(--canvas)}
.print{position:absolute;top:170px;left:50%;transform:translateX(-50%) rotate(-8deg);width:174px;height:174px;border-radius:6px;background:conic-gradient(from 20deg,#ff6b6b,#feca57,#48dbfb,#ff9ff3,#ff6b6b);display:grid;place-items:center}
.print::after{content:"";width:62%;height:62%;border-radius:50%;background:rgba(255,255,255,.22);box-shadow:inset 0 0 0 6px rgba(255,255,255,.32)}
.selbox{position:absolute;top:158px;left:50%;transform:translateX(-50%) rotate(-8deg);width:196px;height:196px;border:1.5px solid var(--accent)}
.hd{position:absolute;width:10px;height:10px;background:#fff;border:1.5px solid var(--accent)}
.tl{top:-5px;left:-5px}.tr{top:-5px;right:-5px}.bl{bottom:-5px;left:-5px}.br{bottom:-5px;right:-5px}
.tt{top:-5px;left:50%;transform:translateX(-50%)}.bb{bottom:-5px;left:50%;transform:translateX(-50%)}
.ll{left:-5px;top:50%;transform:translateY(-50%)}.rr{right:-5px;top:50%;transform:translateY(-50%)}
.stem{position:absolute;top:-30px;left:50%;transform:translateX(-50%);width:1.5px;height:26px;background:var(--accent)}
.knob{position:absolute;top:-40px;left:50%;transform:translateX(-50%);width:15px;height:15px;border-radius:50%;background:#fff;border:1.5px solid var(--accent);display:grid;place-items:center;color:var(--accent);font-size:9px}
.hint{position:absolute;bottom:12px;left:50%;transform:translateX(-50%);display:flex;gap:14px;background:rgba(255,255,255,.94);border:1px solid var(--line);padding:5px 12px;border-radius:4px;font-size:11px;color:#444}
.hint span{display:flex;align-items:center;gap:5px}.kbd{background:#eee;border:1px solid var(--line);border-radius:2px;padding:0 5px;font-size:10px}
.right{background:var(--win);border-left:1px solid var(--line);display:flex;flex-direction:column;min-height:0}
.rscroll{flex:1;overflow:auto;padding:12px}
.grp{border:1px solid var(--line);border-radius:var(--r);background:#fff;margin-bottom:12px;position:relative;padding:14px 12px 12px}
.grp-t{position:absolute;top:-8px;left:9px;background:#fff;padding:0 6px;font-size:11px;font-weight:600;color:var(--txt-2)}
.row{display:flex;gap:8px;margin-bottom:8px}.row:last-child{margin-bottom:0}.fl{flex:1}
.fl label{display:block;color:var(--txt-2);margin-bottom:4px;font-size:11px}
.inp{display:flex;align-items:center;height:28px;border:1px solid var(--line);border-radius:var(--r);background:#fff;padding:0 7px}
.inp input{border:none;outline:none;width:100%;font:inherit;color:var(--txt);background:none}
.inp.spin{padding-right:0}.inp .u{color:var(--txt-3);font-size:11px}
.inp .stp{display:flex;flex-direction:column;border-left:1px solid var(--line-2);height:100%}
.inp .stp i{flex:1;width:18px;display:grid;place-items:center;font-size:8px;color:#666;font-style:normal}
.inp.focus{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}
.sel{display:flex;align-items:center;justify-content:space-between;height:28px;border:1px solid var(--line);border-radius:var(--r);background:#fff;padding:0 8px}
.sel .car{color:#666;font-size:10px}
.ckline{display:flex;align-items:center;gap:6px;color:var(--txt-2);margin:8px 0 0}
.rotbtns{display:flex;gap:8px}
.ibtn{flex:1;height:28px;border:1px solid var(--line);border-radius:var(--r);background:#fff;display:flex;align-items:center;justify-content:center;gap:5px}.ibtn:hover{background:#f3f8fd}
.path{display:flex;align-items:center;height:28px;border:1px solid var(--line);border-radius:var(--r);background:#fff}
.path .p{flex:1;padding:0 7px;color:#444;font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.path .br{width:30px;height:100%;border-left:1px solid var(--line);display:grid;place-items:center;background:var(--win)}
.tipbox{display:flex;gap:6px;align-items:flex-start;background:#fff8e6;border:1px solid #f0dca0;border-radius:var(--r);padding:7px 9px;font-size:11px;color:#7a5b00;margin-top:2px}
.actions{padding:10px 12px;border-top:1px solid var(--line);background:var(--win)}
.btn{width:100%;height:34px;border-radius:var(--r);display:flex;align-items:center;justify-content:center;gap:7px;font-size:12px;font-weight:600;border:1px solid var(--line)}
.btn.pri{background:var(--accent);border-color:var(--accent);color:#fff}.btn.pri:hover{background:var(--accent-2)}
.btn.sec{background:#fff}.btn.sec:hover{background:#f3f8fd}
.brow{display:flex;gap:8px;margin-top:8px}.brow .btn{margin-top:0}
/* ---- BOTTOM QUEUE PANEL ---- */
.queue{background:#fff;border-top:1px solid var(--line);display:grid;grid-template-rows:34px 1fr;min-height:0}
.q-head{display:flex;align-items:center;gap:12px;padding:0 12px;background:var(--panel-2);border-bottom:1px solid var(--line-2)}
.q-head .qt{font-weight:600}
.q-head .modes{display:flex;gap:0;border:1px solid var(--line);border-radius:var(--r);overflow:hidden;margin-left:6px}
.q-head .mode{padding:5px 11px;color:var(--txt-2);border-right:1px solid var(--line);background:#fff}
.q-head .mode:last-child{border-right:none}
.q-head .mode.on{background:var(--accent);color:#fff}
.q-head .qmeta{color:var(--txt-3);font-size:11px;margin-left:4px}
.q-head .qbtns{margin-left:auto;display:flex;gap:8px}
.q-head .qb{height:26px;padding:0 12px;border:1px solid var(--line);border-radius:var(--r);background:#fff;display:flex;align-items:center;gap:6px}
.q-head .qb.pri{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}
.q-head .qb.collapse{width:26px;padding:0;justify-content:center;color:var(--txt-3)}
.q-body{overflow:auto;padding:0}
table.qtbl{width:100%;border-collapse:collapse;font-size:11px}
table.qtbl th{position:sticky;top:0;background:#f4f4f4;border-bottom:1px solid var(--line);text-align:left;font-weight:600;color:var(--txt-2);padding:6px 10px;white-space:nowrap}
table.qtbl td{border-bottom:1px solid var(--line-2);padding:5px 10px;color:var(--txt);white-space:nowrap}
table.qtbl tr.sel td{background:var(--accent-bg)}
table.qtbl tr:hover td{background:#f7faff}
.qidx{color:var(--txt-3);width:34px}
.swatch{width:14px;height:14px;border-radius:3px;display:inline-block;vertical-align:-3px;margin-right:6px;border:1px solid rgba(0,0,0,.15)}
.pill{display:inline-block;padding:1px 8px;border-radius:9px;font-size:10px;font-weight:600}
.pill.tpl{background:#eef3f9;color:#2b5b8c}
.pill.adj{background:#fff3da;color:#8a5a00}
.pill.wait{background:#eee;color:#666}
.pill.run{background:#e0eefc;color:#15538f}
.pill.done{background:#e3f3e3;color:#2c7a2c}
.pill.err{background:#fbe4e2;color:#a3271c}
.qprog{display:inline-block;width:90px;height:5px;border-radius:3px;background:#eaeaea;overflow:hidden;vertical-align:middle;margin-right:8px}
.qprog i{display:block;height:100%;background:var(--accent)}
.status{background:#fff;border-top:1px solid var(--line);display:flex;align-items:center;padding:0 12px;gap:14px;color:var(--txt-2);font-size:11px}
.status .s{display:flex;align-items:center;gap:5px}.status b{color:var(--txt);font-weight:600}
.dot{width:7px;height:7px;border-radius:50%}.g{background:var(--green)}.a{background:var(--amber)}.r{background:var(--red)}
.status .sp{flex:1}.status .log{color:var(--green)}.vsep{width:1px;height:14px;background:var(--line-2)}
</style>
</head>
<body>
<div class="app">
<div class="title">
<div class="ic">印</div><div class="t">自动合成印花服饰效果图工具</div><div class="ver">v1.0.0</div>
<div class="gear"><span style="font-size:14px">⚙️</span>设置</div>
<div class="win-btns"><div class="wb">—</div><div class="wb">▢</div><div class="wb close">✕</div></div>
</div>
<div class="tabs">
<div class="tab on"><span class="num">1</span><span class="nm">添加印花</span></div>
<div class="tab"><span class="num">2</span><span class="nm">AI 穿搭</span></div>
<div class="tab"><span class="num">3</span><span class="nm">导出上架</span></div>
</div>
<div class="body">
<!-- LEFT -->
<div class="left">
<div class="mat">
<div class="open-btn"><span class="g">📁</span>打开衣服文件夹</div>
<div class="mat-h"><span class="t">衣服图片</span><span class="c">含子文件夹 · 共 12</span></div>
<div class="mat-bar">
<span class="ckall"><span class="cbox dash"></span>全选</span>
<span class="vsep"></span><span>已选 3</span>
<span class="srt">排序:文件夹+名称 ▾</span>
</div>
<div class="grid">
<div class="th sel"><div class="im tee-1"></div><div class="ck"></div><div class="fld">夏季</div><div class="cap">夏季/白T_圆领.png</div></div>
<div class="th ckd"><div class="im tee-2"></div><div class="ck"></div><div class="fld">夏季</div><div class="cap">夏季/黑T_短袖.png</div></div>
<div class="th ckd"><div class="im tee-3"></div><div class="ck"></div><div class="fld">夏季</div><div class="cap">夏季/藏青_长袖.png</div></div>
<div class="th"><div class="im tee-4"></div><div class="ck"></div><div class="fld">秋季</div><div class="cap">秋季/酒红_卫衣.png</div></div>
<div class="th"><div class="im tee-5"></div><div class="ck"></div><div class="fld">秋季</div><div class="cap">秋季/军绿_圆领.png</div></div>
<div class="th"><div class="im tee-6"></div><div class="ck"></div><div class="fld">秋季</div><div class="cap">秋季/卡其_POLO.png</div></div>
<div class="th"><div class="im tee-2"></div><div class="ck"></div><div class="fld">基础</div><div class="cap">基础/黑T_宽松.png</div></div>
<div class="th"><div class="im tee-1"></div><div class="ck"></div><div class="fld">基础</div><div class="cap">基础/米白_打底.png</div></div>
<div class="th"><div class="im tee-3"></div><div class="ck"></div><div class="fld">基础</div><div class="cap">基础/蓝灰_V领.png</div></div>
</div>
</div>
<div class="mat">
<div class="open-btn"><span class="g">🎨</span>打开印花文件夹</div>
<div class="mat-h"><span class="t">印花图片</span><span class="c">含子文件夹 · 共 8</span></div>
<div class="mat-bar">
<span class="ckall"><span class="cbox on"></span>全选</span>
<span class="vsep"></span><span>已选 8</span>
<span class="srt">排序:文件夹+名称 ▾</span>
</div>
<div class="grid">
<div class="th sel"><div class="im pr-1"></div><div class="ck"></div><div class="fld">花卉</div><div class="cap">花卉/花卉_001.png</div></div>
<div class="th ckd"><div class="im pr-2"></div><div class="ck"></div><div class="fld">几何</div><div class="cap">几何/几何_黑白.png</div></div>
<div class="th ckd"><div class="im pr-3"></div><div class="ck"></div><div class="fld">几何</div><div class="cap">几何/条纹_斜.png</div></div>
<div class="th ckd"><div class="im pr-4"></div><div class="ck"></div><div class="fld">风景</div><div class="cap">风景/日落_暖.png</div></div>
<div class="th ckd"><div class="im pr-5"></div><div class="ck"></div><div class="fld">渐变</div><div class="cap">渐变/渐变_紫.png</div></div>
<div class="th ckd"><div class="im pr-6"></div><div class="ck"></div><div class="fld">LOGO</div><div class="cap">LOGO/地球_logo.png</div></div>
</div>
</div>
</div>
<!-- CENTER -->
<div class="center">
<div class="cbar">
<div class="f">底图:<b>白T_圆领.png</b></div>
<div class="f">印花:<b>花卉_001.png</b></div>
<div class="vtool"><div class="v on">✥</div><div class="v">⤢</div><div class="v">↻</div></div>
<div class="zoom"><div class="zb">−</div><div class="zv">82%</div><div class="zb">+</div></div>
</div>
<div class="stage">
<div class="garment">
<div class="shirt"></div><div class="collar"></div>
<div class="print"></div>
<div class="selbox">
<span class="stem"></span><span class="knob">↻</span>
<span class="hd tl"></span><span class="hd tr"></span><span class="hd bl"></span><span class="hd br"></span>
<span class="hd tt"></span><span class="hd bb"></span><span class="hd ll"></span><span class="hd rr"></span>
</div>
</div>
<div class="hint"><span>🖱️ 拖动移动</span><span>四角 缩放</span><span>顶部 旋转</span><span><span class="kbd">Shift</span> 锁比例</span></div>
</div>
</div>
<!-- RIGHT -->
<div class="right">
<div class="rscroll">
<div class="grp"><div class="grp-t">模板</div><div class="sel"><span>标准居中印花 · T恤</span><span class="car">▼</span></div>
<div class="brow" style="margin-top:10px">
<div class="btn sec" style="height:30px">💾 保存</div>
<div class="btn sec" style="height:30px">📋 另存为</div>
</div>
</div>
<div class="grp"><div class="grp-t">位置</div>
<div class="row">
<div class="fl"><label>X 坐标</label><div class="inp spin focus"><input value="175"><span class="stp"><i>▲</i><i>▼</i></span></div></div>
<div class="fl"><label>Y 坐标</label><div class="inp spin"><input value="200"><span class="stp"><i>▲</i><i>▼</i></span></div></div>
</div>
</div>
<div class="grp"><div class="grp-t">尺寸</div>
<div class="row">
<div class="fl"><label>宽度</label><div class="inp spin"><input value="200"><span class="stp"><i>▲</i><i>▼</i></span></div></div>
<div class="fl"><label>高度</label><div class="inp spin"><input value="200"><span class="stp"><i>▲</i><i>▼</i></span></div></div>
</div>
<div class="ckline"><span class="cbox on"></span>锁定宽高比例(1:1)</div>
</div>
<div class="grp"><div class="grp-t">旋转</div>
<div class="row"><div class="fl"><label>角度</label><div class="inp spin"><input value="-8"><span class="u" style="padding-right:4px">°</span><span class="stp"><i>▲</i><i>▼</i></span></div></div></div>
<div class="rotbtns"><div class="ibtn">↺ 左旋 90°</div><div class="ibtn">↻ 右旋 90°</div></div>
</div>
<div class="grp"><div class="grp-t">输出设置</div>
<div class="fl" style="margin-bottom:8px"><label>输出目录</label><div class="path"><span class="p">D:\\印花成品\\2026春\\</span><span class="br">…</span></div></div>
<div class="row" style="margin-bottom:0">
<div class="fl"><label>格式</label><div class="sel"><span>PNG</span><span class="car">▼</span></div></div>
<div class="fl"><label>质量</label><div class="sel"><span>高 (100)</span><span class="car">▼</span></div></div>
</div>
</div>
<div class="tipbox"><span>ⓘ</span><span>当前调整将仅作用于队列中选中的「黑T_短袖 × 花卉_001」,并标记为「已微调」,重跑模板时不被覆盖。</span></div>
</div>
<div class="actions">
<div class="btn pri">⬇ 导出当前单张</div>
<div class="brow"><div class="btn sec">💾 应用为模板</div><div class="btn sec">↺ 重置为模板</div></div>
</div>
</div>
</div>
<!-- BOTTOM QUEUE -->
<div class="queue">
<div class="q-head">
<span class="qt">合成队列</span>
<div class="modes">
<span class="mode on">多衣服 × 单印花</span>
<span class="mode">单衣服 × 多印花</span>
<span class="mode">全组合(矩阵)</span>
</div>
<span class="qmeta">共 60 项 · 完成 12 · 进行 1 · 失败 1 · 待导出 46</span>
<div class="qbtns">
<div class="qb">↺ 重置全部</div>
<div class="qb">⬇ 导出选中</div>
<div class="qb pri">⬇⬇ 开始批量导出</div>
<div class="qb collapse">▾</div>
</div>
</div>
<div class="q-body">
<table class="qtbl">
<thead><tr><th class="qidx">#</th><th>衣服</th><th>印花</th><th>来源文件夹</th><th>参数</th><th>状态</th><th>进度 / 输出文件</th></tr></thead>
<tbody>
<tr><td class="qidx">1</td><td><span class="swatch" style="background:#f0f0ec"></span>白T_圆领</td><td><span class="swatch pr-1" style="display:inline-block"></span>花卉_001</td><td>夏季 / 花卉</td><td><span class="pill tpl">模板</span></td><td><span class="pill done">已完成</span></td><td>白T_圆领_花卉_001.png</td></tr>
<tr class="sel"><td class="qidx">2</td><td><span class="swatch" style="background:#2c3037"></span>黑T_短袖</td><td><span class="swatch pr-1" style="display:inline-block"></span>花卉_001</td><td>夏季 / 花卉</td><td><span class="pill adj">已微调</span></td><td><span class="pill wait">待导出</span></td><td>—</td></tr>
<tr><td class="qidx">3</td><td><span class="swatch" style="background:#274764"></span>藏青_长袖</td><td><span class="swatch pr-1" style="display:inline-block"></span>花卉_001</td><td>夏季 / 花卉</td><td><span class="pill tpl">模板</span></td><td><span class="pill run">导出中</span></td><td><span class="qprog"><i style="width:64%"></i></span>64%</td></tr>
<tr><td class="qidx">4</td><td><span class="swatch" style="background:#6e2a2a"></span>酒红_卫衣</td><td><span class="swatch pr-1" style="display:inline-block"></span>花卉_001</td><td>秋季 / 花卉</td><td><span class="pill tpl">模板</span></td><td><span class="pill err">失败</span></td><td>印花超出画布边界,已跳过</td></tr>
<tr><td class="qidx">5</td><td><span class="swatch" style="background:#3a623d"></span>军绿_圆领</td><td><span class="swatch pr-1" style="display:inline-block"></span>花卉_001</td><td>秋季 / 花卉</td><td><span class="pill tpl">模板</span></td><td><span class="pill wait">待导出</span></td><td>—</td></tr>
<tr><td class="qidx">6</td><td><span class="swatch" style="background:#bba258"></span>卡其_POLO</td><td><span class="swatch pr-1" style="display:inline-block"></span>花卉_001</td><td>秋季 / 花卉</td><td><span class="pill adj">已微调</span></td><td><span class="pill wait">待导出</span></td><td>—</td></tr>
<tr><td class="qidx">7</td><td><span class="swatch" style="background:#2c3037"></span>黑T_宽松</td><td><span class="swatch pr-1" style="display:inline-block"></span>花卉_001</td><td>基础 / 花卉</td><td><span class="pill tpl">模板</span></td><td><span class="pill wait">待导出</span></td><td>—</td></tr>
</tbody>
</table>
</div>
</div>
<!-- STATUS -->
<div class="status">
<div class="s"><span class="dot g"></span>衣服:<b>白T_圆领.png</b></div><div class="vsep"></div>
<div class="s">印花:<b>花卉_001.png</b></div><div class="vsep"></div>
<div class="s">模板:<b>标准居中印花 · T恤</b></div>
<div class="sp"></div>
<div class="s"><span class="dot a"></span>批量导出中 12/60</div><div class="vsep"></div>
<div class="s" style="color:#c42b1c"><span class="dot r"></span>1 项失败</div><div class="vsep"></div>
<div class="s log">✓ 已导出 白T_圆领_花卉_001.png</div>
</div>
</div>
</body>
</html>