Add Search Result and ResultCard components

This commit is contained in:
valitovgaziz
2024-11-23 02:01:23 +05:00
parent 2a3994701c
commit cd6460d121
3 changed files with 106 additions and 1 deletions
+4 -1
View File
@@ -2,12 +2,14 @@
<div class="content-wrapper" :class="{ centered: isCentered }">
<slot>
<SearchBar />
<SearchResults />
</slot>
</div>
</template>
<script>
import SearchBar from './SearchBar.vue';
import SearchResults from './SearchResults.vue';
export default {
name: 'ContentWrapper',
@@ -19,7 +21,8 @@
}
},
components: {
SearchBar
SearchBar,
SearchResults
}
};
</script>
+62
View File
@@ -0,0 +1,62 @@
<template>
<div class="search-result-card">
<img :src="result.photo" alt="Фото" class="card-image" />
<div class="card-content">
<h3 class="title">{{ result.title }}</h3>
<p class="description">{{ result.description }}</p>
<router-link :to="`/details/${result.id}`" class="view-more">Подробнее</router-link>
</div>
</div>
</template>
<script>
export default {
name: "SearchResultCard",
props: {
result: {
type: Object,
required: true,
},
},
};
</script>
<style scoped>
.search-result-card {
border: 1px solid #ddd;
border-radius: 5px;
overflow: hidden;
background-color: #fff;
display: flex;
flex-direction: column;
justify-content: space-between;
transition: transform 0.3s ease-in-out;
}
.card-image {
width: 100%;
height: 200px;
object-fit: cover;
}
.card-content {
padding: 10px;
}
.title {
margin-top: 0;
margin-bottom: 5px;
font-weight: bold;
}
.view-more {
text-decoration: none;
color: #007bff;
align-self: flex-end;
}
.search-result-card:hover {
transform: scale(1.02);
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}
</style>
+40
View File
@@ -0,0 +1,40 @@
<template>
<div class="search-results">
<h2>Результаты поиска</h2>
<div v-if="results.length === 0">Нет результатов</div>
<div v-else class="results-container">
<SearchResultCard v-for="result in results" :key="result.id" :result="result" />
</div>
</div>
</template>
<script>
import SearchResultCard from "./SearchResultCard.vue";
export default {
name: "SearchResults",
components: {
SearchResultCard,
},
props: {
results: {
type: Array,
required: true,
},
},
};
</script>
<style scoped>
.search-results {
max-width:src="result.photo" 800px;
margin: 0 auto;
padding: 20px;
}
.results-container {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
gap: 20px;
}
</style>