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 @@
+
+
+
+
+
+ mdi-map-marker
+
Visítanos
+
+
+ Encuentra nuestra tienda física y adquiere nuestros productos
+
+
+
+
+
+ mdi-map-marker
+
+ {{ settings.address }}
+
+
+
+ Cómo llegar
+
+
+ Ver en el mapa
+
+
+
+
+
+ La ubicación en el mapa aún no está configurada.
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+ Datos de la Tienda
+
+
+
+ Guardar Cambios
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Logo del sitio
+
+
+
+ Quitar logo actual
+
+
+
+
+
+
+
+
+
+ {{ snackbar.message }}
+
+ Cerrar
+
+
+
+
+
+
+
+
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 @@
- mdi-progress-wrench
+ mdi-code-tags
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
+ }
+ }
+})