Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f056547160 | |||
| de3eb1d06a | |||
| 66b761314b | |||
| ab99e3bf2f | |||
| e3b48e2614 | |||
| 9a9c7eb86d | |||
| 5b316a2399 | |||
| 48262d6233 | |||
| 062c8b3445 |
@@ -0,0 +1,43 @@
|
|||||||
|
# 自动检测文本文件并统一换行符
|
||||||
|
* text=auto eol=lf
|
||||||
|
|
||||||
|
# 源码强制使用 LF(跨平台一致)
|
||||||
|
*.ts text eol=lf
|
||||||
|
*.tsx text eol=lf
|
||||||
|
*.js text eol=lf
|
||||||
|
*.jsx text eol=lf
|
||||||
|
*.mjs text eol=lf
|
||||||
|
*.cjs text eol=lf
|
||||||
|
*.json text eol=lf
|
||||||
|
*.css text eol=lf
|
||||||
|
*.html text eol=lf
|
||||||
|
*.md text eol=lf
|
||||||
|
*.svg text eol=lf
|
||||||
|
|
||||||
|
# 配置类(统一 LF)
|
||||||
|
*.yml text eol=lf
|
||||||
|
*.yaml text eol=lf
|
||||||
|
*.toml text eol=lf
|
||||||
|
*.conf text eol=lf
|
||||||
|
|
||||||
|
# Windows 专用脚本保持 CRLF
|
||||||
|
*.bat text eol=crlf
|
||||||
|
*.cmd text eol=crlf
|
||||||
|
|
||||||
|
# 二进制文件,不做换行符转换
|
||||||
|
*.png binary
|
||||||
|
*.jpg binary
|
||||||
|
*.jpeg binary
|
||||||
|
*.gif binary
|
||||||
|
*.webp binary
|
||||||
|
*.ico binary
|
||||||
|
*.woff binary
|
||||||
|
*.woff2 binary
|
||||||
|
*.ttf binary
|
||||||
|
*.eot binary
|
||||||
|
*.otf binary
|
||||||
|
*.mp4 binary
|
||||||
|
*.mp3 binary
|
||||||
|
*.pdf binary
|
||||||
|
*.zip binary
|
||||||
|
*.gz binary
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -381,108 +381,6 @@ export default function EcommerceClonePanel({
|
|||||||
</section>
|
</section>
|
||||||
) : null}
|
) : null}
|
||||||
|
|
||||||
{cloneOutput === "hot" ? (
|
|
||||||
<section className="clone-ai-replicate-panel" aria-label="爆款图复刻设置">
|
|
||||||
<div className="clone-ai-dynamic-head">
|
|
||||||
<strong>爆款图参考设置</strong>
|
|
||||||
<span>随生成模式切换</span>
|
|
||||||
</div>
|
|
||||||
<div className="clone-ai-replicate-section">
|
|
||||||
<span className="clone-ai-replicate-title">参考内容</span>
|
|
||||||
<div className="clone-ai-replicate-tabs" role="tablist" aria-label="参考内容来源">
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
className={cloneReferenceMode === "upload" ? "is-active" : ""}
|
|
||||||
aria-selected={cloneReferenceMode === "upload"}
|
|
||||||
onClick={() => setCloneReferenceMode("upload")}
|
|
||||||
>
|
|
||||||
上传参考图
|
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
className={cloneReferenceMode === "link" ? "is-active" : ""}
|
|
||||||
aria-selected={cloneReferenceMode === "link"}
|
|
||||||
onClick={() => setCloneReferenceMode("link")}
|
|
||||||
>
|
|
||||||
导入链接
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
{cloneReferenceMode === "upload" ? (
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
className={`clone-ai-replicate-upload${isCloneReferenceDragging ? " is-dragging" : ""}${cloneReferenceImages.length ? " has-files" : ""}`}
|
|
||||||
onClick={() => cloneReferenceInputRef.current?.click()}
|
|
||||||
onDragOver={handleCloneReferenceDragOver}
|
|
||||||
onDragLeave={handleCloneReferenceDragLeave}
|
|
||||||
onDrop={handleCloneReferenceDrop}
|
|
||||||
>
|
|
||||||
{cloneReferenceImages.length ? (
|
|
||||||
<>
|
|
||||||
<div className="clone-ai-replicate-files">
|
|
||||||
{cloneReferenceImages.map((item) => (
|
|
||||||
<figure
|
|
||||||
key={item.id}
|
|
||||||
className="clone-ai-replicate-file"
|
|
||||||
onMouseEnter={(e) => handleFileMouseEnter(item.src, e)}
|
|
||||||
onMouseLeave={handleFileMouseLeave}
|
|
||||||
>
|
|
||||||
<img src={item.src} alt="" />
|
|
||||||
</figure>
|
|
||||||
))}
|
|
||||||
</div>
|
|
||||||
<span className="clone-ai-replicate-add-more">
|
|
||||||
<CloudUploadOutlined />
|
|
||||||
点击继续上传文件
|
|
||||||
</span>
|
|
||||||
</>
|
|
||||||
) : (
|
|
||||||
<span>
|
|
||||||
<CloudUploadOutlined />
|
|
||||||
<span className="clone-ai-replicate-upload-text">拖拽或点击上传参考图</span>
|
|
||||||
</span>
|
|
||||||
)}
|
|
||||||
<em>{cloneReferenceImages.length ? `已选 ${cloneReferenceImages.length}/${maxCloneReferenceImages}` : `最多 ${maxCloneReferenceImages} 张`}</em>
|
|
||||||
{isCloneReferenceDragging ? (
|
|
||||||
<div className="clone-ai-replicate-upload-overlay">
|
|
||||||
<CloudUploadOutlined />
|
|
||||||
<span>释放文件以上传</span>
|
|
||||||
</div>
|
|
||||||
) : null}
|
|
||||||
</button>
|
|
||||||
) : (
|
|
||||||
<label className="clone-ai-replicate-link">
|
|
||||||
<input placeholder="粘贴商品图或详情页链接" />
|
|
||||||
</label>
|
|
||||||
)}
|
|
||||||
<input
|
|
||||||
ref={cloneReferenceInputRef}
|
|
||||||
type="file"
|
|
||||||
accept="image/jpeg,image/png,image/webp"
|
|
||||||
multiple
|
|
||||||
onChange={handleCloneReferenceUpload}
|
|
||||||
aria-label="上传参考图片"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div className="clone-ai-replicate-section">
|
|
||||||
<span className="clone-ai-replicate-title">复刻程度</span>
|
|
||||||
<div className="clone-ai-replicate-levels" role="toolbar" aria-label="复刻程度">
|
|
||||||
{cloneReplicateLevelOptions.map((option) => (
|
|
||||||
<button
|
|
||||||
key={option.key}
|
|
||||||
type="button"
|
|
||||||
className={cloneReplicateLevel === option.key ? "is-active" : ""}
|
|
||||||
aria-pressed={cloneReplicateLevel === option.key}
|
|
||||||
onClick={() => setCloneReplicateLevel(option.key)}
|
|
||||||
>
|
|
||||||
<strong>{option.title}</strong>
|
|
||||||
<span>{option.desc}</span>
|
|
||||||
</button>
|
|
||||||
))}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
) : null}
|
|
||||||
|
|
||||||
{cloneOutput === "set" ? (
|
{cloneOutput === "set" ? (
|
||||||
<section className="clone-ai-count-panel" aria-label="套图图片数量">
|
<section className="clone-ai-count-panel" aria-label="套图图片数量">
|
||||||
<div className="clone-ai-dynamic-head">
|
<div className="clone-ai-dynamic-head">
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user