feat: 实现邮箱验证码登录和腾讯云SES集成
- 实现邮箱验证码登录功能,支持自动注册新用户 - 修复验证码生成逻辑,确保前后端验证码一致 - 添加腾讯云SES webhook回调接口,支持6种邮件事件 - 配置ngrok内网穿透支持,允许外部访问 - 优化登录页面UI,采用全屏背景和居中布局 - 清理调试代码和未使用的导入 - 添加完整的配置文档和测试脚本
This commit is contained in:
@@ -5,10 +5,10 @@
|
||||
<div class="navbar-content">
|
||||
<div class="logo">Logo</div>
|
||||
<nav class="nav-links">
|
||||
<a href="#" class="nav-link">文生视频</a>
|
||||
<a href="#" class="nav-link">图生视频</a>
|
||||
<a href="#" class="nav-link">分镜视频</a>
|
||||
<a href="#" class="nav-link">订阅套餐</a>
|
||||
<a href="#" class="nav-link" @click="scrollToSection('features')">文生视频</a>
|
||||
<a href="#" class="nav-link" @click="scrollToSection('features')">图生视频</a>
|
||||
<a href="#" class="nav-link" @click="scrollToSection('features')">分镜视频</a>
|
||||
<a href="#" class="nav-link" @click="scrollToSection('features')">订阅套餐</a>
|
||||
</nav>
|
||||
<button class="nav-button" @click="goToLogin">开始体验</button>
|
||||
</div>
|
||||
@@ -24,10 +24,35 @@
|
||||
<span class="bright-text">灵感</span><span class="fade-text">变现。</span>
|
||||
</span>
|
||||
</h1>
|
||||
<p class="subtitle">使用邮箱验证码登录,安全便捷</p>
|
||||
<button class="main-button" @click="goToLogin">立即体验</button>
|
||||
</main>
|
||||
|
||||
<!-- 背景光影效果已删除 -->
|
||||
<!-- 功能说明 -->
|
||||
<section id="features" class="features-section">
|
||||
<div class="features-container">
|
||||
<h2 class="features-title">核心功能</h2>
|
||||
<div class="features-grid">
|
||||
<div class="feature-card">
|
||||
<h3>文生视频</h3>
|
||||
<p>输入文字描述,AI自动生成高质量视频内容</p>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<h3>图生视频</h3>
|
||||
<p>上传图片,AI智能分析并生成动态视频</p>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<h3>分镜视频</h3>
|
||||
<p>专业分镜制作,打造电影级视频效果</p>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<h3>订阅套餐</h3>
|
||||
<p>灵活的价格方案,满足不同创作需求</p>
|
||||
</div>
|
||||
</div>
|
||||
<button class="features-button" @click="goToLogin">开始创作</button>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -40,6 +65,14 @@ const router = useRouter()
|
||||
const goToLogin = () => {
|
||||
router.push('/login')
|
||||
}
|
||||
|
||||
// 滚动到功能说明部分
|
||||
const scrollToSection = (sectionId) => {
|
||||
const element = document.getElementById(sectionId)
|
||||
if (element) {
|
||||
element.scrollIntoView({ behavior: 'smooth' })
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
@@ -148,6 +181,14 @@ const goToLogin = () => {
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.subtitle {
|
||||
font-size: 1.2rem;
|
||||
color: rgba(255, 255, 255, 0.8);
|
||||
margin-bottom: 40px;
|
||||
font-weight: 400;
|
||||
text-shadow: 0 2px 10px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.title-line {
|
||||
display: block;
|
||||
text-align: center;
|
||||
@@ -228,4 +269,82 @@ const goToLogin = () => {
|
||||
font-size: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
/* 功能说明部分 */
|
||||
.features-section {
|
||||
background: rgba(0, 0, 0, 0.8);
|
||||
padding: 80px 20px;
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.features-container {
|
||||
max-width: 1200px;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.features-title {
|
||||
font-size: 3rem;
|
||||
color: white;
|
||||
margin-bottom: 60px;
|
||||
font-weight: 700;
|
||||
text-shadow: 0 2px 10px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.features-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
|
||||
gap: 30px;
|
||||
margin-bottom: 60px;
|
||||
}
|
||||
|
||||
.feature-card {
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
backdrop-filter: blur(10px);
|
||||
border: 1px solid rgba(255, 255, 255, 0.2);
|
||||
border-radius: 20px;
|
||||
padding: 40px 30px;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.feature-card:hover {
|
||||
transform: translateY(-10px);
|
||||
background: rgba(255, 255, 255, 0.15);
|
||||
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.feature-card h3 {
|
||||
font-size: 1.5rem;
|
||||
color: white;
|
||||
margin-bottom: 15px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.feature-card p {
|
||||
color: rgba(255, 255, 255, 0.8);
|
||||
line-height: 1.6;
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.features-button {
|
||||
background: linear-gradient(135deg, #4A9EFF 0%, #6B73FF 100%);
|
||||
color: white;
|
||||
border: none;
|
||||
padding: 18px 40px;
|
||||
font-size: 1.1rem;
|
||||
font-weight: 600;
|
||||
border-radius: 50px;
|
||||
cursor: pointer;
|
||||
transition: all 0.3s ease;
|
||||
box-shadow: 0 10px 30px rgba(74, 158, 255, 0.3);
|
||||
}
|
||||
|
||||
.features-button:hover {
|
||||
background: linear-gradient(135deg, #6B73FF 0%, #4A9EFF 100%);
|
||||
transform: translateY(-3px);
|
||||
box-shadow: 0 15px 40px rgba(74, 158, 255, 0.4);
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user