修复CollectionCardMini高度和样式,与ClipCard保持一致
- 更新CollectionCardMini高度:240px → 380px,与ClipCard保持一致 - 更新封面区域高度:120px → 200px,与ClipCard保持一致 - 重新设计封面覆盖层:添加hover播放效果,与ClipCard样式一致 - 添加CollectionCard.css样式导入和className - 统一卡片样式:圆角、边框、背景渐变等视觉效果 - 修复ProjectDetailPage中实际使用的CollectionCardMini组件
This commit is contained in:
1 parent
ac0142697d
commit
926a96673e
7 files changed
+58
-49
No files matched your search
@@ -309,3 +309,11 @@ NFO - WebSocket网关服务已禁用
|
|||||||
2025-09-15 23:25:08,823 - backend.main - INFO - 数据库表创建完成
|
2025-09-15 23:25:08,823 - backend.main - INFO - 数据库表创建完成
|
||||||
2025-09-15 23:25:08,823 - backend.main - INFO - API密钥已加载到环境变量
|
2025-09-15 23:25:08,823 - backend.main - INFO - API密钥已加载到环境变量
|
||||||
2025-09-15 23:25:08,823 - backend.main - INFO - WebSocket网关服务已禁用,使用新的简化进度系统
|
2025-09-15 23:25:08,823 - backend.main - INFO - WebSocket网关服务已禁用,使用新的简化进度系统
|
||||||
|
2025-09-15 23:59:00,918 - backend.main - INFO - 正在关闭AutoClip API服务...
|
||||||
|
2025-09-15 23:59:00,919 - backend.main - INFO - WebSocket网关服务已禁用
|
||||||
|
2025-09-15 23:59:03,087 - backend.services.processing_orchestrator - INFO - 流水线模块导入成功
|
||||||
|
2025-09-15 23:59:03,324 - backend.services.simple_progress - INFO - Redis连接成功
|
||||||
|
2025-09-15 23:59:03,398 - backend.main - INFO - 启动AutoClip API服务...
|
||||||
|
2025-09-15 23:59:03,399 - backend.main - INFO - 数据库表创建完成
|
||||||
|
2025-09-15 23:59:03,399 - backend.main - INFO - API密钥已加载到环境变量
|
||||||
|
2025-09-15 23:59:03,399 - backend.main - INFO - WebSocket网关服务已禁用,使用新的简化进度系统
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
13361
|
50335
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
13281
|
50240
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
13393
|
50365
|
||||||
+22
-22
@@ -7,115 +7,115 @@
|
|||||||
"react": {
|
"react": {
|
||||||
"src": "../../react/index.js",
|
"src": "../../react/index.js",
|
||||||
"file": "react.js",
|
"file": "react.js",
|
||||||
"fileHash": "8cf1eee2",
|
"fileHash": "32aa7990",
|
||||||
"needsInterop": true
|
"needsInterop": true
|
||||||
},
|
},
|
||||||
"react-dom": {
|
"react-dom": {
|
||||||
"src": "../../react-dom/index.js",
|
"src": "../../react-dom/index.js",
|
||||||
"file": "react-dom.js",
|
"file": "react-dom.js",
|
||||||
"fileHash": "27698d7e",
|
"fileHash": "da0f985e",
|
||||||
"needsInterop": true
|
"needsInterop": true
|
||||||
},
|
},
|
||||||
"react/jsx-dev-runtime": {
|
"react/jsx-dev-runtime": {
|
||||||
"src": "../../react/jsx-dev-runtime.js",
|
"src": "../../react/jsx-dev-runtime.js",
|
||||||
"file": "react_jsx-dev-runtime.js",
|
"file": "react_jsx-dev-runtime.js",
|
||||||
"fileHash": "e710264b",
|
"fileHash": "653960c7",
|
||||||
"needsInterop": true
|
"needsInterop": true
|
||||||
},
|
},
|
||||||
"react/jsx-runtime": {
|
"react/jsx-runtime": {
|
||||||
"src": "../../react/jsx-runtime.js",
|
"src": "../../react/jsx-runtime.js",
|
||||||
"file": "react_jsx-runtime.js",
|
"file": "react_jsx-runtime.js",
|
||||||
"fileHash": "a5b7adb6",
|
"fileHash": "c2abaa4b",
|
||||||
"needsInterop": true
|
"needsInterop": true
|
||||||
},
|
},
|
||||||
"@ant-design/icons": {
|
"@ant-design/icons": {
|
||||||
"src": "../../@ant-design/icons/es/index.js",
|
"src": "../../@ant-design/icons/es/index.js",
|
||||||
"file": "@ant-design_icons.js",
|
"file": "@ant-design_icons.js",
|
||||||
"fileHash": "c0220592",
|
"fileHash": "c694bea7",
|
||||||
"needsInterop": false
|
"needsInterop": false
|
||||||
},
|
},
|
||||||
"antd": {
|
"antd": {
|
||||||
"src": "../../antd/es/index.js",
|
"src": "../../antd/es/index.js",
|
||||||
"file": "antd.js",
|
"file": "antd.js",
|
||||||
"fileHash": "740849e3",
|
"fileHash": "b1aa8324",
|
||||||
"needsInterop": false
|
"needsInterop": false
|
||||||
},
|
},
|
||||||
"antd/locale/zh_CN": {
|
"antd/locale/zh_CN": {
|
||||||
"src": "../../antd/locale/zh_CN.js",
|
"src": "../../antd/locale/zh_CN.js",
|
||||||
"file": "antd_locale_zh_CN.js",
|
"file": "antd_locale_zh_CN.js",
|
||||||
"fileHash": "68594c80",
|
"fileHash": "59cf75ac",
|
||||||
"needsInterop": true
|
"needsInterop": true
|
||||||
},
|
},
|
||||||
"axios": {
|
"axios": {
|
||||||
"src": "../../axios/index.js",
|
"src": "../../axios/index.js",
|
||||||
"file": "axios.js",
|
"file": "axios.js",
|
||||||
"fileHash": "9d2fc4db",
|
"fileHash": "b4f59795",
|
||||||
"needsInterop": false
|
"needsInterop": false
|
||||||
},
|
},
|
||||||
"dayjs": {
|
"dayjs": {
|
||||||
"src": "../../dayjs/dayjs.min.js",
|
"src": "../../dayjs/dayjs.min.js",
|
||||||
"file": "dayjs.js",
|
"file": "dayjs.js",
|
||||||
"fileHash": "006bca1c",
|
"fileHash": "5d0358a3",
|
||||||
"needsInterop": true
|
"needsInterop": true
|
||||||
},
|
},
|
||||||
"dayjs/locale/zh-cn": {
|
"dayjs/locale/zh-cn": {
|
||||||
"src": "../../dayjs/locale/zh-cn.js",
|
"src": "../../dayjs/locale/zh-cn.js",
|
||||||
"file": "dayjs_locale_zh-cn.js",
|
"file": "dayjs_locale_zh-cn.js",
|
||||||
"fileHash": "b4825b37",
|
"fileHash": "a80abcde",
|
||||||
"needsInterop": true
|
"needsInterop": true
|
||||||
},
|
},
|
||||||
"dayjs/plugin/relativeTime": {
|
"dayjs/plugin/relativeTime": {
|
||||||
"src": "../../dayjs/plugin/relativeTime.js",
|
"src": "../../dayjs/plugin/relativeTime.js",
|
||||||
"file": "dayjs_plugin_relativeTime.js",
|
"file": "dayjs_plugin_relativeTime.js",
|
||||||
"fileHash": "c8a81c26",
|
"fileHash": "e112ba0f",
|
||||||
"needsInterop": true
|
"needsInterop": true
|
||||||
},
|
},
|
||||||
"dayjs/plugin/timezone": {
|
"dayjs/plugin/timezone": {
|
||||||
"src": "../../dayjs/plugin/timezone.js",
|
"src": "../../dayjs/plugin/timezone.js",
|
||||||
"file": "dayjs_plugin_timezone.js",
|
"file": "dayjs_plugin_timezone.js",
|
||||||
"fileHash": "8447d5ee",
|
"fileHash": "788c122d",
|
||||||
"needsInterop": true
|
"needsInterop": true
|
||||||
},
|
},
|
||||||
"dayjs/plugin/utc": {
|
"dayjs/plugin/utc": {
|
||||||
"src": "../../dayjs/plugin/utc.js",
|
"src": "../../dayjs/plugin/utc.js",
|
||||||
"file": "dayjs_plugin_utc.js",
|
"file": "dayjs_plugin_utc.js",
|
||||||
"fileHash": "6c25b876",
|
"fileHash": "0b541a49",
|
||||||
"needsInterop": true
|
"needsInterop": true
|
||||||
},
|
},
|
||||||
"react-beautiful-dnd": {
|
"react-beautiful-dnd": {
|
||||||
"src": "../../react-beautiful-dnd/dist/react-beautiful-dnd.esm.js",
|
"src": "../../react-beautiful-dnd/dist/react-beautiful-dnd.esm.js",
|
||||||
"file": "react-beautiful-dnd.js",
|
"file": "react-beautiful-dnd.js",
|
||||||
"fileHash": "fc60b58b",
|
"fileHash": "97ad4664",
|
||||||
"needsInterop": false
|
"needsInterop": false
|
||||||
},
|
},
|
||||||
"react-dom/client": {
|
"react-dom/client": {
|
||||||
"src": "../../react-dom/client.js",
|
"src": "../../react-dom/client.js",
|
||||||
"file": "react-dom_client.js",
|
"file": "react-dom_client.js",
|
||||||
"fileHash": "5f2df725",
|
"fileHash": "b73d9217",
|
||||||
"needsInterop": true
|
"needsInterop": true
|
||||||
},
|
},
|
||||||
"react-dropzone": {
|
"react-dropzone": {
|
||||||
"src": "../../react-dropzone/dist/es/index.js",
|
"src": "../../react-dropzone/dist/es/index.js",
|
||||||
"file": "react-dropzone.js",
|
"file": "react-dropzone.js",
|
||||||
"fileHash": "e1e701ea",
|
"fileHash": "93a4b5d1",
|
||||||
"needsInterop": false
|
"needsInterop": false
|
||||||
},
|
},
|
||||||
"react-player": {
|
"react-player": {
|
||||||
"src": "../../react-player/lib/index.js",
|
"src": "../../react-player/lib/index.js",
|
||||||
"file": "react-player.js",
|
"file": "react-player.js",
|
||||||
"fileHash": "4a73e7be",
|
"fileHash": "1ed12f12",
|
||||||
"needsInterop": true
|
"needsInterop": true
|
||||||
},
|
},
|
||||||
"react-router-dom": {
|
"react-router-dom": {
|
||||||
"src": "../../react-router-dom/dist/index.js",
|
"src": "../../react-router-dom/dist/index.js",
|
||||||
"file": "react-router-dom.js",
|
"file": "react-router-dom.js",
|
||||||
"fileHash": "97312ab5",
|
"fileHash": "e750453f",
|
||||||
"needsInterop": false
|
"needsInterop": false
|
||||||
},
|
},
|
||||||
"zustand": {
|
"zustand": {
|
||||||
"src": "../../zustand/esm/index.mjs",
|
"src": "../../zustand/esm/index.mjs",
|
||||||
"file": "zustand.js",
|
"file": "zustand.js",
|
||||||
"fileHash": "96259582",
|
"fileHash": "5a2be4da",
|
||||||
"needsInterop": false
|
"needsInterop": false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -177,9 +177,6 @@
|
|||||||
"chunk-GKJBSOWT": {
|
"chunk-GKJBSOWT": {
|
||||||
"file": "chunk-GKJBSOWT.js"
|
"file": "chunk-GKJBSOWT.js"
|
||||||
},
|
},
|
||||||
"chunk-WT22ZCGG": {
|
|
||||||
"file": "chunk-WT22ZCGG.js"
|
|
||||||
},
|
|
||||||
"chunk-X7BPSMZA": {
|
"chunk-X7BPSMZA": {
|
||||||
"file": "chunk-X7BPSMZA.js"
|
"file": "chunk-X7BPSMZA.js"
|
||||||
},
|
},
|
||||||
@@ -189,6 +186,9 @@
|
|||||||
"chunk-QJTFJ6OV": {
|
"chunk-QJTFJ6OV": {
|
||||||
"file": "chunk-QJTFJ6OV.js"
|
"file": "chunk-QJTFJ6OV.js"
|
||||||
},
|
},
|
||||||
|
"chunk-WT22ZCGG": {
|
||||||
|
"file": "chunk-WT22ZCGG.js"
|
||||||
|
},
|
||||||
"chunk-V4OQ3NZ2": {
|
"chunk-V4OQ3NZ2": {
|
||||||
"file": "chunk-V4OQ3NZ2.js"
|
"file": "chunk-V4OQ3NZ2.js"
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -5,9 +5,6 @@ import {
|
|||||||
import {
|
import {
|
||||||
require_react_dom
|
require_react_dom
|
||||||
} from "./chunk-GKJBSOWT.js";
|
} from "./chunk-GKJBSOWT.js";
|
||||||
import {
|
|
||||||
require_dayjs_min
|
|
||||||
} from "./chunk-WT22ZCGG.js";
|
|
||||||
import {
|
import {
|
||||||
BarsOutlined_default,
|
BarsOutlined_default,
|
||||||
CalendarOutlined_default,
|
CalendarOutlined_default,
|
||||||
@@ -101,6 +98,9 @@ import {
|
|||||||
import {
|
import {
|
||||||
require_react
|
require_react
|
||||||
} from "./chunk-QJTFJ6OV.js";
|
} from "./chunk-QJTFJ6OV.js";
|
||||||
|
import {
|
||||||
|
require_dayjs_min
|
||||||
|
} from "./chunk-WT22ZCGG.js";
|
||||||
import {
|
import {
|
||||||
__commonJS,
|
__commonJS,
|
||||||
__toESM
|
__toESM
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import { Card, Typography, Button, Popconfirm, Tooltip } from 'antd'
|
|||||||
import { DeleteOutlined, PlayCircleOutlined } from '@ant-design/icons'
|
import { DeleteOutlined, PlayCircleOutlined } from '@ant-design/icons'
|
||||||
import { Collection, Clip } from '../store/useProjectStore'
|
import { Collection, Clip } from '../store/useProjectStore'
|
||||||
import EditableCollectionTitle from './EditableCollectionTitle'
|
import EditableCollectionTitle from './EditableCollectionTitle'
|
||||||
|
import './CollectionCard.css'
|
||||||
|
|
||||||
const { Text, Title } = Typography
|
const { Text, Title } = Typography
|
||||||
|
|
||||||
@@ -43,10 +44,11 @@ const CollectionCardMini: React.FC<CollectionCardMiniProps> = ({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Card
|
<Card
|
||||||
|
className="collection-card"
|
||||||
hoverable
|
hoverable
|
||||||
style={{
|
style={{
|
||||||
width: '320px',
|
width: '320px',
|
||||||
height: '240px',
|
height: '380px',
|
||||||
flexShrink: 0,
|
flexShrink: 0,
|
||||||
cursor: 'pointer',
|
cursor: 'pointer',
|
||||||
borderRadius: '16px',
|
borderRadius: '16px',
|
||||||
@@ -73,7 +75,7 @@ const CollectionCardMini: React.FC<CollectionCardMiniProps> = ({
|
|||||||
}}>
|
}}>
|
||||||
{/* 封面区域 */}
|
{/* 封面区域 */}
|
||||||
<div style={{
|
<div style={{
|
||||||
height: '120px',
|
height: '200px',
|
||||||
background: collection.thumbnail_path
|
background: collection.thumbnail_path
|
||||||
? `url(http://localhost:8000/api/v1/projects/${collection.project_id}/collections/${collection.id}/thumbnail)`
|
? `url(http://localhost:8000/api/v1/projects/${collection.project_id}/collections/${collection.id}/thumbnail)`
|
||||||
: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
|
: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
|
||||||
@@ -83,30 +85,29 @@ const CollectionCardMini: React.FC<CollectionCardMiniProps> = ({
|
|||||||
position: 'relative',
|
position: 'relative',
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
alignItems: 'center',
|
alignItems: 'center',
|
||||||
justifyContent: 'center'
|
justifyContent: 'center',
|
||||||
|
cursor: 'pointer',
|
||||||
|
overflow: 'hidden'
|
||||||
}}>
|
}}>
|
||||||
{!collection.thumbnail_path && (
|
{/* 播放覆盖层 */}
|
||||||
<PlayCircleOutlined style={{ fontSize: '32px', color: 'white', opacity: 0.9 }} />
|
<div
|
||||||
)}
|
style={{
|
||||||
{collection.thumbnail_path && (
|
|
||||||
<div style={{
|
|
||||||
position: 'absolute',
|
position: 'absolute',
|
||||||
top: '50%',
|
top: 0,
|
||||||
left: '50%',
|
left: 0,
|
||||||
transform: 'translate(-50%, -50%)',
|
right: 0,
|
||||||
background: 'rgba(0,0,0,0.7)',
|
bottom: 0,
|
||||||
borderRadius: '50%',
|
background: 'rgba(0,0,0,0.4)',
|
||||||
width: '40px',
|
|
||||||
height: '40px',
|
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
alignItems: 'center',
|
alignItems: 'center',
|
||||||
justifyContent: 'center',
|
justifyContent: 'center',
|
||||||
transition: 'all 0.3s ease',
|
opacity: 0,
|
||||||
opacity: isHovered ? 1 : 0.8
|
transition: 'opacity 0.3s ease'
|
||||||
}}>
|
}}
|
||||||
<PlayCircleOutlined style={{ fontSize: '20px', color: 'white' }} />
|
className="video-overlay"
|
||||||
</div>
|
>
|
||||||
)}
|
<PlayCircleOutlined style={{ fontSize: '40px', color: 'white' }} />
|
||||||
|
</div>
|
||||||
<div
|
<div
|
||||||
style={{
|
style={{
|
||||||
position: 'absolute',
|
position: 'absolute',
|
||||||
|
|||||||
Reference in new issue
Block a user