- Initializes a new Nuxt.js 3 project. - Configures Tailwind CSS with custom theme settings. - Creates reusable components for Header, Footer, and ProductCard. - Implements the Homepage, Product Listing, Product Detail, Shopping Cart, and Checkout pages with mock data. - The core e-commerce flow is now in place for further development.
109 lines
6.3 KiB
Vue
109 lines
6.3 KiB
Vue
<script setup lang="ts">
|
|
import ProductCard from '~/components/ProductCard.vue';
|
|
|
|
const products = [
|
|
{
|
|
name: 'Crystal Buckle Heels',
|
|
price: '$249.00',
|
|
image: 'https://lh3.googleusercontent.com/aida-public/AB6AXuDFgRVLo9r2hiuGgs2Abz_T6QKG9bOi3wc9zsCQDh4YPBMqYZEqAY1hYCrq4uaRMy1-MATzPvgWEfCHTNTik6id4JZQsOSvIuc7iqdOOJ3y2SjL_VSd95VnBnFSdlkhZ3lB7whEYd4JgrGDzMW1DqRcBK2UJAqR7-6RyF3eQZvUxNScqGpUndwdU3eQa-m8zfUaCNa0Oim6p8QVlSsKxEvLdt11LBBZc7s3AJtD0L8s0shyWOQztiC06zBvvNE7q5wTPvGHZxs0QGkw'
|
|
},
|
|
{
|
|
name: 'Aura Running Sneaker',
|
|
price: '$120.00',
|
|
image: 'https://lh3.googleusercontent.com/aida-public/AB6AXuBUsoj7sI3otebpOT1NvFacPi_bAMGK7M3XtgTWHidCzih-2B1hc_KOboRzlmnpqSgX1SRXJOP9gwwGplvwwYNGePtxMYBdtBhoXrIezkhaxS3cmKQ3QzJ8isICLNJR3sz3GqQdPFuBf2uHATljRPogFt7pz9Cep0n-dpyRoGRK46rUz5I3ZlyzKozkthLm192lM0NVLV5b1VeglxznHPBCon4mh991UkMULX76hF-b3MgTVTXwqV7H8PGOSzcGHPRIhXlaGNVjMUzh'
|
|
},
|
|
{
|
|
name: 'Classic Leather Boot',
|
|
price: '$180.00',
|
|
image: 'https://lh3.googleusercontent.com/aida-public/AB6AXuASYqQ-xv37442xXiKtayimwYtsTwOCVoPrxqaTGCd78jFIKE7g7PJIw_Qqz1jQNLleGS7T3gdD1o7DPDTpHBy8aA6O9R-GMCZGoyEQHEGlXIdo3upRGRjrZvyo6XomAmQc8lNn-ndUbH-ljkWunHJNeA5vAlpdj0IvSIhKPwNJHDof3fTX0kHQtNOX4A6kybAFp6WQsGw1AAIkAYwkKzIvKpxars9A-2oORUY_DqZppwmveUZQqS0_UdDAuWHFsBgPPkU2VDgyfM0M'
|
|
},
|
|
{
|
|
name: 'Essential Leather Flat',
|
|
price: '$95.00',
|
|
image: 'https://lh3.googleusercontent.com/aida-public/AB6AXuAL2vyOQmOO4bSBIZbGPkf7-mh-KNap_e9mpQqEnBT90u_Jyu0m5sFQmwWUps7suJk4jT1dIT19UB_xcOcjdHrEXPKBkTptuKaiGy5lQOKUZ5u-nOHeGRizo1Y9sinFrq0RB6zimeAJ1hGmBc-ZNa1i3Pcz9LVP6ZZc4YBPBE-ggXMj6WmyBFGsg4NjDEh0Eni4cx8kRGiiUTQHfaNr5l1G2OOvUkCd08Xt4SUjA_heSHqToJRxbUlACq5TSwpGVoKJP31TnLFiBz0_'
|
|
},
|
|
{
|
|
name: 'Retro Runner 95',
|
|
price: '$145.00',
|
|
image: 'https://lh3.googleusercontent.com/aida-public/AB6AXuC3Y_W0OtGAaWhjNJdTXpe_MYiY-ScEB4UCYIa_s6FO9yzvTZ_7FdrtfbxP3Hmv8w4k9aR01kQidWeAGACUpaqMCvYzIeNnSSqP12y4atL1I2Afk6LLpRZzeooGx68gj5mGyrK_GDjTyozj3uA_QEUzlSLHOppzk_eDBr84UngqCl9pl3uhpUr_A51hHJ07Gj8hQontBjGYWE6IlUDh-h0fcKTFGrYTZplFJ13pzXT6UycWmAVVV8E2gTVrMOqC9IOotVlrDpLf0kpT'
|
|
},
|
|
{
|
|
name: 'Minimalist Sandal',
|
|
price: '$88.00',
|
|
image: 'https://lh3.googleusercontent.com/aida-public/AB6AXuBmi5QsPgRn3vix_w7I69BCImcy3cow7lvsuSD1VftP4jy3qoy5N0JlpvAJ4ed533Tq-scSsaIFX-xdSzUZrNfkhhq_2QzaBbes1c_X5cQ2UgkRoJPpNneOPELvk3QNMRZGPAU3Kqb16A_7JjHkJiFjhwykYzNP6_GBuQK9KZ2Wyh3NkNqk62iDWhbWMfNOe9aJDeeDZtCbo9YfIiRJfhH3_SDA_YzmBFRvq0riET-tEuz0H5meo1vZ7W7TsOSImSEN0AUA5WzmJZtO'
|
|
}
|
|
]
|
|
</script>
|
|
|
|
<template>
|
|
<main class="mx-auto w-full max-w-7xl px-4 py-8 sm:px-6 lg:px-8">
|
|
<div class="mb-6">
|
|
<!-- Breadcrumbs -->
|
|
<div class="flex flex-wrap gap-2 text-sm">
|
|
<a class="font-medium text-gray-500 dark:text-gray-400 hover:text-primary" href="#">Home</a>
|
|
<span class="font-medium text-gray-500 dark:text-gray-400">/</span>
|
|
<a class="font-medium text-gray-500 dark:text-gray-400 hover:text-primary" href="#">Women</a>
|
|
<span class="font-medium text-gray-500 dark:text-gray-400">/</span>
|
|
<span class="font-medium text-[#0d111b] dark:text-white">Shoes</span>
|
|
</div>
|
|
</div>
|
|
<div class="grid grid-cols-1 gap-8 lg:grid-cols-4 lg:gap-12">
|
|
<!-- Sidebar with Filters -->
|
|
<aside class="w-full lg:col-span-1">
|
|
<div class="sticky top-28 space-y-6">
|
|
<div class="flex items-center justify-between">
|
|
<h3 class="text-xl font-bold text-[#0d111b] dark:text-white">Filters</h3>
|
|
<button class="text-sm font-medium text-gray-500 dark:text-gray-400 hover:text-primary">Clear All</button>
|
|
</div>
|
|
<!-- Category Filter -->
|
|
<div class="space-y-4 border-t border-gray-200 dark:border-gray-700 pt-6">
|
|
<h4 class="font-semibold text-[#0d111b] dark:text-white">Category</h4>
|
|
<ul class="space-y-2 text-sm">
|
|
<li><a class="text-gray-600 dark:text-gray-300 hover:text-primary" href="#">Sneakers</a></li>
|
|
<li><a class="text-gray-600 dark:text-gray-300 hover:text-primary" href="#">Heels</a></li>
|
|
<li><a class="text-gray-600 dark:text-gray-300 hover:text-primary" href="#">Boots</a></li>
|
|
<li><a class="text-gray-600 dark:text-gray-300 hover:text-primary" href="#">Flats</a></li>
|
|
<li><a class="text-gray-600 dark:text-gray-300 hover:text-primary" href="#">Sandals</a></li>
|
|
</ul>
|
|
</div>
|
|
<!-- Price Filter -->
|
|
<div class="space-y-4 border-t border-gray-200 dark:border-gray-700 pt-6">
|
|
<h4 class="font-semibold text-[#0d111b] dark:text-white">Price Range</h4>
|
|
<div class="flex items-center gap-2">
|
|
<input class="w-full h-2 bg-gray-200 dark:bg-gray-700 rounded-lg appearance-none cursor-pointer accent-primary" max="500" min="0" type="range" value="75" />
|
|
</div>
|
|
<div class="flex justify-between text-sm text-gray-500 dark:text-gray-400">
|
|
<span>$0</span>
|
|
<span>$500+</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</aside>
|
|
<!-- Product Grid -->
|
|
<div class="w-full lg:col-span-3">
|
|
<div class="flex flex-col gap-6">
|
|
<div class="flex flex-wrap items-center justify-between gap-4">
|
|
<div class="flex flex-col gap-1">
|
|
<!-- Page Heading -->
|
|
<h1 class="text-3xl font-black leading-tight tracking-[-0.033em] text-[#0d111b] dark:text-white sm:text-4xl">Women's Shoes</h1>
|
|
<!-- Meta Text -->
|
|
<p class="text-sm font-normal leading-normal text-gray-500 dark:text-gray-400">Showing 1-12 of 128 results</p>
|
|
</div>
|
|
<!-- Chips for Sorting -->
|
|
<div class="flex gap-3">
|
|
<button class="flex h-10 shrink-0 items-center justify-center gap-x-2 rounded-lg bg-gray-200/60 dark:bg-gray-800/60 pl-4 pr-3 text-[#0d111b] dark:text-white hover:bg-gray-200 dark:hover:bg-gray-800">
|
|
<p class="text-sm font-medium leading-normal">Sort by: Relevance</p>
|
|
<span class="material-symbols-outlined">expand_more</span>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<!-- Product Grid Container -->
|
|
<div class="grid grid-cols-1 gap-x-6 gap-y-10 sm:grid-cols-2 xl:grid-cols-3">
|
|
<ProductCard v-for="product in products" :key="product.name" :product="product" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</main>
|
|
</template>
|