mirror of
				https://github.com/KevinMidboe/planetposen.git
				synced 2025-10-29 17:50:32 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			145 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | |
|   <main role="main" v-if="product">
 | |
|     <div class="banner padding-bottom--lg" :class="'bg-' + color">
 | |
|       <div class="banner-content top-show-sm col-wrap max-width">
 | |
|         <h1>{{ product.name }}</h1>
 | |
|       </div>
 | |
|     </div>
 | |
| 
 | |
|     <section class="product padding-top--lg">
 | |
|       <div class="max-width col-wrap">
 | |
|         <div class="col-6 image-preview">
 | |
|           <img :src="product.image" />
 | |
|         </div>
 | |
|         <div class="col-6 details">
 | |
|           <div class="pricing">
 | |
|             <span class="amount">24.99</span>
 | |
|             <span class="currency">kr</span>
 | |
|           </div>
 | |
| 
 | |
|           <p v-if="product.description">{{ product.description }}</p>
 | |
|           <p v-else class="description">Notatbøkene fra All Pine Press er trykket i Oslo og papir fra Hellefoss Paper AS i Hokksund. (Notatbøkene er uten linjer)</p>
 | |
| 
 | |
|           <div class="stock" v-if="inStock">
 | |
|             <i class="icon icon--checkmark-circle"></i>
 | |
|             På lager
 | |
|           </div>
 | |
|           <div class="stock soldOut" v-else>
 | |
|             <i class="icon icon--close-circle"></i>
 | |
|             Utsolgt
 | |
|           </div>
 | |
| 
 | |
|           <div class="actions">
 | |
|           <!-- Variation picker -->
 | |
| 
 | |
|           <!-- Amount picker -->
 | |
|           <!-- Buy button -->
 | |
|             <Button color="black" :small="true" @click="addToCart" :scaleRotate="true">Add to cart</Button>
 | |
|           </div>
 | |
| 
 | |
|           <div class="meta">
 | |
|             <span class="categories">
 | |
|               Kategorier:
 | |
|             </span>
 | |
|           </div>
 | |
|         </div>
 | |
|       </div>
 | |
|     </section>
 | |
|   </main>
 | |
| </template>
 | |
| 
 | |
| <script>
 | |
| import Button from '@/components/ui/Button';
 | |
| import store from '@/store'
 | |
| 
 | |
| export default {
 | |
|   components: { Button },
 | |
|   data() {
 | |
|     return {
 | |
|       color: Math.random() > 0.5 ? 'yellow' : 'blue',
 | |
|       inStock: Math.random() > 0.5,
 | |
|       product: null
 | |
|     }
 | |
|   },
 | |
|   created() {
 | |
|     document.querySelector('body').style.backgroundColor = 'white';
 | |
| 
 | |
|     const productSlug = this.$route.params.slug
 | |
| 
 | |
|     let url = `/api/products/${ productSlug }`;
 | |
|     if (window.location.href.includes('localhost'))
 | |
|       url = 'http://localhost:30010'.concat(url)
 | |
| 
 | |
|     fetch(url)
 | |
|       .then(resp => resp.json())
 | |
|       .then(product => this.product = product);
 | |
|   },
 | |
|   methods: {
 | |
|     addToCart() {
 | |
|       store.dispatch('cartModule/addItemToCart', { ...this.product });
 | |
|     }
 | |
|   },
 | |
|   beforeDestroy() {
 | |
|     document.querySelector('body').style.backgroundColor = '#19171A';
 | |
|   }
 | |
| }
 | |
| </script>
 | |
| 
 | |
| <style lang="scss" scoped>
 | |
| @import '/frontend//styles/spacing';
 | |
| @import '/frontend//styles/variables';
 | |
| 
 | |
| main {
 | |
|   color: var(--color-background);
 | |
| }
 | |
| 
 | |
| section.product {
 | |
|   overflow: auto;
 | |
| 
 | |
|   @include mobile {
 | |
|     .col-6 {
 | |
|       width: 100%;
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| h1 {
 | |
|   text-align: center;
 | |
| }
 | |
| 
 | |
| .image-preview img {
 | |
|   border-radius: 6px;
 | |
|   width: 100%;
 | |
| }
 | |
| 
 | |
| .details {
 | |
|   margin-top: 1rem;
 | |
|   font-size: 1.3rem;
 | |
| 
 | |
|   > div, > p {
 | |
|     margin-bottom: 2.25rem;
 | |
|   }
 | |
| 
 | |
|   .stock {
 | |
|     padding: 1rem;
 | |
|     border: 4px solid var(--color-green);
 | |
|     width: max-content;
 | |
| 
 | |
|     .icon {
 | |
|       position: relative;
 | |
|       top: 2px;
 | |
|       left: -4px;
 | |
|     }
 | |
| 
 | |
|     &.soldOut {
 | |
|       border-color: var(--color-pink);
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   .pricing {
 | |
|     font-size: 2rem;
 | |
|   }
 | |
| }
 | |
| 
 | |
| </style>
 |