feat: masque la section IA derriere un interrupteur de fonctionnalite
La section IA n'est pas prete a etre utilisee. Plutot que de supprimer le code, deux interrupteurs alignes la retirent de l'application : - frontend/src/features.js : onglet de navigation, page /ia (redirigee vers l'accueil pour ne pas casser un signet) et section « Configuration LLM » de la page Config. La page n'est plus embarquee dans le bundle. - src/plesna_gerance/features.py : les routes /api/ia ne sont plus montees, les endpoints n'existent donc pas du tout. Les settings Ollama restent en base : repasser les deux interrupteurs a true suffit a tout reactiver, sans ressaisie. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -46,6 +46,7 @@
|
||||
import { ref } from 'vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
import { pendingFile } from './store'
|
||||
import { FEATURE_IA } from './features'
|
||||
|
||||
const router = useRouter()
|
||||
const fileInput = ref(null)
|
||||
@@ -55,7 +56,7 @@ const navLinks = [
|
||||
{ to: '/documents', label: 'Documents' },
|
||||
{ to: '/revenus', label: 'Revenus' },
|
||||
{ to: '/analytics', label: 'Depenses' },
|
||||
{ to: '/ia', label: 'IA' },
|
||||
...(FEATURE_IA ? [{ to: '/ia', label: 'IA' }] : []),
|
||||
{ to: '/config', label: 'Config' }
|
||||
]
|
||||
|
||||
|
||||
9
frontend/src/features.js
Normal file
9
frontend/src/features.js
Normal file
@@ -0,0 +1,9 @@
|
||||
// Interrupteurs de fonctionnalités du front.
|
||||
//
|
||||
// FEATURE_IA masque toute la section IA (onglet de navigation, page /ia,
|
||||
// section « Configuration LLM » de la page Config) en attendant qu'elle soit
|
||||
// prête. Le code reste en place : repasser à `true` la réactive partout.
|
||||
//
|
||||
// Le backend a son propre interrupteur dans src/plesna_gerance/features.py
|
||||
// (il monte ou non les routes /api/ia) : les deux doivent rester alignés.
|
||||
export const FEATURE_IA = false
|
||||
@@ -5,15 +5,15 @@
|
||||
<div class="page-header">
|
||||
<div>
|
||||
<h1 class="page-title">Configuration</h1>
|
||||
<p class="page-subtitle">Paramètres LLM et gestion des tags</p>
|
||||
<p class="page-subtitle">{{ FEATURE_IA ? 'Paramètres LLM et gestion des tags' : 'Gestion des tags' }}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Les deux sections cote a cote des que la largeur le permet -->
|
||||
<div class="grid grid-cols-1 xl:grid-cols-2 gap-6 items-start">
|
||||
<div class="grid grid-cols-1 gap-6 items-start" :class="{ 'xl:grid-cols-2': FEATURE_IA }">
|
||||
|
||||
<!-- Section LLM -->
|
||||
<div class="card">
|
||||
<div v-if="FEATURE_IA" class="card">
|
||||
<div class="card-header">
|
||||
<h2 class="card-title">Configuration LLM (Ollama)</h2>
|
||||
</div>
|
||||
@@ -130,6 +130,7 @@
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted, nextTick } from 'vue'
|
||||
import { FEATURE_IA } from '../features'
|
||||
|
||||
const API = import.meta.env.VITE_API_URL || ''
|
||||
|
||||
@@ -300,7 +301,8 @@ async function createTag() {
|
||||
// ============================================================
|
||||
|
||||
onMounted(() => {
|
||||
loadSettings()
|
||||
// Les settings ne servent qu'à la section LLM, masquée avec la section IA.
|
||||
if (FEATURE_IA) loadSettings()
|
||||
loadTags()
|
||||
})
|
||||
</script>
|
||||
|
||||
@@ -6,8 +6,22 @@ import RevenusPage from './pages/RevenusPage.vue'
|
||||
import DocumentsPage from './pages/DocumentsPage.vue'
|
||||
import EditDocumentPage from './pages/EditDocumentPage.vue'
|
||||
import ReExtractionPage from './pages/ReExtractionPage.vue'
|
||||
import IAPage from './pages/IAPage.vue'
|
||||
import ConfigPage from './pages/ConfigPage.vue'
|
||||
import { FEATURE_IA } from './features'
|
||||
|
||||
// Section IA masquée : /ia reste une route valide mais ramène à l'accueil, pour
|
||||
// qu'un signet ou une entrée d'historique n'aboutisse pas sur une page vide.
|
||||
// La page n'est chargée (et embarquée dans le bundle) que si la feature est active.
|
||||
const iaRoute = FEATURE_IA
|
||||
? {
|
||||
path: '/ia',
|
||||
name: 'ia',
|
||||
component: () => import('./pages/IAPage.vue')
|
||||
}
|
||||
: {
|
||||
path: '/ia',
|
||||
redirect: '/'
|
||||
}
|
||||
|
||||
const routes = [
|
||||
{
|
||||
@@ -30,11 +44,7 @@ const routes = [
|
||||
name: 'revenus',
|
||||
component: RevenusPage
|
||||
},
|
||||
{
|
||||
path: '/ia',
|
||||
name: 'ia',
|
||||
component: IAPage
|
||||
},
|
||||
iaRoute,
|
||||
{
|
||||
path: '/config',
|
||||
name: 'config',
|
||||
|
||||
Reference in New Issue
Block a user