feat: 邮箱注册验证 + 9项功能修复与优化

【认证系统】
- 新增邮箱验证码注册/登录流程 (sendEmailCode / verifyEmail / forgotPassword / resetPassword)
- register-email 现在需要验证码
- 服务端新增 email_verification_codes 表 + patch-email-verification.js
- App.tsx 登录后 emailVerified 检查提醒
- keyServerClient token 显式传递修复 401 错误

【电商模块】
- 自动推进: 策划完成后自动生成分镜图/视频
- 模特图选项 (性别/年龄/种族/体型/场景) 注入 AI 提示词
- 任务持久化指纹修复 (图片数量替代 blob URL)
- 新增「视频换装」入口 (happyhorse-1.0-video-edit)

【剧本评分】
- 新增 .docx/.doc Word 文档支持 (ZIP解压+XML提取)
- 历史记录支持点击查看/恢复评测结果

【画布】
- ReactFlow 节点禁止内置拖拽避免冲突
- 连接线拖拽弹窗优化 (预览线不消失, 弹窗跟踪鼠标)

【页面修复】
- 首页轮播图改为 aspect-ratio: 16/9 解决尺寸问题
- 资产库新增悬停删除按钮
- scriptEvalClient 改用服务端 /api/ai/chat 端点
- TokenUsagePage 未登录跳过 API 调用
This commit is contained in:
2026-06-03 20:19:07 +08:00
parent 56dabf1f7d
commit f5a75074a4
30 changed files with 1697 additions and 1249 deletions
+48
View File
@@ -2809,6 +2809,26 @@
line-height: 1.6;
}
.clone-ai-retry-btn {
display: inline-flex;
align-items: center;
gap: 8px;
min-height: 40px;
padding: 0 20px;
border: 1px solid rgba(var(--accent-rgb), 0.32);
border-radius: 12px;
background: rgba(var(--accent-rgb), 0.12);
color: var(--accent);
font-weight: 900;
cursor: pointer;
transition: background 0.15s, transform 0.15s;
}
.clone-ai-retry-btn:hover {
background: rgba(var(--accent-rgb), 0.22);
transform: translateY(-1px);
}
.product-clone-page[data-tool="clone"] .clone-ai-preview-showcase {
display: grid;
grid-template-columns: minmax(210px, 300px) 54px minmax(330px, 560px);
@@ -7933,3 +7953,31 @@
.clone-ai-adwizard__risk.is-medium { color: #faad14; }
.clone-ai-adwizard__risk.is-high { color: #ff4d4f; }
.clone-ai-adwizard__issues { margin: 0; padding-left: 16px; font-size: 12px; display: flex; flex-direction: column; gap: 4px; }
.clone-ai-video-outfit-upload {
display: flex;
align-items: center;
gap: 10px;
margin-top: 6px;
}
.clone-ai-video-outfit-upload-btn {
padding: 7px 16px;
border: 1px solid var(--border-subtle);
border-radius: 8px;
background: var(--bg-inset);
color: var(--fg-body);
font-size: 13px;
cursor: pointer;
transition: border-color 150ms, background 150ms;
}
.clone-ai-video-outfit-upload-btn:hover {
border-color: var(--border-default);
background: var(--bg-hover);
}
.clone-ai-video-outfit-info {
font-size: 12px;
color: var(--accent);
}