Vue.component('categorias-container', { template: ` <div v-show="visible" class="container"> <div class="columns is-multiline is-mobile"> <div v-for="catego in categorias" class="block column is-one-quarter-desktop is-one-third-tablet is-half-mobile"> <div @click.capture="seleccionarCategoria(catego)" class="card" style="height:100%" > <div class="card-content"> <div class="media"> <div class="media-content" style="overflow:hidden"> <p class="title is-6" v-text="catego"></p> </div> </div> </div> </div><!-- END CARD --> </div><!-- END BLOCK COLUMN --> </div><!-- END COLUMNS --> </div><!-- END CONTAINER -->`, data() { return { categorias: null, visible: true, miga: { nombre: "Categorías", href: "/productos" } } }, mounted() { axios.get("/api/categorias").then(response => { this.categorias = response.data; }); Event.$emit("migas-setear-como-inicio",this.miga); }, methods: { seleccionarCategoria(categoria) { this.visible = false; Event.$emit("categoria-seleccionada",categoria); } } }); Vue.component('productos-container', { template: ` <div v-show="visible" class="container"> <div class="columns is-multiline is-mobile"> <div v-for="producto in productos" class="block column is-one-quarter-desktop is-one-third-tablet is-half-mobile"> <div @click.capture="seleccionarProducto(producto)" class="card" style="height:100%"> <div class="card-image"> <figure class="image is-4by3"> <img v-bind:src="producto.imagen ? producto.imagen : 'https://bulma.io/images/placeholders/1280x960.png'"> </figure> <figure v-show="producto.nacional" class="image icono is-32x32"> <img src="/assets/uruguay.png"> </figure> <figure v-show="producto.economia_solidaria" class="image icono is-32x32"> <img src="/assets/solidaria.png"> </figure> </div> <div class="card-content"> <div class="media"> <div class="media-content"> <p class="title is-6" v-text="producto.nombre"></p> <p class="subtitle is-7" v-text="producto.proveedor"></p> <p class="subtitle is-7">$<span v-text="producto.precio"></span></p> </div> </div> </div> </div><!-- END CARD --> </div><!-- END BLOCK COLUMN --> </div><!-- END COLUMNS --> </div><!-- END CONTAINER -->`, data() { return { productos: [], visible: false, categoria: null, paginar: 150 } }, computed: { miga: function(){ return { nombre: this.categoria, href: "#" + this.categoria } } }, mounted() { Event.$on('categoria-seleccionada', (categoria) => { this.categoria = categoria; axios.get("/api/productos", { params: { categoria: this.categoria, paginar: this.paginar } }).then(response => { this.productos = response.data.data; }); this.visible = true; Event.$emit("migas-agregar",this.miga); }); }, methods: { seleccionarProducto(producto) { Event.$emit("producto-seleccionado",producto); } } }); Vue.component('producto-container', { template: ` <div v-bind:class="visible ? 'is-active modal' : 'modal'"> <div class="modal-background"></div> <div class="modal-card"> <header class="modal-card-head"> <p class="modal-card-title" v-text="producto.nombre"></p> <button class="delete" aria-label="close" @click.capture="cerrar"></button> </header> <section class="modal-card-body"> <div class="card-image"> <figure v-show="producto.nacional" class="image icono is-32x32" style="z-index:10"> <img src="/assets/uruguay.png"> </figure> <figure v-show="producto.economia_solidaria" class="image icono is-32x32" style="z-index:10"> <img src="/assets/solidaria.png"> </figure> <figure class="image is-4by3"> <img v-bind:src="producto.imagen ? producto.imagen : 'https://bulma.io/images/placeholders/1280x960.png'"> </figure> </div> <div class="media-content"> <p class="title is-4" v-text="producto.proveedor"></p> <p class="subtitle is-4">$<span v-text="producto.precio"></span></p> <p class="subtitle is-6"><span v-show="producto.apto_veganxs">Apto para veganxs. </span><span v-show="producto.apto_celiacxs">Apto para celíacxs.</span></p> <p class="subtitle is-5"><span v-text="producto.descripcion"></span></p> <div class="field has-addons is-centered is-thin-centered"> <p class="control"> <button class="button" @click="cant !== 0 ? cant-- : cant"> <span class="icon is-small"> <!-- Habría que ver de poner un ícono de - --> </span> <span>-</span> </button> </p> <p class="control"> <input id="cantidad" class="input" type="number" v-model.number="cant" style="text-align: center"> </p> <p class="control"> <button class="button" @click="cant++"> <span class="icon is-small"> <!-- Habría que ver de poner un ícono de + --> </span> <span>+</span> </button> </p> </div> </div> </section> <footer class="modal-card-foot"> <!-- Habría que ver si cambiar el botón cuando al cantidad es 0 --> <button class="button is-success" :disabled="cant <= 0" @click="agregarProducto">Aceptar</button> <button class="button" @click.capture="cerrar">Cancelar</button> </footer> </div> </div>`, data() { return { producto: null, visible: false, cant: 0 } }, computed: { miga: function(){ return { nombre: this.producto.nombre, href: "#" + this.producto.nombre } } }, methods: { cerrar() { this.cant = 0; this.visible = false; Event.$emit("migas-pop"); }, agregarProducto() { if (this.cant < 0) alert("No se puede agregar cantidades negativas") else if (!Number.isInteger(this.cant)) alert("Las cantidades deben ser números enteros") else { Event.$emit("sync-subpedido", this.cant, this.producto.id); this.cerrar(); } } }, mounted() { Event.$on('producto-seleccionado', (producto) => { this.producto = producto; this.visible = true; Event.$emit("migas-agregar",this.miga); }); } });