diff --git a/frontend/src/views/TaskHall.vue b/frontend/src/views/TaskHall.vue index 1eab3df..1b459d0 100644 --- a/frontend/src/views/TaskHall.vue +++ b/frontend/src/views/TaskHall.vue @@ -241,18 +241,27 @@ -
-
- 任务类型 - {{ getTaskTypeName(task.taskTypeId, task.taskTypeName, task.taskSubType) }} +
+
+
+ 任务类型 + {{ getTaskTypeName(task.taskTypeId, task.taskTypeName, task.taskSubType) }} +
+
+ 预估积分 + {{ task.score || '--' }} 分 +
+
+ 数量 + {{ task.quantity || 1 }} 个 +
-
- 预估积分 - {{ task.score || '--' }} 分 -
-
- 数量 - {{ task.quantity || 1 }} 个 + +
+ 预览图 +
+ 预览图 +
@@ -531,22 +540,31 @@
-
-
- 任务编号 - {{ task.taskNo }} +
+
+
+ 任务编号 + {{ task.taskNo }} +
+
+ 任务类型 + {{ getTaskTypeName(task.taskTypeId) }} +
+
+ 预估积分 + {{ task.score }} 分 +
+
+ 数量 + {{ task.quantity || '--' }} 个 +
-
- 任务类型 - {{ getTaskTypeName(task.taskTypeId) }} -
-
- 预估积分 - {{ task.score }} 分 -
-
- 数量 - {{ task.quantity || '--' }} 个 + +
+ 预览图 +
+ 预览图 +
@@ -831,22 +849,31 @@
-
-
- 任务编号 - {{ task.taskNo }} +
+
+
+ 任务编号 + {{ task.taskNo }} +
+
+ 任务类型 + {{ getTaskTypeName(task.taskTypeId) }} +
+
+ 预估积分 + {{ task.score }} 分 +
+
+ 数量 + {{ task.quantity || '--' }} 个 +
-
- 任务类型 - {{ getTaskTypeName(task.taskTypeId) }} -
-
- 预估积分 - {{ task.score }} 分 -
-
- 数量 - {{ task.quantity || '--' }} 个 + +
+ 预览图 +
+ 预览图 +
@@ -4791,16 +4818,69 @@ onUnmounted(() => { border: 1px solid rgba(49, 240, 139, 0.2); } -// 任务信息 -.task-info { - display: grid; - grid-template-columns: repeat(3, 1fr); - gap: $space-md; +// 任务信息容器(包含预览图) +.task-info-wrapper { + display: flex; + align-items: flex-start; + gap: 12px; margin-bottom: $space-md; padding-bottom: $space-md; border-bottom: 1px solid $border-primary; } +// 任务信息 +.task-info { + flex: 1; + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: $space-md; +} + +// 预览图缩略图 +.preview-thumbnail { + position: relative; + width: 45px; + height: 45px; + flex-shrink: 0; + border-radius: 4px; + overflow: hidden; + border: 1px solid $border-primary; + cursor: pointer; + + .thumbnail-img { + width: 100%; + height: 100%; + object-fit: cover; + } + + .preview-popup { + display: none; + position: absolute; + top: 50%; + right: calc(100% + 10px); + transform: translateY(-50%); + width: 300px; + height: 300px; + background: $bg-card; + border: 2px solid $brand-primary; + border-radius: 8px; + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5); + z-index: 1000; + padding: 4px; + + img { + width: 100%; + height: 100%; + object-fit: contain; + border-radius: 4px; + } + } + + &:hover .preview-popup { + display: block; + } +} + .info-item { display: flex; flex-direction: column;