feat: 完成管理员密码登录修复和项目清理

- 修复BCryptPasswordEncoder密码验证问题
- 实现密码设置提示弹窗功能(仅对无密码用户显示一次)
- 优化修改密码逻辑和验证流程
- 更新Welcome页面背景样式
- 清理临时SQL文件和测试代码
- 移动数据库备份文件到database/backups目录
- 删除不必要的MD文档和临时文件
This commit is contained in:
AIGC Developer
2025-11-21 16:10:00 +08:00
parent 2961d2b0d0
commit dbd06435cb
384 changed files with 8064 additions and 5080 deletions

View File

@@ -16,7 +16,13 @@
"Bash(timeout:*)",
"Bash(powershell.exe -Command \"Start-Sleep -Seconds 5\")",
"Bash(findstr:*)",
"Bash(powershell.exe -Command \"Get-Process node | Stop-Process -Force\")"
"Bash(powershell.exe -Command \"Get-Process node | Stop-Process -Force\")",
"Bash(npm run build:*)",
"Bash(dir:*)",
"Bash(cmd.exe /c mvnw.cmd clean install -DskipTests)",
"Bash(powershell.exe -Command \"cd ''C:\\Users\\UI\\Desktop\\AIGC\\demo''; .\\mvnw.cmd clean compile -DskipTests\")",
"Bash(powershell.exe -Command \"Get-Process java | Stop-Process -Force\")",
"Bash(powershell.exe -Command \"Start-Sleep -Seconds 3\")"
],
"deny": [],
"ask": []

View File

@@ -1,194 +0,0 @@
# 登录验证码403错误修复总结
## 问题描述
从宝塔面板日志和前端截图显示:
- 请求地址:`POST http://43.156.12.172/api/verification/email/send`
- 错误状态403 Forbidden
- 问题:无法发送邮箱验证码
## 根本原因
1. **CORS跨域问题**:后端 SecurityConfig 中没有配置允许 43.x.x.x IP段的跨域访问
2. **JWT过滤器问题**:虽然配置了 `permitAll()`,但 JWT 过滤器仍然会处理所有请求,包括登录请求
3. **前端token处理问题**:登录请求也携带了 token导致认证流程混乱
## 修复方案
### 1. 后端修改
#### 修改1SecurityConfig.java - CORS配置
**文件路径**: `src/main/java/com/example/demo/config/SecurityConfig.java`
**修改位置**: 第136-140行
添加对云服务器IP段的CORS支持
```java
// 云服务器 IP 段43.x.x.x
"http://43.*.*.*:*",
"https://43.*.*.*:*",
"http://43.*.*.*",
"https://43.*.*.*",
```
#### 修改2JwtAuthenticationFilter.java - 跳过公开路径
**文件路径**: `src/main/java/com/example/demo/security/JwtAuthenticationFilter.java`
**修改位置**: 第40-122行
添加公开路径列表JWT过滤器直接放行这些路径
```java
// 定义不需要JWT验证的路径
String[] publicPaths = {
"/api/auth/login",
"/api/auth/login/email",
"/api/auth/register",
"/api/verification/",
"/api/public/",
"/api/email/",
"/api/payments/alipay/notify",
"/api/payments/alipay/return",
"/swagger-ui",
"/v3/api-docs",
"/api-docs"
};
// 如果是公开路径直接放行不进行JWT验证
if (isPublicPath) {
filterChain.doFilter(request, response);
return;
}
```
### 2. 前端修改
#### 修改1request.js - 请求拦截器
**文件路径**: `frontend/src/api/request.js`
**修改位置**: 第22-58行
登录相关请求不携带token
```javascript
// 登录相关的接口不需要添加token
const loginUrls = [
'/auth/login',
'/auth/login/email',
'/auth/register',
'/verification/email/send',
'/verification/email/verify',
'/verification/email/dev-set',
'/public/'
]
// 检查当前请求是否是登录相关接口
const isLoginRequest = loginUrls.some(url => config.url.includes(url))
if (!isLoginRequest) {
// 非登录请求才添加Authorization头
const token = sessionStorage.getItem('token')
if (token && token !== 'null' && token.trim() !== '') {
config.headers.Authorization = `Bearer ${token}`
}
}
```
#### 修改2request.js - 响应拦截器
**文件路径**: `frontend/src/api/request.js`
**修改位置**: 第60-177行
区分登录请求和非登录请求的错误处理:
- 只有非登录请求出现401/302错误时才清除token并跳转
- 登录请求的403错误显示具体错误信息不显示"权限不足"
## 部署步骤
### 1. 重新编译后端
```bash
cd C:\Users\UI\Desktop\AIGC\demo
mvn clean package -DskipTests
```
### 2. 停止旧的后端服务
在宝塔面板中停止当前运行的 Java 应用
### 3. 上传新的 JAR 包
`target/demo-0.0.1-SNAPSHOT.jar` 上传到服务器
### 4. 重启后端服务
在宝塔面板中启动 Java 应用,或使用命令:
```bash
java -jar demo-0.0.1-SNAPSHOT.jar
```
### 5. 重新编译前端(可选)
```bash
cd frontend
npm run build
```
### 6. 清除浏览器缓存
清除浏览器的缓存和 sessionStorage
## 验证步骤
1. 访问登录页面:`http://43.156.12.172`
2. 输入邮箱地址
3. 点击"获取验证码"按钮
4. 应该看到以下日志:
```
JWT过滤器: 跳过公开路径 /api/verification/email/send
```
5. 验证码应该成功发送不再出现403错误
6. 输入验证码,完成登录
7. 登录成功后所有后续请求都会自动携带token
## 技术要点
### 登录流程
1. **登录前**所有登录相关的请求发送验证码、登录、注册不携带token
2. **登录中**后端验证验证码生成JWT token返回
3. **登录后**前端保存token所有后续请求自动携带token进行认证
### 安全性
- JWT过滤器只处理需要认证的请求
- 公开路径登录、注册、验证码完全跳过JWT验证
- CORS配置支持多种环境本地开发、内网、云服务器、ngrok
### 错误处理
- 登录请求失败不会触发"重新登录"跳转
- 非登录请求未认证才会跳转到登录页
- 403错误根据请求类型显示不同提示
## 预期效果
修复后,登录流程应该如下:
1. ✅ 访问登录页面正常
2. ✅ 点击"获取验证码"成功发送不再403
3. ✅ 输入验证码后登录成功
4. ✅ 登录后所有功能正常使用
5. ✅ Token过期或无效时自动跳转登录页
## 注意事项
1. 确保后端和前端都重新编译部署
2. 清除浏览器缓存避免旧代码影响
3. 检查宝塔面板日志确认修改生效
4. 如果还有问题,检查后端日志中的具体错误信息
## 相关文件清单
### 后端文件
- `src/main/java/com/example/demo/config/SecurityConfig.java`
- `src/main/java/com/example/demo/security/JwtAuthenticationFilter.java`
### 前端文件
- `frontend/src/api/request.js`
### 配置文件
- `frontend/.env.production`
- `frontend/vite.config.js`
## 问题排查
如果修复后仍有问题,请检查:
1. **后端日志**:查看是否有异常堆栈
2. **CORS头**:使用浏览器开发者工具查看响应头
3. **请求头**:确认登录请求没有 Authorization 头
4. **网络**:确认服务器防火墙允许访问
5. **端口**确认后端监听在正确的端口8080

View File

@@ -1,53 +0,0 @@
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
public class PasswordChecker {
public static void main(String[] args) {
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
String hash = "$2a$10$N.zmdr9k7uOCQb376NoUnuTJ8iAt6Z5EHsM8lE9lBOsl7iKTVEFDi";
// 测试不同的密码
String[] passwords = {"demo", "admin", "password", "123456"};
for (String password : passwords) {
boolean matches = encoder.matches(password, hash);
System.out.println("Password '" + password + "' matches: " + matches);
}
}
}

View File

@@ -1,313 +0,0 @@
# 项目路由分析报告
## 统一前缀路由
### API 路由前缀
**主要前缀:`/api/`**
所有后端 REST API 接口统一使用 `/api/` 作为前缀。
## 详细路由分类
### 1. REST API 路由(`/api/`
#### 认证授权模块
- `/api/auth/**` - 用户认证(登录、注册)
- `/api/verification/**` - 验证码服务
- `/api/email/**` - 邮件服务
- `/api/tencent/**` - 腾讯云服务集成
#### 视频生成模块
- `/api/text-to-video/**` - 文生视频
- `/api/image-to-video/**` - 图生视频
- `/api/storyboard-video/**` - 分镜视频
#### 用户作品模块
- `/api/works/**` - 用户作品管理
#### 支付订单模块
- `/api/payments/**` - 支付相关
- `/api/payments/alipay/**` - 支付宝支付
- `/api/orders/**` - 订单管理
#### 会员积分模块
- `/api/members/**` - 会员管理
- `/api/points/**` - 积分系统
#### 任务管理模块
- `/api/task-queue/**` - 任务队列
- `/api/task-status/**` - 任务状态
- `/api/cleanup/**` - 任务清理
#### 管理后台模块
- `/api/admin/**` - 管理员接口
- `/api/dashboard/**` - 数据仪表盘
- `/api/analytics/**` - 数据分析
#### 系统设置模块
- `/api/api-key/**` - API 密钥管理
- `/api/prompt/**` - 提示词优化
#### 测试诊断模块
- `/api/test/**` - 测试接口
- `/api/diagnostic/**` - 诊断接口
- `/api/polling/**` - 轮询测试
- `/api/polling-diagnostic/**` - 轮询诊断
- `/api/monitor/**` - 监控接口
#### 公共接口
- `/api/public/**` - 公共API无需认证
- `/api/health/**` - 健康检查接口
### 2. 页面路由(非 API
#### 用户页面
- `/login` - 登录页面
- `/register` - 注册页面
- `/payment/**` - 支付页面
- `/orders/**` - 订单页面
#### 管理员页面
- `/settings/**` - 系统设置页面(管理员)
- `/users/**` - 用户管理页面(管理员)
#### 开发工具
- `/h2-console/**` - H2 数据库控制台(开发环境)
### 3. API 文档路由
- `/swagger-ui.html` - Swagger UI 主页
- `/swagger-ui/**` - Swagger UI 资源
- `/v3/api-docs/**` - OpenAPI 文档 JSON
- `/swagger-resources/**` - Swagger 资源
- `/webjars/**` - Web 资源库
### 4. 静态资源路由
- `/css/**` - CSS 样式文件
- `/js/**` - JavaScript 文件
- `/uploads/**` - 上传文件
## 路由代理配置
### Nginx 代理配置
#### 1. API 代理(推荐配置)
```nginx
# API 代理到后端
location /api/ {
proxy_pass http://172.22.0.1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 超时设置(视频生成可能需要较长时间)
proxy_connect_timeout 30s;
proxy_send_timeout 900s;
proxy_read_timeout 900s;
# 支持大文件上传
client_max_body_size 600M;
}
```
#### 2. Swagger UI 代理(可选,用于生产环境)
```nginx
# API 文档代理
location ~ ^/(swagger-ui|v3/api-docs|swagger-resources|webjars) {
proxy_pass http://172.22.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
```
#### 3. 上传文件代理
```nginx
# 上传文件代理
location /uploads/ {
proxy_pass http://172.22.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 缓存设置
expires 7d;
add_header Cache-Control "public, immutable";
}
```
#### 4. WebSocket 支持(如果需要)
```nginx
location /ws/ {
proxy_pass http://172.22.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
```
### Apache 代理配置(如果使用 Apache
```apache
# 启用代理模块
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
# API 代理
ProxyPass /api/ http://172.22.0.1:8080/
ProxyPassReverse /api/ http://172.22.0.1:8080/
# Swagger UI 代理
ProxyPass /swagger-ui/ http://172.22.0.1:8080/swagger-ui/
ProxyPassReverse /swagger-ui/ http://172.22.0.1:8080/swagger-ui/
ProxyPass /v3/api-docs/ http://172.22.0.1:8080/v3/api-docs/
ProxyPassReverse /v3/api-docs/ http://172.22.0.1:8080/v3/api-docs/
```
## 权限配置
### 无需认证(公开访问)
```
/login
/register
/api/public/**
/api/auth/**
/api/verification/**
/api/email/**
/api/tencent/**
/api/test/**
/api/health/**
/api/orders/stats
/api/payments/alipay/notify
/api/payments/alipay/return
/swagger-ui/**
/v3/api-docs/**
```
### 需要认证
```
/api/orders/**(除 /api/orders/stats
/api/payments/**(除支付宝回调)
/api/image-to-video/**
/api/text-to-video/**
/api/works/**
/api/points/**
/api/members/**
```
### 需要管理员权限
```
/api/dashboard/**
/api/admin/**
/settings/**
/users/**
```
## 完整 Nginx 配置示例
```nginx
server {
listen 80;
server_name localhost;
root /www/wwwroot/your-domain.com;
index index.html index.htm;
# 开启gzip压缩
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;
# 前端路由支持History模式
location / {
try_files $uri $uri/ /index.html;
}
# API 代理到后端(主要路由)
location /api/ {
proxy_pass http://172.22.0.1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 超时设置
proxy_connect_timeout 30s;
proxy_send_timeout 900s;
proxy_read_timeout 900s;
# 支持大文件上传
client_max_body_size 600M;
}
# Swagger UI 代理
location ~ ^/(swagger-ui|v3/api-docs|swagger-resources|webjars) {
proxy_pass http://172.22.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# 上传文件代理
location /uploads/ {
proxy_pass http://172.22.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
expires 7d;
add_header Cache-Control "public, immutable";
}
# 静态资源缓存
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# 禁止访问隐藏文件
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
}
```
## 宝塔面板配置
在宝塔面板中配置反向代理:
1. 进入网站设置 → 反向代理
2. 添加反向代理规则:
- **代理名称**: API代理
- **目标URL**: http://172.22.0.1:8080
- **发送域名**: $host
- **代理路径**: /api/
- **缓存**: 关闭
## 总结
- **统一API前缀**: `/api/`
- **后端服务地址**: `http://172.22.0.1:8080`
- **主要代理路径**: `/api/``http://172.22.0.1:8080/`
- **文档访问**: `/swagger-ui.html`
- **特殊配置**: 需要支持大文件上传600M和长时间请求15分钟

View File

@@ -0,0 +1,8 @@
-- 为 storyboard_video_tasks 表添加 duration 字段
-- 执行时间2025-11-19
ALTER TABLE storyboard_video_tasks
ADD COLUMN duration INT NOT NULL DEFAULT 10 COMMENT '视频时长(秒)' AFTER hd_mode;
-- 更新现有记录设置默认值为10秒
UPDATE storyboard_video_tasks SET duration = 10 WHERE duration IS NULL OR duration = 0;

View File

@@ -0,0 +1,9 @@
-- 修复 TaskStatus 表的 result_url 字段长度问题
-- 日期: 2025-11-19
-- 原因: Base64 编码的分镜图超过 MEDIUMTEXT 限制
-- 修改 task_status 表的 result_url 字段为 LONGTEXT
ALTER TABLE task_status MODIFY COLUMN result_url LONGTEXT COMMENT '任务结果URL或Base64数据';
-- 验证修改
SHOW FULL COLUMNS FROM task_status WHERE Field = 'result_url';

View File

@@ -0,0 +1,16 @@
<svg width="104" height="104" viewBox="0 0 104 104" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_601_168)">
<circle cx="52" cy="52" r="51.5" fill="#1BAFFF" stroke="white"/>
<path d="M16.9548 9.33656C10.1123 10.3489 3.30243 13.5493 -1.94346 18.2193C-7.90619 23.5097 -12.1746 31.8372 -13.2498 40.3607C-13.5431 42.6467 -13.7386 43.2672 -14.1622 43.2672C-15.4003 43.2672 -20.2226 45.2592 -22.5686 46.7288C-34.7873 54.3379 -38.6647 70.601 -31.2032 82.8801C-27.1303 89.5094 -20.5485 94.0161 -13.2173 95.1917L-10.7409 95.5836L-9.6331 98.0329C-5.69053 106.818 1.83619 113.12 10.9595 115.243C16.3031 116.484 22.0378 116.19 27.3488 114.427C32.8554 112.565 37.7755 109.136 41.1967 104.728L43.1843 102.148L45.1067 102.899C48.3976 104.27 51.6559 104.76 55.8591 104.564C60.2904 104.368 62.5061 103.813 66.4487 101.919C75.018 97.739 80.4594 89.4115 81.1437 79.2878L81.3718 76.218L83.4897 74.1933C87.3345 70.5031 89.7131 66.4536 91.0816 61.3918C92.0591 57.7342 92.0591 51.9866 91.0816 48.329C88.5727 38.8585 81.665 31.8372 72.2485 29.1593C70.1631 28.5715 68.925 28.4409 65.3083 28.4735C61.4634 28.4735 60.5511 28.6042 58.14 29.3553C56.6085 29.8451 55.1423 30.3023 54.8816 30.3677C54.5558 30.4983 54.1648 30.0084 53.6435 28.8981C47.4527 15.574 31.715 7.18121 16.9548 9.33656ZM20.6693 43.5937C23.113 44.2795 24.7748 45.6838 25.9152 48.0351C26.644 49.5175 27.023 51.1474 27.023 52.7993V62.5348V72.2702C27.023 73.9221 26.644 75.552 25.9152 77.0345C24.7422 79.4511 23.0804 80.8227 20.5064 81.5085C18.8772 81.9657 15.4885 81.6718 14.0875 80.9533C12.2954 80.0716 10.6011 78.1775 9.91682 76.3487C9.29774 74.7158 9.26515 73.7688 9.26515 62.7307C9.26515 49.472 9.3629 48.6556 11.4156 46.2716C13.6313 43.659 17.2155 42.614 20.6693 43.5937ZM42.0438 43.757C44.1943 44.3775 46.1493 46.1083 47.0942 48.231C47.8762 49.9618 47.8762 49.9618 47.8762 62.5348C47.8762 75.1077 47.8762 75.1077 47.0942 76.8385C45.3022 80.8227 40.7405 82.6841 36.1137 81.3125C33.9306 80.6594 32.3015 79.2225 31.1936 76.9692L30.2813 75.1077V62.5348V49.9618L31.1936 48.1004C33.1486 44.0836 37.417 42.3854 42.0438 43.757Z" fill="#151515"/>
<path d="M20.6693 43.5937C23.113 44.2795 24.7748 45.6838 25.9152 48.0351C26.644 49.5175 27.023 51.1474 27.023 52.7993V62.5348V72.2702C27.023 73.9221 26.644 75.552 25.9152 77.0345C24.7422 79.4511 23.0804 80.8227 20.5064 81.5085C18.8772 81.9657 15.4885 81.6718 14.0875 80.9533C12.2954 80.0716 10.6011 78.1775 9.91682 76.3487C9.29774 74.7158 9.26515 73.7688 9.26515 62.7307C9.26515 49.472 9.3629 48.6556 11.4156 46.2716C13.6313 43.659 17.2155 42.614 20.6693 43.5937Z" fill="#151515"/>
<path d="M42.0438 43.757C44.1943 44.3775 46.1493 46.1083 47.0942 48.231C47.8762 49.9618 47.8762 49.9618 47.8762 62.5348C47.8762 75.1077 47.8762 75.1077 47.0942 76.8385C45.3022 80.8227 40.7405 82.6841 36.1137 81.3125C33.9306 80.6594 32.3015 79.2225 31.1936 76.9692L30.2813 75.1077V62.5348V49.9618L31.1936 48.1004C33.1486 44.0836 37.417 42.3854 42.0438 43.757Z" fill="#151515"/>
<rect x="36.3332" y="45.9877" width="7.92593" height="17.1728" rx="3.96296" fill="white"/>
<rect x="49.543" y="45.9875" width="7.92593" height="17.1728" rx="3.96296" fill="white"/>
</g>
<rect x="0.5" y="0.5" width="103" height="103" rx="51.5" stroke="white"/>
<defs>
<clipPath id="clip0_601_168">
<rect width="104" height="104" rx="52" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 25 KiB

View File

@@ -0,0 +1,15 @@
<svg width="194" height="41" viewBox="0 0 194 41" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M54.6165 13.6062L60.593 32.3932H60.8224L66.8111 13.6062H72.6065L64.0824 38.3335H57.3452L48.8089 13.6062H54.6165ZM75.4862 38.3335V19.788H80.6296V38.3335H75.4862ZM78.07 17.3974C77.3053 17.3974 76.6493 17.1439 76.1019 16.6368C75.5626 16.1216 75.293 15.5058 75.293 14.7895C75.293 14.0811 75.5626 13.4734 76.1019 12.9663C76.6493 12.4512 77.3053 12.1936 78.07 12.1936C78.8346 12.1936 79.4866 12.4512 80.0259 12.9663C80.5733 13.4734 80.8469 14.0811 80.8469 14.7895C80.8469 15.5058 80.5733 16.1216 80.0259 16.6368C79.4866 17.1439 78.8346 17.3974 78.07 17.3974ZM91.5836 38.6353C90.175 38.6353 88.8992 38.2731 87.7562 37.5487C86.6213 36.8162 85.7198 35.7416 85.0517 34.325C84.3916 32.9003 84.0616 31.1536 84.0616 29.0849C84.0616 26.9599 84.4037 25.1931 85.0879 23.7845C85.7721 22.3678 86.6816 21.3093 87.8166 20.6091C88.9596 19.9007 90.2112 19.5466 91.5716 19.5466C92.6099 19.5466 93.4752 19.7236 94.1674 20.0778C94.8677 20.4239 95.4312 20.8586 95.8578 21.3818C96.2924 21.8969 96.6225 22.404 96.8478 22.9031H97.0048V13.6062H102.136V38.3335H97.0652V35.3633H96.8478C96.6064 35.8785 96.2643 36.3896 95.8216 36.8967C95.3869 37.3958 94.8194 37.8103 94.1191 38.1403C93.4269 38.4703 92.5817 38.6353 91.5836 38.6353ZM93.2136 34.5423C94.0427 34.5423 94.743 34.3169 95.3145 33.8662C95.894 33.4074 96.3367 32.7674 96.6426 31.9464C96.9565 31.1254 97.1135 30.1635 97.1135 29.0608C97.1135 27.958 96.9605 27.0002 96.6547 26.1872C96.3488 25.3742 95.9061 24.7464 95.3265 24.3037C94.747 23.861 94.0427 23.6396 93.2136 23.6396C92.3684 23.6396 91.6561 23.869 91.0765 24.3278C90.497 24.7866 90.0583 25.4225 89.7605 26.2355C89.4627 27.0485 89.3137 27.9902 89.3137 29.0608C89.3137 30.1394 89.4627 31.0932 89.7605 31.9223C90.0663 32.7433 90.505 33.3872 91.0765 33.8541C91.6561 34.3129 92.3684 34.5423 93.2136 34.5423ZM106.462 38.3335V13.6062H122.834V17.9166H111.69V23.8086H121.747V28.119H111.69V38.3335H106.462ZM131.397 13.6062V38.3335H126.254V13.6062H131.397ZM143.897 38.6957C142.021 38.6957 140.399 38.2973 139.031 37.5004C137.671 36.6955 136.62 35.5766 135.88 34.1439C135.139 32.7031 134.769 31.0328 134.769 29.1332C134.769 27.2175 135.139 25.5432 135.88 24.1105C136.62 22.6697 137.671 21.5508 139.031 20.7539C140.399 19.949 142.021 19.5466 143.897 19.5466C145.772 19.5466 147.39 19.949 148.75 20.7539C150.119 21.5508 151.173 22.6697 151.914 24.1105C152.654 25.5432 153.025 27.2175 153.025 29.1332C153.025 31.0328 152.654 32.7031 151.914 34.1439C151.173 35.5766 150.119 36.6955 148.75 37.5004C147.39 38.2973 145.772 38.6957 143.897 38.6957ZM143.921 34.7113C144.774 34.7113 145.486 34.4699 146.058 33.9869C146.629 33.4959 147.06 32.8278 147.35 31.9826C147.648 31.1375 147.797 30.1756 147.797 29.097C147.797 28.0184 147.648 27.0565 147.35 26.2113C147.06 25.3662 146.629 24.6981 146.058 24.2071C145.486 23.7161 144.774 23.4706 143.921 23.4706C143.06 23.4706 142.335 23.7161 141.748 24.2071C141.168 24.6981 140.729 25.3662 140.431 26.2113C140.142 27.0565 139.997 28.0184 139.997 29.097C139.997 30.1756 140.142 31.1375 140.431 31.9826C140.729 32.8278 141.168 33.4959 141.748 33.9869C142.335 34.4699 143.06 34.7113 143.921 34.7113ZM159.562 38.3335L154.516 19.788H159.719L162.593 32.2483H162.762L165.756 19.788H170.864L173.906 32.1758H174.063L176.888 19.788H182.08L177.045 38.3335H171.6L168.413 26.6701H168.183L164.996 38.3335H159.562Z" fill="black"/>
<g clip-path="url(#clip0_1233_5144)">
<path d="M5.7406 1.64568C2.43935 1.64568 0.00938034 1.57298 0.000366208 1.64568C0.000366202 1.71906 2.11292 5.37389 4.70642 9.58611C7.28533 13.813 12.3557 22.0905 15.9545 27.9611L20.8685 35.9875C21.8796 37.6388 23.6773 38.6457 25.6136 38.6457L26.4301 38.6457C26.4301 38.6457 31.0568 38.7204 31.9965 37.2228C32.2255 36.8288 32.346 36.3807 32.3461 35.925L32.3461 21.8996L31.1801 21.8996L31.1801 26.5969C31.1801 31.1005 31.1655 31.3074 30.889 31.5861C30.7288 31.7476 30.4663 31.8801 30.306 31.8801C29.9855 31.8801 29.7811 31.5866 27.1439 27.257C26.2551 25.8039 24.0844 22.2371 22.2924 19.3312C20.5148 16.4253 17.3534 11.2596 15.2699 7.85467L11.4672 1.64568L5.7406 1.64568ZM31.6615 2.99627C31.443 4.1703 30.525 6.06354 29.6654 7.10564C28.4561 8.60263 26.4304 9.83531 24.5072 10.2316C23.4727 10.4518 23.196 10.5988 23.808 10.5988C24.0267 10.5989 24.5801 10.7012 25.0316 10.8332C28.2662 11.7578 31.0495 14.7674 31.6468 17.9816L31.8363 18.9797L32.0111 18.1135C32.5648 15.3249 34.4443 12.8151 36.9066 11.5676C38.0139 10.9952 39.2815 10.5988 39.9808 10.5988C40.6217 10.5988 40.403 10.4957 39.2084 10.2463C37.46 9.87934 36.1049 9.11623 34.6625 7.66326C33.2638 6.26901 32.5496 5.02127 32.0834 3.17205L31.8217 2.11541L31.6615 2.99627Z" fill="url(#paint0_linear_1233_5144)"/>
</g>
<defs>
<linearGradient id="paint0_linear_1233_5144" x1="23.4862" y1="5.3947" x2="32.9093" y2="11.1248" gradientUnits="userSpaceOnUse">
<stop offset="0.0001" stop-color="#33DDE5"/>
<stop offset="1" stop-color="#0F9CFF"/>
</linearGradient>
<clipPath id="clip0_1233_5144">
<rect width="40.3334" height="40.3334" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@@ -0,0 +1,15 @@
<svg width="194" height="41" viewBox="0 0 194 41" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M54.6165 13.6062L60.593 32.3932H60.8224L66.8111 13.6062H72.6065L64.0824 38.3335H57.3452L48.8089 13.6062H54.6165ZM75.4862 38.3335V19.788H80.6296V38.3335H75.4862ZM78.07 17.3974C77.3053 17.3974 76.6493 17.1439 76.1019 16.6368C75.5626 16.1216 75.293 15.5058 75.293 14.7895C75.293 14.0811 75.5626 13.4734 76.1019 12.9663C76.6493 12.4512 77.3053 12.1936 78.07 12.1936C78.8346 12.1936 79.4866 12.4512 80.0259 12.9663C80.5733 13.4734 80.8469 14.0811 80.8469 14.7895C80.8469 15.5058 80.5733 16.1216 80.0259 16.6368C79.4866 17.1439 78.8346 17.3974 78.07 17.3974ZM91.5836 38.6353C90.175 38.6353 88.8992 38.2731 87.7562 37.5487C86.6213 36.8162 85.7198 35.7416 85.0517 34.325C84.3916 32.9003 84.0616 31.1536 84.0616 29.0849C84.0616 26.9599 84.4037 25.1931 85.0879 23.7845C85.7721 22.3678 86.6816 21.3093 87.8166 20.6091C88.9596 19.9007 90.2112 19.5466 91.5716 19.5466C92.6099 19.5466 93.4752 19.7236 94.1674 20.0778C94.8677 20.4239 95.4312 20.8586 95.8578 21.3818C96.2924 21.8969 96.6225 22.404 96.8478 22.9031H97.0048V13.6062H102.136V38.3335H97.0652V35.3633H96.8478C96.6064 35.8785 96.2643 36.3896 95.8216 36.8967C95.3869 37.3958 94.8194 37.8103 94.1191 38.1403C93.4269 38.4703 92.5817 38.6353 91.5836 38.6353ZM93.2136 34.5423C94.0427 34.5423 94.743 34.3169 95.3145 33.8662C95.894 33.4074 96.3367 32.7674 96.6426 31.9464C96.9565 31.1254 97.1135 30.1635 97.1135 29.0608C97.1135 27.958 96.9605 27.0002 96.6547 26.1872C96.3488 25.3742 95.9061 24.7464 95.3265 24.3037C94.747 23.861 94.0427 23.6396 93.2136 23.6396C92.3684 23.6396 91.6561 23.869 91.0765 24.3278C90.497 24.7866 90.0583 25.4225 89.7605 26.2355C89.4627 27.0485 89.3137 27.9902 89.3137 29.0608C89.3137 30.1394 89.4627 31.0932 89.7605 31.9223C90.0663 32.7433 90.505 33.3872 91.0765 33.8541C91.6561 34.3129 92.3684 34.5423 93.2136 34.5423ZM106.462 38.3335V13.6062H122.834V17.9166H111.69V23.8086H121.747V28.119H111.69V38.3335H106.462ZM131.397 13.6062V38.3335H126.254V13.6062H131.397ZM143.897 38.6957C142.021 38.6957 140.399 38.2973 139.031 37.5004C137.671 36.6955 136.62 35.5766 135.88 34.1439C135.139 32.7031 134.769 31.0328 134.769 29.1332C134.769 27.2175 135.139 25.5432 135.88 24.1105C136.62 22.6697 137.671 21.5508 139.031 20.7539C140.399 19.949 142.021 19.5466 143.897 19.5466C145.772 19.5466 147.39 19.949 148.75 20.7539C150.119 21.5508 151.173 22.6697 151.914 24.1105C152.654 25.5432 153.025 27.2175 153.025 29.1332C153.025 31.0328 152.654 32.7031 151.914 34.1439C151.173 35.5766 150.119 36.6955 148.75 37.5004C147.39 38.2973 145.772 38.6957 143.897 38.6957ZM143.921 34.7113C144.774 34.7113 145.486 34.4699 146.058 33.9869C146.629 33.4959 147.06 32.8278 147.35 31.9826C147.648 31.1375 147.797 30.1756 147.797 29.097C147.797 28.0184 147.648 27.0565 147.35 26.2113C147.06 25.3662 146.629 24.6981 146.058 24.2071C145.486 23.7161 144.774 23.4706 143.921 23.4706C143.06 23.4706 142.335 23.7161 141.748 24.2071C141.168 24.6981 140.729 25.3662 140.431 26.2113C140.142 27.0565 139.997 28.0184 139.997 29.097C139.997 30.1756 140.142 31.1375 140.431 31.9826C140.729 32.8278 141.168 33.4959 141.748 33.9869C142.335 34.4699 143.06 34.7113 143.921 34.7113ZM159.562 38.3335L154.516 19.788H159.719L162.593 32.2483H162.762L165.756 19.788H170.864L173.906 32.1758H174.063L176.888 19.788H182.08L177.045 38.3335H171.6L168.413 26.6701H168.183L164.996 38.3335H159.562Z" fill="white"/>
<g clip-path="url(#clip0_1233_5144)">
<path d="M5.7406 1.64568C2.43935 1.64568 0.00938034 1.57298 0.000366208 1.64568C0.000366202 1.71906 2.11292 5.37389 4.70642 9.58611C7.28533 13.813 12.3557 22.0905 15.9545 27.9611L20.8685 35.9875C21.8796 37.6388 23.6773 38.6457 25.6136 38.6457L26.4301 38.6457C26.4301 38.6457 31.0568 38.7204 31.9965 37.2228C32.2255 36.8288 32.346 36.3807 32.3461 35.925L32.3461 21.8996L31.1801 21.8996L31.1801 26.5969C31.1801 31.1005 31.1655 31.3074 30.889 31.5861C30.7288 31.7476 30.4663 31.8801 30.306 31.8801C29.9855 31.8801 29.7811 31.5866 27.1439 27.257C26.2551 25.8039 24.0844 22.2371 22.2924 19.3312C20.5148 16.4253 17.3534 11.2596 15.2699 7.85467L11.4672 1.64568L5.7406 1.64568ZM31.6615 2.99627C31.443 4.1703 30.525 6.06354 29.6654 7.10564C28.4561 8.60263 26.4304 9.83531 24.5072 10.2316C23.4727 10.4518 23.196 10.5988 23.808 10.5988C24.0267 10.5989 24.5801 10.7012 25.0316 10.8332C28.2662 11.7578 31.0495 14.7674 31.6468 17.9816L31.8363 18.9797L32.0111 18.1135C32.5648 15.3249 34.4443 12.8151 36.9066 11.5676C38.0139 10.9952 39.2815 10.5988 39.9808 10.5988C40.6217 10.5988 40.403 10.4957 39.2084 10.2463C37.46 9.87934 36.1049 9.11623 34.6625 7.66326C33.2638 6.26901 32.5496 5.02127 32.0834 3.17205L31.8217 2.11541L31.6615 2.99627Z" fill="url(#paint0_linear_1233_5144)"/>
</g>
<defs>
<linearGradient id="paint0_linear_1233_5144" x1="23.4862" y1="5.3947" x2="32.9093" y2="11.1248" gradientUnits="userSpaceOnUse">
<stop offset="0.0001" stop-color="#33DDE5"/>
<stop offset="1" stop-color="#0F9CFF"/>
</linearGradient>
<clipPath id="clip0_1233_5144">
<rect width="40.3334" height="40.3334" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

@@ -6,11 +6,11 @@
<title>AIGC Demo - Vue.js Frontend</title>
<link rel="icon" href="/favicon.ico">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<script type="module" crossorigin src="/static/index-2fb4354b.js"></script>
<script type="module" crossorigin src="/static/index-69868281.js"></script>
<link rel="modulepreload" crossorigin href="/static/vue-vendor-164775a6.js">
<link rel="modulepreload" crossorigin href="/static/utils-edfcd65b.js">
<link rel="modulepreload" crossorigin href="/static/element-plus-4a19e5e8.js">
<link rel="stylesheet" href="/static/index-462509e4.css">
<link rel="modulepreload" crossorigin href="/static/element-plus-83a396df.js">
<link rel="stylesheet" href="/static/index-47df4f2a.css">
</head>
<body>
<div id="app"></div>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
.api-management[data-v-66980107]{display:flex;min-height:100vh;background:#f8f9fa;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.sidebar[data-v-66980107]{width:240px;background:white;border-right:1px solid #e9ecef;display:flex;flex-direction:column;padding:24px 0;box-shadow:2px 0 8px #0000000d}.logo[data-v-66980107]{display:flex;align-items:center;justify-content:center;padding:0 24px;margin-bottom:32px}.logo img[data-v-66980107]{width:100%;height:auto;max-width:180px;object-fit:contain}.nav-menu[data-v-66980107]{flex:1;padding:0 16px}.nav-item[data-v-66980107]{display:flex;align-items:center;padding:12px 16px;margin-bottom:4px;border-radius:8px;cursor:pointer;transition:all .2s ease;color:#6b7280;font-size:14px;font-weight:500}.nav-item[data-v-66980107]:hover{background:#f3f4f6;color:#374151}.nav-item.active[data-v-66980107]{background:#dbeafe;color:#3b82f6}.nav-item .el-icon[data-v-66980107]{margin-right:12px;font-size:18px}.nav-item span[data-v-66980107]{font-size:14px;font-weight:500}.sidebar-footer[data-v-66980107]{padding:20px;border-top:1px solid #e9ecef;background:#f8f9fa;margin-top:auto}.online-users[data-v-66980107],.system-uptime[data-v-66980107]{font-size:13px;color:#6b7280;margin-bottom:8px;line-height:1.5}.highlight[data-v-66980107]{color:#3b82f6;font-weight:600}.main-content[data-v-66980107]{flex:1;display:flex;flex-direction:column;background:#f8f9fa}.top-header[data-v-66980107]{background:white;border-bottom:1px solid #e9ecef;padding:16px 24px;display:flex;align-items:center;justify-content:space-between;box-shadow:0 2px 4px #0000000d}.search-bar[data-v-66980107]{position:relative;display:flex;align-items:center}.search-icon[data-v-66980107]{position:absolute;left:12px;color:#9ca3af;font-size:16px;z-index:1}.search-input[data-v-66980107]{width:300px;padding:10px 12px 10px 40px;border:1px solid #d1d5db;border-radius:8px;font-size:14px;background:white;outline:none;transition:border-color .2s ease}.search-input[data-v-66980107]:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.search-input[data-v-66980107]::placeholder{color:#9ca3af}.header-actions[data-v-66980107]{display:flex;align-items:center;gap:20px}.user-avatar[data-v-66980107]{display:flex;align-items:center;gap:8px;cursor:pointer;padding:4px 8px;border-radius:6px;transition:background .2s ease}.user-avatar[data-v-66980107]:hover{background:#f3f4f6}.user-avatar img[data-v-66980107]{width:32px;height:32px;border-radius:50%;object-fit:cover}.user-avatar .arrow-down[data-v-66980107]{font-size:12px;color:#6b7280}.api-content[data-v-66980107]{padding:24px;flex:1;background:white;margin:24px;border-radius:8px;box-shadow:0 1px 3px #0000001a}.content-header[data-v-66980107]{display:flex;align-items:center;justify-content:space-between;margin-bottom:32px}.content-header h2[data-v-66980107]{font-size:24px;font-weight:600;color:#1e293b;margin:0}.api-form-container[data-v-66980107]{max-width:800px}.api-form[data-v-66980107]{background:#f9fafb;padding:32px;border-radius:8px}@media (max-width: 1024px){.api-management[data-v-66980107]{flex-direction:column}.sidebar[data-v-66980107]{width:100%;height:auto}.nav-menu[data-v-66980107]{display:flex;overflow-x:auto;padding:0 16px}.nav-item[data-v-66980107]{white-space:nowrap;margin-right:16px;margin-bottom:0}.sidebar-footer[data-v-66980107]{display:none}.search-input[data-v-66980107]{width:200px}.api-content[data-v-66980107]{padding:16px}}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
.video-detail-page[data-v-8c6c5f10]{height:100vh;background:#0a0a0a;color:#fff;display:flex;flex-direction:column;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.top-bar[data-v-8c6c5f10]{height:60px;background:#1a1a1a;border-bottom:1px solid #333;display:flex;align-items:center;justify-content:space-between;padding:0 20px;z-index:100}.logo[data-v-8c6c5f10]{display:flex;align-items:center}.logo img[data-v-8c6c5f10]{height:30px;width:auto}.top-actions[data-v-8c6c5f10]{display:flex;gap:16px}.action-icon[data-v-8c6c5f10]{font-size:20px;color:#cbd5e1;cursor:pointer;transition:color .3s}.action-icon[data-v-8c6c5f10]:hover{color:#fff}.sidebar[data-v-8c6c5f10]{position:fixed;left:0;top:60px;width:200px;height:calc(100vh - 60px);background:#1a1a1a;border-right:1px solid #333;padding:20px 0;z-index:90}.nav-item[data-v-8c6c5f10]{display:flex;align-items:center;padding:12px 20px;color:#cbd5e1;cursor:pointer;transition:all .3s}.nav-item[data-v-8c6c5f10]:hover{background:#2a2a2a;color:#fff}.nav-item .el-icon[data-v-8c6c5f10]{margin-right:12px;font-size:18px}.main-content[data-v-8c6c5f10]{margin-left:200px;margin-top:60px;height:calc(100vh - 60px);display:flex}.video-section[data-v-8c6c5f10]{flex:2;padding:20px;display:flex;align-items:center;justify-content:center}.video-player[data-v-8c6c5f10]{position:relative;width:100%;max-width:800px;aspect-ratio:16/9;background:#000;border-radius:8px;overflow:hidden}.video-player video[data-v-8c6c5f10]{width:100%;height:100%;object-fit:cover;cursor:pointer}.video-controls[data-v-8c6c5f10]{position:absolute;bottom:0;left:0;right:0;background:linear-gradient(transparent,rgba(0,0,0,.8));padding:20px;display:flex;justify-content:space-between;align-items:center}.controls-left[data-v-8c6c5f10]{display:flex;align-items:center;gap:12px}.time-display[data-v-8c6c5f10]{color:#fff;font-size:14px;font-family:monospace}.video-actions[data-v-8c6c5f10]{position:absolute;top:20px;right:20px;display:flex;gap:8px}.video-actions .el-button[data-v-8c6c5f10]{background:rgba(0,0,0,.6);border:1px solid rgba(255,255,255,.2);color:#fff}.video-actions .el-button[data-v-8c6c5f10]:hover{background:rgba(0,0,0,.8);border-color:#fff6}.detail-section[data-v-8c6c5f10]{flex:1;background:#1a1a1a;border-left:1px solid #333;padding:20px;overflow-y:auto;position:relative}.detail-header h3[data-v-8c6c5f10]{font-size:20px;font-weight:600;margin-bottom:4px;color:#fff}.subtitle[data-v-8c6c5f10]{color:#9ca3af;font-size:14px;margin-bottom:20px}.detail-content[data-v-8c6c5f10]{display:flex;flex-direction:column;gap:20px}.input-section[data-v-8c6c5f10]{margin-bottom:10px}.thumbnails[data-v-8c6c5f10]{display:flex;gap:8px}.thumbnail[data-v-8c6c5f10]{width:60px;height:60px;border-radius:6px;overflow:hidden;background:#2a2a2a}.thumbnail img[data-v-8c6c5f10]{width:100%;height:100%;object-fit:cover}.description h4[data-v-8c6c5f10]{font-size:16px;font-weight:600;margin-bottom:8px;color:#fff}.description p[data-v-8c6c5f10]{color:#cbd5e1;font-size:14px;line-height:1.5}.metadata[data-v-8c6c5f10]{display:flex;flex-direction:column;gap:12px}.meta-item[data-v-8c6c5f10]{display:flex;justify-content:space-between;align-items:center;padding:8px 0;border-bottom:1px solid #2a2a2a}.meta-item[data-v-8c6c5f10]:last-child{border-bottom:none}.label[data-v-8c6c5f10]{color:#9ca3af;font-size:14px}.value[data-v-8c6c5f10]{color:#fff;font-size:14px;font-weight:500}.action-button[data-v-8c6c5f10]{margin-top:20px}.action-button .el-button[data-v-8c6c5f10]{width:100%;height:44px;font-size:16px;font-weight:600}.scroll-indicators[data-v-8c6c5f10]{position:absolute;right:8px;top:50%;transform:translateY(-50%);display:flex;flex-direction:column;gap:8px}.scroll-arrow[data-v-8c6c5f10]{font-size:16px;color:#6b7280;cursor:pointer;transition:color .3s}.scroll-arrow[data-v-8c6c5f10]:hover{color:#9ca3af}@media (max-width: 1024px){.sidebar[data-v-8c6c5f10]{width:160px}.main-content[data-v-8c6c5f10]{margin-left:160px}.video-section[data-v-8c6c5f10]{padding:10px}.detail-section[data-v-8c6c5f10]{padding:15px}}@media (max-width: 768px){.sidebar[data-v-8c6c5f10]{display:none}.main-content[data-v-8c6c5f10]{margin-left:0;flex-direction:column}.video-section[data-v-8c6c5f10],.detail-section[data-v-8c6c5f10]{flex:none;height:50vh}}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More