- ✨
+
AI 智能建模
@@ -187,7 +183,7 @@
- 👁
+
实时预览
@@ -197,7 +193,7 @@
- 📁
+
作品管理
@@ -207,7 +203,7 @@
- 🔄
+
迭代优化
@@ -256,7 +252,6 @@
class="history-card"
@click="handleViewTask(task)"
>
-
![]()
{{ getStatusText(task.status) }}
+
+
+
+
+
+
+
@@ -308,37 +331,15 @@
{{ formatTime(task.createTime) }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ {{ task.inputType === "text" ? "文生3D" : "图生3D" }}
+
-
@@ -358,6 +359,10 @@ import {
ArrowRightOutlined,
ArrowLeftOutlined,
ClockCircleOutlined,
+ BulbOutlined,
+ FolderOutlined,
+ SyncOutlined,
+ EditOutlined,
} from "@ant-design/icons-vue"
import {
createAI3DTask,
@@ -873,7 +878,6 @@ $gradient-secondary: linear-gradient(135deg, $accent 0%, $primary 100%);
display: flex;
align-items: center;
gap: 16px;
- border-bottom: 1px solid rgba($primary, 0.1);
flex-shrink: 0;
.back-btn {
@@ -946,7 +950,6 @@ $gradient-secondary: linear-gradient(135deg, $accent 0%, $primary 100%);
.panel-header {
padding: 20px 24px;
- border-bottom: 1px solid rgba($primary, 0.1);
flex-shrink: 0;
:deep(.ant-segmented) {
@@ -999,6 +1002,7 @@ $gradient-secondary: linear-gradient(135deg, $accent 0%, $primary 100%);
.label-icon {
font-size: 16px;
+ color: $primary;
}
}
@@ -1211,7 +1215,6 @@ $gradient-secondary: linear-gradient(135deg, $accent 0%, $primary 100%);
.panel-footer {
padding: 24px;
- border-top: 1px solid rgba($primary, 0.1);
flex-shrink: 0;
}
@@ -1302,66 +1305,46 @@ $gradient-secondary: linear-gradient(135deg, $accent 0%, $primary 100%);
height: 100vh;
background: rgba($surface, 0.3);
backdrop-filter: blur(20px);
+ padding-top: 30px;
}
.intro-section {
padding: 48px;
flex-shrink: 0;
-}
-
-.intro-badge {
- display: inline-flex;
- align-items: center;
- gap: 8px;
- padding: 6px 14px;
- background: rgba($primary, 0.15);
- border: 1px solid rgba($primary, 0.3);
- border-radius: 20px;
- font-size: 11px;
- font-weight: 600;
- color: $primary-light;
- letter-spacing: 1px;
- text-transform: uppercase;
- margin-bottom: 20px;
-
- .badge-dot {
- width: 6px;
- height: 6px;
- background: $accent;
- border-radius: 50%;
- animation: pulse 1.5s ease-in-out infinite;
- }
-}
-
-@keyframes pulse {
- 0%,
- 100% {
- opacity: 1;
- transform: scale(1);
- }
- 50% {
- opacity: 0.5;
- transform: scale(0.8);
- }
+ text-align: center;
}
.intro-title {
font-size: 36px;
font-weight: 700;
- color: $text;
margin-bottom: 16px;
line-height: 1.3;
- background: $gradient-primary;
+ background: linear-gradient(
+ 135deg,
+ $primary 0%,
+ $primary-light 40%,
+ #8b5cf6 70%,
+ #a855f7 100%
+ );
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
+@media (max-width: 900px) {
+ .intro-title {
+ font-size: 28px;
+ }
+}
+
.intro-desc {
font-size: 16px;
color: $text-muted;
margin-bottom: 32px;
line-height: 1.6;
+ max-width: 500px;
+ margin-left: auto;
+ margin-right: auto;
}
.intro-features {
@@ -1389,7 +1372,8 @@ $gradient-secondary: linear-gradient(135deg, $accent 0%, $primary 100%);
display: flex;
align-items: center;
justify-content: center;
- font-size: 20px;
+ font-size: 22px;
+ color: #fff;
flex-shrink: 0;
&.gradient-1 {
@@ -1578,53 +1562,47 @@ $gradient-secondary: linear-gradient(135deg, $accent 0%, $primary 100%);
flex-shrink: 0;
width: 240px;
background: $surface;
- border-radius: 8px;
+ border-radius: 12px;
overflow: hidden;
cursor: pointer;
- transition: all 0.3s;
- border: 1px solid rgba(0, 0, 0, 0.06);
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
position: relative;
+ // border: 1px solid rgba(0, 0, 0, 0.06);
&:hover {
- transform: translateY(-4px);
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
+ .card-preview {
+ transform: scale(1.03);
+ }
- .card-glow {
- opacity: 0.3;
+ .card-preview .preview-image {
+ transform: scale(1.05);
+ }
+
+ .card-actions-overlay {
+ opacity: 1;
}
}
}
-.card-glow {
- position: absolute;
- inset: -2px;
- background: $primary;
- border-radius: 10px;
- z-index: -1;
- opacity: 0;
- filter: blur(8px);
- transition: opacity 0.3s;
-}
-
.card-preview {
height: 160px;
- background: rgba($surface-light, 0.8);
+ // border-radius: 8px;
+ background: linear-gradient(
+ 135deg,
+ rgba($surface-light, 0.9) 0%,
+ rgba($primary, 0.05) 100%
+ );
display: flex;
align-items: center;
justify-content: center;
position: relative;
overflow: hidden;
+ transition: transform 0.3s ease;
.preview-image {
width: 100%;
height: 100%;
object-fit: cover;
- transition: transform 0.5s;
- }
-
- .history-card:hover & .preview-image {
- transform: scale(1.1);
+ transition: transform 0.5s cubic-bezier(0.4, 0, 0.2, 1);
}
.preview-loading,
@@ -1646,7 +1624,11 @@ $gradient-secondary: linear-gradient(135deg, $accent 0%, $primary 100%);
.failed-icon {
width: 56px;
height: 56px;
- background: linear-gradient(135deg, rgba($error, 0.15) 0%, rgba($error, 0.25) 100%);
+ background: linear-gradient(
+ 135deg,
+ rgba($error, 0.15) 0%,
+ rgba($error, 0.25) 100%
+ );
border: 2px solid rgba($error, 0.3);
border-radius: 50%;
display: flex;
@@ -1659,8 +1641,65 @@ $gradient-secondary: linear-gradient(135deg, $accent 0%, $primary 100%);
}
}
+// 悬停时显示的操作按钮遮罩层
+.card-actions-overlay {
+ position: absolute;
+ inset: 0;
+ background: linear-gradient(
+ to top,
+ rgba(0, 0, 0, 0.6) 0%,
+ rgba(0, 0, 0, 0.2) 50%,
+ transparent 100%
+ );
+ display: flex;
+ align-items: flex-end;
+ justify-content: center;
+ padding-bottom: 16px;
+ gap: 10px;
+ opacity: 0;
+ transition: opacity 0.3s ease;
+ z-index: 10;
+
+ .overlay-btn {
+ display: flex;
+ align-items: center;
+ gap: 6px;
+ padding: 8px 14px;
+ border-radius: 6px;
+ font-size: 13px;
+ font-weight: 500;
+ cursor: pointer;
+ transition: all 0.2s ease;
+ border: none;
+
+ &.btn-primary {
+ background: $primary;
+ color: white;
+
+ &:hover {
+ background: $primary-light;
+ }
+ }
+
+ &.btn-secondary {
+ background: rgba(255, 255, 255, 0.9);
+ color: $text;
+
+ &:hover {
+ background: white;
+ }
+ }
+
+ &:disabled {
+ opacity: 0.5;
+ cursor: not-allowed;
+ }
+ }
+}
+
@keyframes pulse-error {
- 0%, 100% {
+ 0%,
+ 100% {
transform: scale(1);
box-shadow: 0 0 0 0 rgba($error, 0.3);
}
@@ -1740,7 +1779,8 @@ $gradient-secondary: linear-gradient(135deg, $accent 0%, $primary 100%);
.card-info {
padding: 16px;
- background: rgba(9, 88, 217, 0.15);
+ background: $surface;
+ border-top: 1px solid rgba($primary, 0.06);
}
.card-desc {
@@ -1751,6 +1791,7 @@ $gradient-secondary: linear-gradient(135deg, $accent 0%, $primary 100%);
text-overflow: ellipsis;
margin-bottom: 12px;
font-weight: 500;
+ line-height: 1.4;
}
.card-meta {
@@ -1767,50 +1808,20 @@ $gradient-secondary: linear-gradient(135deg, $accent 0%, $primary 100%);
color: $text-muted;
}
-.card-actions {
- display: flex;
- gap: 8px;
-}
-
-.action-btn {
- width: 32px;
- height: 32px;
- background: rgba($primary, 0.1);
- border: 1px solid rgba($primary, 0.2);
- border-radius: 8px;
- display: flex;
+.card-type {
+ display: inline-flex;
align-items: center;
- justify-content: center;
- color: $primary-light;
- cursor: pointer;
- transition: all 0.3s;
-
- &:hover {
- background: rgba($primary-light, 0.2);
- border-color: $primary-light;
- color: $primary-light;
- transform: scale(1.1);
- }
-
- &.danger {
- &:hover {
- background: rgba($accent, 0.2);
- border-color: $accent;
- color: $accent;
- }
- }
-
- &.disabled {
- opacity: 0.4;
- cursor: not-allowed;
-
- &:hover {
- background: rgba($primary, 0.1);
- border-color: rgba($primary, 0.2);
- color: $primary-light;
- transform: none;
- }
- }
+ padding: 4px 10px;
+ background: linear-gradient(
+ 135deg,
+ rgba($primary, 0.1) 0%,
+ rgba($primary-light, 0.15) 100%
+ );
+ border: 1px solid rgba($primary, 0.2);
+ border-radius: 12px;
+ font-size: 11px;
+ font-weight: 500;
+ color: $primary;
}
// ==========================================
@@ -1849,6 +1860,13 @@ $gradient-secondary: linear-gradient(135deg, $accent 0%, $primary 100%);
.history-card {
width: 180px;
+
+ .card-actions-overlay {
+ .overlay-btn {
+ padding: 6px 10px;
+ font-size: 12px;
+ }
+ }
}
}