diff --git a/package-lock.json b/package-lock.json index a08e7f3..2312abe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "@mdi/font": "7.4.47", "axios": "^1.13.5", "core-js": "^3.37.1", + "leaflet": "^1.9.4", "roboto-fontface": "*", "vee-validate": "^4.14.6", "vue": "^3.4.31", @@ -4991,6 +4992,12 @@ "json-buffer": "3.0.1" } }, + "node_modules/leaflet": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz", + "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==", + "license": "BSD-2-Clause" + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", diff --git a/package.json b/package.json index 3ad6e4d..8818240 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "@mdi/font": "7.4.47", "axios": "^1.13.5", "core-js": "^3.37.1", + "leaflet": "^1.9.4", "roboto-fontface": "*", "vee-validate": "^4.14.6", "vue": "^3.4.31", diff --git a/src/components/Login.vue b/src/components/Login.vue index 3434fa0..d65b6bb 100644 --- a/src/components/Login.vue +++ b/src/components/Login.vue @@ -7,12 +7,7 @@
- +

Iniciar Sesión

@@ -74,7 +69,7 @@ import { ref } from 'vue' import { useRouter } from 'vue-router' import AuthService from '@/services/auth' -import logo from '@/assets/logo_colorful.png' +import SiteLogo from '@/components/SiteLogo.vue' const router = useRouter() diff --git a/src/components/NavBar.vue b/src/components/NavBar.vue index da1364e..3800a66 100644 --- a/src/components/NavBar.vue +++ b/src/components/NavBar.vue @@ -109,6 +109,7 @@ { title: 'Compra adm', route: '/compra_admin', icon: 'mdi-cart'}, { 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: 'Datos de la Tienda', route: '/admin/store-settings', icon: 'mdi-map-marker'}, { title: 'Ver Ventas por Catálogo', route: '/admin/catalog-sales', icon: 'mdi-cart-arrow-down'}, { divider: true }, { header: 'Sincronización Tryton' }, diff --git a/src/components/SiteLogo.vue b/src/components/SiteLogo.vue new file mode 100644 index 0000000..5c9052e --- /dev/null +++ b/src/components/SiteLogo.vue @@ -0,0 +1,39 @@ + + + diff --git a/src/components/StoreLocation.vue b/src/components/StoreLocation.vue new file mode 100644 index 0000000..8def411 --- /dev/null +++ b/src/components/StoreLocation.vue @@ -0,0 +1,167 @@ + + + + + diff --git a/src/components/StoreSettingsManagement.vue b/src/components/StoreSettingsManagement.vue new file mode 100644 index 0000000..d7789e1 --- /dev/null +++ b/src/components/StoreSettingsManagement.vue @@ -0,0 +1,235 @@ + + + + + diff --git a/src/components/Wellcome.vue b/src/components/Wellcome.vue index d43c8bb..4eb5031 100644 --- a/src/components/Wellcome.vue +++ b/src/components/Wellcome.vue @@ -8,12 +8,7 @@
- +

Don Confiao te atiende

Economía solidaria, mercado justo, alimentación sana @@ -21,6 +16,10 @@

+
+ +
+ @@ -45,25 +44,39 @@ En DesarrolloSoftware Libre - Don Confiao apenas está entendiendo cómo funciona esta tienda y - por ahora - solo puede atender las compras de contado, ya sea en efectivo o consignación. - - Si no vas a pagar tu compra recuerda que debes hacerlo en la - planilla manual - + Don Confiao es un proyecto de + Software Libre. Su desarrollo está + dividido en dos repositorios: el backend y el frontend. + + + Backend + + + Frontend + + @@ -127,8 +140,9 @@ diff --git a/src/pages/admin/store-settings.vue b/src/pages/admin/store-settings.vue new file mode 100644 index 0000000..db9c8a4 --- /dev/null +++ b/src/pages/admin/store-settings.vue @@ -0,0 +1,10 @@ + + + diff --git a/src/router/index.js b/src/router/index.js index 0377c58..3f712f0 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -24,6 +24,7 @@ const ADMIN_ROUTES = [ '/admin/products', '/admin/catalog-sales', '/admin/catalogue-images', + '/admin/store-settings', ] const router = createRouter({ diff --git a/src/services/api.js b/src/services/api.js index e3f845d..20363e0 100644 --- a/src/services/api.js +++ b/src/services/api.js @@ -102,6 +102,14 @@ class Api { deleteCatalogueImage(id) { return this.apiImplementation.deleteCatalogueImage(id); } + + getStoreSettings() { + return this.apiImplementation.getStoreSettings(); + } + + updateStoreSettings(data) { + return this.apiImplementation.updateStoreSettings(data); + } } export default Api; diff --git a/src/services/django-api.js b/src/services/django-api.js index 8896bc8..35717ff 100644 --- a/src/services/django-api.js +++ b/src/services/django-api.js @@ -160,6 +160,18 @@ class DjangoApi { const url = this.base + `/don_confiao/api/catalogue_images/${id}/`; return http.delete(url).then((r) => r.data); } + + getStoreSettings() { + const url = this.base + "/don_confiao/api/store_settings"; + return this.getRequest(url); + } + + updateStoreSettings(data) { + const url = this.base + "/don_confiao/api/store_settings"; + return http.patch(url, data, { + headers: { 'Content-Type': undefined }, + }).then((r) => r.data); + } } export default DjangoApi; diff --git a/src/stores/settings.js b/src/stores/settings.js new file mode 100644 index 0000000..901307f --- /dev/null +++ b/src/stores/settings.js @@ -0,0 +1,26 @@ +import { defineStore } from 'pinia' + +export const useSettingsStore = defineStore('settings', { + state: () => ({ + settings: null, + loaded: false + }), + getters: { + logo: (state) => state.settings?.logo || null, + address: (state) => state.settings?.address || '', + latitude: (state) => state.settings?.latitude, + longitude: (state) => state.settings?.longitude + }, + actions: { + async fetchSettings(api) { + if (this.loaded) return this.settings + this.settings = await api.getStoreSettings() + this.loaded = true + return this.settings + }, + setSettings(settings) { + this.settings = settings + this.loaded = true + } + } +})