En este módulo, construiremos un sitio web de comercio electrónico utilizando Vue.js. Este proyecto te permitirá aplicar los conceptos aprendidos en los módulos anteriores y te dará una experiencia práctica en el desarrollo de una aplicación web completa.

Objetivos del Proyecto

  • Crear una aplicación Vue.js para un sitio web de comercio electrónico.
  • Implementar la gestión de estado con Vuex.
  • Configurar rutas con Vue Router.
  • Utilizar componentes dinámicos y asíncronos.
  • Integrar un sistema de autenticación básico.
  • Implementar un carrito de compras y un sistema de pago simulado.

Estructura del Proyecto

  1. Configuración del Proyecto
  2. Diseño de la Interfaz de Usuario
  3. Gestión de Productos
  4. Carrito de Compras
  5. Autenticación de Usuarios
  6. Sistema de Pago
  7. Despliegue

  1. Configuración del Proyecto

Paso 1: Crear un Nuevo Proyecto Vue

Primero, crea un nuevo proyecto Vue utilizando Vue CLI.

vue create ecommerce-website

Selecciona las opciones predeterminadas o personaliza según tus necesidades.

Paso 2: Instalar Dependencias Necesarias

Instala Vue Router y Vuex.

cd ecommerce-website
npm install vue-router vuex

Paso 3: Configurar Vue Router

Crea un archivo router.js en la carpeta src y configura las rutas básicas.

// src/router.js
import Vue from 'vue';
import Router from 'vue-router';
import Home from './views/Home.vue';
import Product from './views/Product.vue';
import Cart from './views/Cart.vue';
import Login from './views/Login.vue';

Vue.use(Router);

export default new Router({
  routes: [
    { path: '/', component: Home },
    { path: '/product/:id', component: Product },
    { path: '/cart', component: Cart },
    { path: '/login', component: Login }
  ]
});

Paso 4: Configurar Vuex

Crea un archivo store.js en la carpeta src y configura el estado inicial.

// src/store.js
import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    products: [],
    cart: [],
    user: null
  },
  mutations: {
    setProducts(state, products) {
      state.products = products;
    },
    addToCart(state, product) {
      state.cart.push(product);
    },
    setUser(state, user) {
      state.user = user;
    }
  },
  actions: {
    fetchProducts({ commit }) {
      // Simulación de una llamada a una API
      const products = [
        { id: 1, name: 'Producto 1', price: 100 },
        { id: 2, name: 'Producto 2', price: 200 }
      ];
      commit('setProducts', products);
    }
  }
});

  1. Diseño de la Interfaz de Usuario

Paso 1: Crear Componentes Básicos

Crea componentes para la cabecera, pie de página y navegación.

<!-- src/components/Header.vue -->
<template>
  <header>
    <h1>Tienda en Línea</h1>
    <nav>
      <router-link to="/">Inicio</router-link>
      <router-link to="/cart">Carrito</router-link>
      <router-link to="/login">Iniciar Sesión</router-link>
    </nav>
  </header>
</template>

<script>
export default {
  name: 'Header'
};
</script>

Paso 2: Crear Vistas

Crea las vistas para el inicio, producto, carrito y login.

<!-- src/views/Home.vue -->
<template>
  <div>
    <Header />
    <h2>Productos</h2>
    <div v-for="product in products" :key="product.id">
      <router-link :to="'/product/' + product.id">{{ product.name }}</router-link>
      <p>{{ product.price }}</p>
    </div>
  </div>
</template>

<script>
import { mapState } from 'vuex';
import Header from '../components/Header.vue';

export default {
  name: 'Home',
  components: { Header },
  computed: {
    ...mapState(['products'])
  },
  created() {
    this.$store.dispatch('fetchProducts');
  }
};
</script>

  1. Gestión de Productos

Paso 1: Crear la Vista del Producto

Crea una vista detallada para cada producto.

<!-- src/views/Product.vue -->
<template>
  <div>
    <Header />
    <div v-if="product">
      <h2>{{ product.name }}</h2>
      <p>{{ product.price }}</p>
      <button @click="addToCart(product)">Agregar al Carrito</button>
    </div>
  </div>
</template>

<script>
import { mapState } from 'vuex';
import Header from '../components/Header.vue';

export default {
  name: 'Product',
  components: { Header },
  computed: {
    product() {
      return this.$store.state.products.find(
        product => product.id === parseInt(this.$route.params.id)
      );
    }
  },
  methods: {
    addToCart(product) {
      this.$store.commit('addToCart', product);
    }
  }
};
</script>

  1. Carrito de Compras

Paso 1: Crear la Vista del Carrito

Crea una vista para mostrar los productos en el carrito.

<!-- src/views/Cart.vue -->
<template>
  <div>
    <Header />
    <h2>Carrito de Compras</h2>
    <div v-for="item in cart" :key="item.id">
      <p>{{ item.name }} - {{ item.price }}</p>
    </div>
    <p>Total: {{ total }}</p>
  </div>
</template>

<script>
import { mapState } from 'vuex';
import Header from '../components/Header.vue';

export default {
  name: 'Cart',
  components: { Header },
  computed: {
    ...mapState(['cart']),
    total() {
      return this.cart.reduce((sum, item) => sum + item.price, 0);
    }
  }
};
</script>

  1. Autenticación de Usuarios

Paso 1: Crear la Vista de Login

Crea una vista para el inicio de sesión de usuarios.

<!-- src/views/Login.vue -->
<template>
  <div>
    <Header />
    <h2>Iniciar Sesión</h2>
    <form @submit.prevent="login">
      <input v-model="username" placeholder="Nombre de Usuario" />
      <input v-model="password" type="password" placeholder="Contraseña" />
      <button type="submit">Iniciar Sesión</button>
    </form>
  </div>
</template>

<script>
import Header from '../components/Header.vue';

export default {
  name: 'Login',
  components: { Header },
  data() {
    return {
      username: '',
      password: ''
    };
  },
  methods: {
    login() {
      // Simulación de autenticación
      const user = { username: this.username };
      this.$store.commit('setUser', user);
      this.$router.push('/');
    }
  }
};
</script>

  1. Sistema de Pago

Paso 1: Simular el Pago

Añade un botón de pago en la vista del carrito.

<!-- src/views/Cart.vue -->
<template>
  <div>
    <Header />
    <h2>Carrito de Compras</h2>
    <div v-for="item in cart" :key="item.id">
      <p>{{ item.name }} - {{ item.price }}</p>
    </div>
    <p>Total: {{ total }}</p>
    <button @click="checkout">Pagar</button>
  </div>
</template>

<script>
import { mapState } from 'vuex';
import Header from '../components/Header.vue';

export default {
  name: 'Cart',
  components: { Header },
  computed: {
    ...mapState(['cart']),
    total() {
      return this.cart.reduce((sum, item) => sum + item.price, 0);
    }
  },
  methods: {
    checkout() {
      alert('Pago realizado con éxito!');
      this.$store.commit('setCart', []);
    }
  }
};
</script>

  1. Despliegue

Paso 1: Construir para Producción

Construye la aplicación para producción.

npm run build

Paso 2: Desplegar en un Servidor

Sigue las instrucciones de tu proveedor de hosting para desplegar la aplicación. Puedes usar servicios como Netlify, Vercel o GitHub Pages.

Conclusión

En este proyecto, hemos construido un sitio web de comercio electrónico utilizando Vue.js. Hemos cubierto la configuración del proyecto, el diseño de la interfaz de usuario, la gestión de productos, el carrito de compras, la autenticación de usuarios y un sistema de pago simulado. Este proyecto te ha proporcionado una experiencia práctica en el desarrollo de una aplicación web completa con Vue.js.

¡Felicidades por completar el proyecto! Ahora estás listo para enfrentar desafíos más avanzados y construir aplicaciones más complejas con Vue.js.

Curso de Vue.js

Módulo 1: Introducción a Vue.js

Módulo 2: Conceptos Básicos de Vue.js

Módulo 3: Componentes de Vue.js

Módulo 4: Vue Router

Módulo 5: Gestión de Estado con Vuex

Módulo 6: Directivas de Vue.js

Módulo 7: Plugins de Vue.js

Módulo 8: Pruebas en Vue.js

Módulo 9: Conceptos Avanzados de Vue.js

Módulo 10: Construcción y Despliegue de Aplicaciones Vue.js

Módulo 11: Proyectos Reales con Vue.js

© Copyright 2024. Todos los derechos reservados