feat(asset): 素材悬浮预览支持视频播放
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 31s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 53s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 58s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m42s
AI Code Review / AI Code Review (pull_request) Successful in 1m46s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 1m14s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m54s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m43s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m56s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m36s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 4m9s
CI/CD Pipeline / CI Gate (pull_request) Successful in 6s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 49s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 51s
CI/CD Pipeline / Production Browser E2E (pull_request) Failing after 1024h50m40s
CI/CD Pipeline / Integration Tests (pull_request) Failing after 1024h50m42s
CI/CD Pipeline / Canary Release to Production (pull_request) Failing after 1024h50m41s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 1024h50m41s
CI/CD Pipeline / PR Build Worker Image (pull_request) Failing after 1024h54m18s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 1024h54m20s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 1024h50m42s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 1024h54m49s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 1024h54m49s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 1024h50m42s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 1024h54m51s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 1024h54m53s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 1024h54m53s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 1025h23m58s
CI/CD Pipeline / PR Build API Image (pull_request) Failing after 1025h27m35s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 1025h28m5s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 1025h28m9s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 31s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 53s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 58s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m42s
AI Code Review / AI Code Review (pull_request) Successful in 1m46s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 1m14s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m54s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m43s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m56s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m36s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 4m9s
CI/CD Pipeline / CI Gate (pull_request) Successful in 6s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 49s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 51s
CI/CD Pipeline / Production Browser E2E (pull_request) Failing after 1024h50m40s
CI/CD Pipeline / Integration Tests (pull_request) Failing after 1024h50m42s
CI/CD Pipeline / Canary Release to Production (pull_request) Failing after 1024h50m41s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 1024h50m41s
CI/CD Pipeline / PR Build Worker Image (pull_request) Failing after 1024h54m18s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 1024h54m20s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 1024h50m42s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 1024h54m49s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 1024h54m49s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 1024h50m42s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 1024h54m51s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 1024h54m53s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 1024h54m53s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 1025h23m58s
CI/CD Pipeline / PR Build API Image (pull_request) Failing after 1025h27m35s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 1025h28m5s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 1025h28m9s
- MediaAsset 新增 source_url 字段,映射自 AssetItem.file_url - PreviewOverlay 视频素材使用 video 标签自动播放(muted+loop) - 图片素材保持 img 标签不变 - CSS 增加 video 元素样式适配
This commit is contained in:
@@ -18,6 +18,7 @@ const mapAssetToMediaAsset = (asset: AssetItem): MediaAsset => {
|
||||
id: asset.id,
|
||||
name: asset.name,
|
||||
type: inferMediaType(asset.mime_type || ""),
|
||||
source_url: asset.file_url,
|
||||
thumbnail_url: asset.thumbnail_url,
|
||||
duration: asset.duration ?? metaDuration,
|
||||
size: asset.file_size ?? undefined,
|
||||
|
||||
@@ -424,6 +424,8 @@ export interface MediaAsset {
|
||||
id: string
|
||||
name: string
|
||||
type: "video" | "image" | "audio"
|
||||
/** 源文件 URL(视频/原图),用于悬浮预览播放 */
|
||||
source_url?: string
|
||||
/** 缩略图 URL */
|
||||
thumbnail_url?: string
|
||||
/** 时长(秒),仅 video/audio */
|
||||
|
||||
@@ -456,7 +456,8 @@
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.as-preview-overlay-thumb img {
|
||||
.as-preview-overlay-thumb img,
|
||||
.as-preview-overlay-thumb video {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
|
||||
@@ -12,7 +12,16 @@ const PreviewOverlay: React.FC<PreviewOverlayProps> = ({ asset, position }) => {
|
||||
return (
|
||||
<div className="as-preview-overlay" style={{ left: position.x, top: position.y }}>
|
||||
<div className="as-preview-overlay-thumb">
|
||||
{asset.thumbnail_url ? (
|
||||
{asset.type === "video" && asset.source_url ? (
|
||||
<video
|
||||
src={asset.source_url}
|
||||
autoPlay
|
||||
muted
|
||||
loop
|
||||
playsInline
|
||||
poster={asset.thumbnail_url}
|
||||
/>
|
||||
) : asset.thumbnail_url ? (
|
||||
<img src={asset.thumbnail_url} alt={asset.name} />
|
||||
) : (
|
||||
<span className="as-preview-overlay-thumb-icon">{MATERIAL_TYPE_ICONS[asset.type]}</span>
|
||||
|
||||
Reference in New Issue
Block a user