diff --git a/src/components/CatalogueImagesManagement.vue b/src/components/CatalogueImagesManagement.vue
new file mode 100644
index 0000000..f752ada
--- /dev/null
+++ b/src/components/CatalogueImagesManagement.vue
@@ -0,0 +1,383 @@
+
+
+
+
+ Imágenes de Catálogo
+
+
+
+ Agregar Imagen
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ productMap[item.product] || `ID: ${item.product}` }}
+
+
+
+ {{ formatDate(item.uploaded_at) }}
+
+
+
+
+ mdi-pencil
+
+
+ mdi-delete
+
+
+
+
+
+
+
+
+
+ No hay imágenes de catálogo
+
+
+
+
+
+
+
+
+
+
+ {{ dialog.isEdit ? 'Editar' : 'Agregar' }} Imagen de Catálogo
+
+
+
+
+
+
+
+
+
+
+
+
+ Cancelar
+
+ {{ dialog.isEdit ? 'Actualizar' : 'Agregar' }}
+
+
+
+
+
+
+
+ Confirmar Eliminación
+
+ ¿Está seguro de eliminar esta imagen de catálogo?
+
+
+
+
+ Cancelar
+
+
+ Eliminar
+
+
+
+
+
+
+ {{ snackbar.message }}
+
+ Cerrar
+
+
+
+
+
+
+
+
diff --git a/src/components/NavBar.vue b/src/components/NavBar.vue
index e0c0e27..ad8c616 100644
--- a/src/components/NavBar.vue
+++ b/src/components/NavBar.vue
@@ -106,8 +106,9 @@
{ title: 'Cuadres de tarro', route: '/cuadres_de_tarro', icon: 'mdi-chart-bar'},
{ title: 'CSV Tryton', route: '/ventas_para_tryton', icon: 'mdi-file-table'},
{ title: 'Compra adm', route: '/compra_admin', icon: 'mdi-cart'},
- { title: 'Gestión de Productos', route: '/admin/products', icon: 'mdi-package-variant'},
- { title: 'Ver Ventas por Catálogo', route: '/admin/catalog-sales', icon: 'mdi-cart-arrow-down'},
+ { title: 'Gestión de Productos', route: '/admin/products', icon: 'mdi-package-variant'},
+ { title: 'Imágenes de Catálogo', route: '/admin/catalogue-images', icon: 'mdi-image-multiple'},
+ { title: 'Ver Ventas por Catálogo', route: '/admin/catalog-sales', icon: 'mdi-cart-arrow-down'},
{ divider: true },
{ header: 'Sincronización Tryton' },
{ title: 'Importar Productos', route: '/sincronizar_productos_tryton', icon: 'mdi-download'},
diff --git a/src/pages/admin/catalogue-images.vue b/src/pages/admin/catalogue-images.vue
new file mode 100644
index 0000000..96fb29e
--- /dev/null
+++ b/src/pages/admin/catalogue-images.vue
@@ -0,0 +1,10 @@
+
+
+
+
+
diff --git a/src/pages/catalog.vue b/src/pages/catalog.vue
index 01812b2..7e68a95 100644
--- a/src/pages/catalog.vue
+++ b/src/pages/catalog.vue
@@ -379,7 +379,7 @@ export default {
this.items = data.map((product) => ({
...product,
quantity: 0,
- img: product.img || not_image_product,
+ img: (product.catalogue_images?.length > 0) ? product.catalogue_images[0] : (product.img || not_image_product),
}));
})
.catch((error) => {
diff --git a/src/router/index.js b/src/router/index.js
index 6cb9cb5..a896bdd 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -21,6 +21,7 @@ const ADMIN_ROUTES = [
'/cuadrar_tarro',
'/admin/products',
'/admin/catalog-sales',
+ '/admin/catalogue-images',
]
const router = createRouter({
diff --git a/src/services/api.js b/src/services/api.js
index 5f9ec70..2147aa9 100644
--- a/src/services/api.js
+++ b/src/services/api.js
@@ -82,6 +82,22 @@ class Api {
getCurrentUser() {
return this.apiImplementation.getCurrentUser();
}
+
+ getCatalogueImages() {
+ return this.apiImplementation.getCatalogueImages();
+ }
+
+ createCatalogueImage(data) {
+ return this.apiImplementation.createCatalogueImage(data);
+ }
+
+ updateCatalogueImage(id, data) {
+ return this.apiImplementation.updateCatalogueImage(id, data);
+ }
+
+ deleteCatalogueImage(id) {
+ return this.apiImplementation.deleteCatalogueImage(id);
+ }
}
export default Api;
diff --git a/src/services/django-api.js b/src/services/django-api.js
index 3ac56e5..61153fa 100644
--- a/src/services/django-api.js
+++ b/src/services/django-api.js
@@ -130,6 +130,30 @@ class DjangoApi {
const url = this.base + "/api/users/me/";
return this.getRequest(url);
}
+
+ getCatalogueImages() {
+ const url = this.base + "/don_confiao/api/catalogue_images/";
+ return this.getRequest(url);
+ }
+
+ createCatalogueImage(data) {
+ const url = this.base + "/don_confiao/api/catalogue_images/";
+ return http.post(url, data, {
+ headers: { 'Content-Type': undefined },
+ }).then((r) => r.data);
+ }
+
+ updateCatalogueImage(id, data) {
+ const url = this.base + `/don_confiao/api/catalogue_images/${id}/`;
+ return http.put(url, data, {
+ headers: { 'Content-Type': undefined },
+ }).then((r) => r.data);
+ }
+
+ deleteCatalogueImage(id) {
+ const url = this.base + `/don_confiao/api/catalogue_images/${id}/`;
+ return http.delete(url).then((r) => r.data);
+ }
}
export default DjangoApi;