📸
diff --git a/frontend/src/views/OutilsView.vue b/frontend/src/views/OutilsView.vue
index 2f2346d..b6ab300 100644
--- a/frontend/src/views/OutilsView.vue
+++ b/frontend/src/views/OutilsView.vue
@@ -109,7 +109,7 @@
diff --git a/frontend/src/views/PlantesView.vue b/frontend/src/views/PlantesView.vue
index cfbcdb4..5b05d3f 100644
--- a/frontend/src/views/PlantesView.vue
+++ b/frontend/src/views/PlantesView.vue
@@ -495,7 +495,7 @@
diff --git a/frontend/src/views/ReglagesView.vue b/frontend/src/views/ReglagesView.vue
index b7faabb..8752004 100644
--- a/frontend/src/views/ReglagesView.vue
+++ b/frontend/src/views/ReglagesView.vue
@@ -112,7 +112,7 @@
@@ -188,6 +296,32 @@ const downloadingBackup = ref(false)
const backupMsg = ref('')
const apiBaseUrl = detectApiBaseUrl()
+// --- Image max width ---
+const imageWidthOptions = [
+ { value: 400, label: '400 px' },
+ { value: 600, label: '600 px' },
+ { value: 800, label: '800 px' },
+ { value: 1200, label: '1200 px' },
+ { value: 1600, label: '1600 px' },
+ { value: 2400, label: '2400 px' },
+ { value: 0, label: 'Originale' },
+]
+const imageMaxWidth = ref(1200)
+const imageMaxWidthLabel = computed(() => {
+ const opt = imageWidthOptions.find(o => o.value === imageMaxWidth.value)
+ return opt ? opt.label : `${imageMaxWidth.value} px`
+})
+const savingImage = ref(false)
+const imageSavedMsg = ref('')
+
+// --- Samba ---
+const samba = ref({ serveur: '', partage: '', sous_dossier: '', utilisateur: '', motdepasse: '' })
+const savingSamba = ref(false)
+const sambaSavedMsg = ref('')
+const sendingSamba = ref(false)
+const sambaSendMsg = ref('')
+const sambaError = ref(false)
+
// --- UI Size settings ---
const uiSizeSettings = [
{ key: 'ui_font_size', label: 'Corps de texte', min: 12, max: 24, step: 1, unit: 'px' },
@@ -276,11 +410,69 @@ async function loadSettings() {
if (v != null) uiSizes.value[s.key] = Number(v) || UI_SIZE_DEFAULTS[s.key]
}
applyUiSizes()
+ if (data.image_max_width != null) imageMaxWidth.value = Number(data.image_max_width) || 1200
+ if (data.samba_serveur != null) samba.value.serveur = data.samba_serveur
+ if (data.samba_partage != null) samba.value.partage = data.samba_partage
+ if (data.samba_sous_dossier != null) samba.value.sous_dossier = data.samba_sous_dossier
+ if (data.samba_utilisateur != null) samba.value.utilisateur = data.samba_utilisateur
+ if (data.samba_motdepasse != null) samba.value.motdepasse = data.samba_motdepasse
} catch {
// Laisse la valeur locale
}
}
+async function saveImageSettings() {
+ savingImage.value = true
+ imageSavedMsg.value = ''
+ try {
+ await settingsApi.update({ image_max_width: String(imageMaxWidth.value) })
+ imageSavedMsg.value = 'Enregistré'
+ setTimeout(() => { imageSavedMsg.value = '' }, 1800)
+ } catch {
+ imageSavedMsg.value = 'Erreur.'
+ setTimeout(() => { imageSavedMsg.value = '' }, 2200)
+ } finally {
+ savingImage.value = false
+ }
+}
+
+async function saveSambaSettings() {
+ savingSamba.value = true
+ sambaSavedMsg.value = ''
+ try {
+ await settingsApi.update({
+ samba_serveur: samba.value.serveur,
+ samba_partage: samba.value.partage,
+ samba_sous_dossier: samba.value.sous_dossier,
+ samba_utilisateur: samba.value.utilisateur,
+ samba_motdepasse: samba.value.motdepasse,
+ })
+ sambaSavedMsg.value = 'Enregistré'
+ setTimeout(() => { sambaSavedMsg.value = '' }, 1800)
+ } catch {
+ sambaSavedMsg.value = 'Erreur.'
+ setTimeout(() => { sambaSavedMsg.value = '' }, 2200)
+ } finally {
+ savingSamba.value = false
+ }
+}
+
+async function sendSambaBackup() {
+ sendingSamba.value = true
+ sambaSendMsg.value = ''
+ sambaError.value = false
+ try {
+ const res = await settingsApi.backupSamba()
+ sambaSendMsg.value = `Envoyé : ${res.fichier}`
+ } catch (err: any) {
+ sambaError.value = true
+ sambaSendMsg.value = err?.response?.data?.detail || 'Erreur lors de l\'envoi Samba.'
+ } finally {
+ sendingSamba.value = false
+ setTimeout(() => { sambaSendMsg.value = '' }, 4000)
+ }
+}
+
async function saveSettings() {
saving.value = true
savedMsg.value = ''