From 28b0e69da1f55949befedc458483a02bc19f5715 Mon Sep 17 00:00:00 2001 From: ALAMI Adnane Date: Wed, 23 Apr 2025 11:02:21 +0200 Subject: [PATCH] suppresion de local database --- front/MyINPulse-front/fake_data/db.json | 63 ---- front/MyINPulse-front/fake_data/open.sh | 2 - .../src/components/HeaderComponent.vue | 8 +- .../src/components/LoginComponent.vue | 3 +- .../src/components/canvas/CanvasItem.vue | 345 ++++++++++++++---- .../src/components/canvas/HeaderCanvas.vue | 10 +- .../src/components/canvas/LeanCanvas.vue | 47 ++- .../MyINPulse-front/src/views/CanvasView.vue | 14 +- 8 files changed, 339 insertions(+), 153 deletions(-) delete mode 100644 front/MyINPulse-front/fake_data/db.json delete mode 100755 front/MyINPulse-front/fake_data/open.sh diff --git a/front/MyINPulse-front/fake_data/db.json b/front/MyINPulse-front/fake_data/db.json deleted file mode 100644 index c04a261..0000000 --- a/front/MyINPulse-front/fake_data/db.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "entrepreneurs": [ - { "id": 1, "name": "Alice", "email": "alice@example.com" }, - { "id": 2, "name": "Bob", "email": "bob@example.com" }, - { "id": 3, "name": "Charlie", "email": "charlie@example.com" } - ], - "data": [ - { - "projectId": 1, - "title": 1, - "title_text": "1. Problème", - "description": "3 problèmes essentiels à résoudre pour le client" - }, - { - "projectId": 1, - "title": 2, - "title_text": "2. Segments", - "description": "Les segments de clientèle visés" - }, - { - "projectId": 1, - "title": 3, - "title_text": "3. Valeur", - "description": "La proposition de valeur" - }, - { - "projectId": 1, - "title": 4, - "title_text": "4. Solution", - "description": "Les solutions proposées" - }, - { - "projectId": 1, - "title": 5, - "title_text": "5. Avantage", - "description": "Les avantages concurrentiels" - }, - { - "projectId": 1, - "title": 6, - "title_text": "6. Canaux", - "description": "Les canaux de distribution" - }, - { - "projectId": 1, - "title": 7, - "title_text": "7. Indicateurs", - "description": "Les indicateurs clés de performance" - }, - { - "projectId": 1, - "title": 8, - "title_text": "8. Coûts", - "description": "Les coûts associés" - }, - { - "projectId": 1, - "title": 9, - "title_text": "9. Revenus", - "description": "Les sources de revenus" - } - ] -} diff --git a/front/MyINPulse-front/fake_data/open.sh b/front/MyINPulse-front/fake_data/open.sh deleted file mode 100755 index cd3b9b6..0000000 --- a/front/MyINPulse-front/fake_data/open.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/bash -json-server --watch db.json --port 5000 \ No newline at end of file diff --git a/front/MyINPulse-front/src/components/HeaderComponent.vue b/front/MyINPulse-front/src/components/HeaderComponent.vue index b285ca1..53da9d9 100644 --- a/front/MyINPulse-front/src/components/HeaderComponent.vue +++ b/front/MyINPulse-front/src/components/HeaderComponent.vue @@ -1,6 +1,12 @@ diff --git a/front/MyINPulse-front/src/components/LoginComponent.vue b/front/MyINPulse-front/src/components/LoginComponent.vue index 317e1e9..2fa8af9 100644 --- a/front/MyINPulse-front/src/components/LoginComponent.vue +++ b/front/MyINPulse-front/src/components/LoginComponent.vue @@ -4,7 +4,7 @@ import { useRouter } from "vue-router"; import { jwtDecode } from "jwt-decode"; // i hope this doesn't break the code later import { store } from "../main.ts"; import { callApi } from "@/services/api.ts"; - +import Header from "@/components/HeaderComponent.vue"; const router = useRouter(); type TokenPayload = { @@ -43,6 +43,7 @@ const callApiWithLoading = async (path: string) => { @@ -165,24 +170,72 @@ const mockFetch = async (projectId: number, title: number, date: string) => { `Mock fetch pour projectId: ${projectId}, title: ${title}, date: ${date}` ); + const leanCanvasData: Record = { + 1: [ + "Les clients ont du mal à trouver des produits écoresponsables abordables.", + "Le processus d'achat en ligne est trop complexe.", + "Manque de transparence sur l’origine des produits.", + "Peu d’alternatives locales et durables sur le marché." + ], + 2: [ + "Jeunes urbains engagés dans la cause écologique.", + "Familles à revenu moyen voulant consommer responsable.", + "Entreprises soucieuses de leur empreinte carbone." + ], + 3: [ + "Une plateforme centralisée avec des produits écologiques certifiés.", + "Un service client humain et réactif.", + "Livraison éco-responsable avec suivi." + ], + 4: [ + "Application intuitive avec suggestions personnalisées.", + "Emballages recyclables et réutilisables.", + ], + 5: [ + "Algorithme exclusif de recommandations durables.", + "Forte communauté engagée sur les réseaux.", + ], + 6: [ + "Canaux digitaux : réseaux sociaux, SEO.", + "Partenariats avec influenceurs écoresponsables.", + "Boutique physique en pop-up stores." + ], + 7: [ + "Taux de rétention client mensuel.", + "Taux de satisfaction utilisateur (NPS)." + ], + 8: [ + "Coût du développement logiciel initial.", + "Campagnes publicitaires et communication.", + "Frais logistiques (emballages, transport)." + ], + 9: [ + "Ventes directes sur la plateforme.", + "Abonnement mensuel premium pour livraison gratuite.", + "Revenus via partenariats de marque." + ] + }; + + // On extrait les descriptions pour la section demandée + const section = leanCanvasData[title] || ["Aucune donnée disponible."]; + + // On garde tous les éléments, dans l'ordre + const result = section.map((txt) => ({ txt })); + return new Promise<{ txt: string }[]>((resolve) => { - setTimeout(() => { - resolve([ - { txt: "Ceci est une description 1 pour tester le front." }, - { txt: "Deuxième description." }, - { txt: "Troisième description." }, - ]); - }, 500); // Simule un délai réseau de 500ms + setTimeout(() => resolve(result), 500); }); }; + + // Utilisation du mock dans handleClick pour tester sans serveur const handleClick = async () => { if (!expanded.value) { await fetchData(props.projectId, props.title, "NaN", IS_MOCK_MODE); } else if (!isEditing.value.includes(true)) { // Réinitialiser les descriptions si aucune édition n'est en cours - currentDescriptions.value = [props.description]; + //currentDescriptions.value = [props.description]; editedDescriptions.value = [props.description]; } @@ -256,6 +309,20 @@ const cancelEdit = (index: number) => { editedDescriptions.value[index] = currentDescriptions.value[index]; isEditing.value[index] = false; }; + +const randomStyle = () => { + const offsetX = Math.floor(Math.random() * 20) - 10; // entre -10 et +10px + const offsetY = Math.floor(Math.random() * 20) - 10; + return { + transform: `translate(${offsetX}px, ${offsetY}px)`, + transition: 'transform 0.3s ease', + }; +}; + +const styleClasses = ['float-up', 'float-left', 'float-right', 'wiggle', 'tilt']; +const getRandomClass = () => { + return styleClasses[Math.floor(Math.random() * styleClasses.length)]; +}; diff --git a/front/MyINPulse-front/src/components/canvas/HeaderCanvas.vue b/front/MyINPulse-front/src/components/canvas/HeaderCanvas.vue index 8c53221..afb0659 100644 --- a/front/MyINPulse-front/src/components/canvas/HeaderCanvas.vue +++ b/front/MyINPulse-front/src/components/canvas/HeaderCanvas.vue @@ -1,6 +1,14 @@