|
@@ -1,6 +1,6 @@
|
|
|
<template>
|
|
|
<a-list :grid="{ gutter: 20, column: 4 }" :data-source="current">
|
|
|
- <template #renderItem="{ item }">
|
|
|
+ <template #renderItem="{ item }: { item: Scene | typeof addMarked }">
|
|
|
<a-list-item class="scene-item">
|
|
|
<div v-if="item === addMarked" class="add-scene" @click="selectScenes">
|
|
|
<a-button shape="circle" class="button" type="primary">
|
|
@@ -13,7 +13,11 @@
|
|
|
<span class="delete-scene" @click="deleteScene(item)">
|
|
|
<close-outlined class="delete-scene-icon" />
|
|
|
</span>
|
|
|
- <p>{{ item.title }}</p>
|
|
|
+ <p class="title">{{ item.title }}</p>
|
|
|
+
|
|
|
+ <div v-if="item.status !== SceneStatus.SUCCESS" class="status-cover">
|
|
|
+ <p>{{ sceneStatusDesc[item.status] }}</p>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</a-list-item>
|
|
|
</template>
|
|
@@ -23,7 +27,7 @@
|
|
|
<script lang="ts" setup>
|
|
|
import { computed } from 'vue'
|
|
|
import { Modal } from 'ant-design-vue'
|
|
|
-import { useSceneStore } from '@/store'
|
|
|
+import { useSceneStore, sceneStatusDesc, SceneStatus } from '@/store'
|
|
|
import { diffArrayChange } from '@/shared'
|
|
|
import SceneList from '@/views/scene/list.vue'
|
|
|
|
|
@@ -110,7 +114,7 @@ const selectScenes = () => {
|
|
|
display: block;
|
|
|
object-fit: cover;
|
|
|
}
|
|
|
- p {
|
|
|
+ .title {
|
|
|
position: absolute;
|
|
|
bottom: 0;
|
|
|
left: 0;
|
|
@@ -127,6 +131,7 @@ const selectScenes = () => {
|
|
|
}
|
|
|
|
|
|
.delete-scene {
|
|
|
+ z-index: 2;
|
|
|
position: absolute;
|
|
|
right: 0;
|
|
|
top: 0;
|
|
@@ -152,6 +157,22 @@ const selectScenes = () => {
|
|
|
transform: translate(50%, -50%);
|
|
|
opacity: 1;
|
|
|
}
|
|
|
+ .status-cover {
|
|
|
+ z-index: 1;
|
|
|
+ position: absolute;
|
|
|
+ left: 0;
|
|
|
+ top: 0;
|
|
|
+ right: 0;
|
|
|
+ bottom: 0;
|
|
|
+ background-color: rgba(0, 0, 0, 0.5);
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+
|
|
|
+ p {
|
|
|
+ color: #fff;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
</style>
|
|
|
|