front_foundation #5

Open
mohamed_maoulainine wants to merge 73 commits from front_foundation into main
17 changed files with 194 additions and 312 deletions
Showing only changes of commit 6a3d4239ab - Show all commits

View File

@ -3,7 +3,7 @@ import { RouterLink, RouterView } from 'vue-router'
import HelloWorld from './components/HelloWorld.vue' import HelloWorld from './components/HelloWorld.vue'
import Header from './components/Header.vue'; import Header from './components/Header.vue';
import ProjectComp from './components/Project-comp.vue'; import ProjectComp from './components/Project-comp.vue';
import CanvasView from './components/canvas/Lean-canvas.vue'; import CanvasView from './components/canvas/LeanCanvas.vue';
import ErrorWrapper from "@/views/errorWrapper.vue"; import ErrorWrapper from "@/views/errorWrapper.vue";
</script> </script>
Outdated
Review

Il faut laisser ça, cela permet d'afficher les messages d'erreurs par desssus le contenu.

Il faut laisser ça, cela permet d'afficher les messages d'erreurs par desssus le contenu.

View File

@ -1,21 +0,0 @@
<template>
<div class="cell produit" @click="toggleExpand">
<h3>9. Avantage déloyal</h3>
<p>Ce qui ne peut pas être facilement copié ou acheté</p>
</div>
</template>
<script>
export default {
methods: {
toggleExpand(event) {
event.currentTarget.classList.toggle("expanded");
}
}
};
</script>
<style scoped>
@import "@/components/canvas/style-project.css";
</style>

View File

@ -1,21 +0,0 @@
<template>
<div class="cell produit" @click="toggleExpand">
<h3>5. Canaux</h3>
<p>Chemins d'accès aux clients</p>
</div>
</template>
<script>
export default {
methods: {
toggleExpand(event) {
event.currentTarget.classList.toggle("expanded");
}
}
};
</script>
<style scoped>
@import "@/components/canvas/style-project.css";
</style>

View File

@ -0,0 +1,56 @@
<template>
Review

Il serait mieux d'afficher le contenu du lean canvas sans devoir clicker dessus, un peu comme sur ce lien.
De plus, ce n'est pas important d'afficher en gros le titre de la section, il devrait être plus discret.
https://cms.boardmix.com/images/articles/lean-canvas.png
En plus il y a des jolies couleur c'est sympa.

Il serait mieux d'afficher le contenu du lean canvas sans devoir clicker dessus, un peu comme sur ce lien. De plus, ce n'est pas important d'afficher en gros le titre de la section, il devrait être plus discret. https://cms.boardmix.com/images/articles/lean-canvas.png En plus il y a des jolies couleur c'est sympa.
<div :class="['cell', { expanded }]" @click="toggleExpand">
<h3>{{ title }}</h3>
<p>{{ description }}</p>
</div>
</template>
<script>
export default {
props: {
title: String,
description: String
mohamed_maoulainine marked this conversation as resolved Outdated
Outdated
Review

ce n'est pas de la composition API

ce n'est pas de la composition API
},
data() {
return {
expanded: false
mohamed_maoulainine marked this conversation as resolved Outdated
Outdated
Review

composition API

composition API
};
},
methods: {
toggleExpand() {
this.expanded = !this.expanded;
}
}
};
</script>
<style scoped>
@import "@/components/canvas/style-project.css";
.cell {
display: flex;
flex-direction: column; /* Pour empiler le titre et la description */
align-items: center; /* Centre horizontalement */
justify-content: center; /* Centre verticalement */
text-align: center; /* Centre le texte */
transition: all 0.3s ease;
cursor: pointer;
}
.expanded {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: white;
z-index: 10;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
}
</style>

View File

@ -1,21 +0,0 @@
<template>
<div class="cell produit" @click="toggleExpand">
<h3>7. Structure des coûts</h3>
<p>Coûts d'acquisition, distribution, hébergement, employés...</p>
</div>
</template>
<script>
export default {
methods: {
toggleExpand(event) {
event.currentTarget.classList.toggle("expanded");
}
}
};
</script>
<style scoped>
@import "@/components/canvas/style-project.css";
</style>

View File

@ -1,37 +0,0 @@
<template>
<header>
<img src="@/assets/logo-inpulse.png" alt="INPulse Logo">
<div class="header-buttons">
<div class="contact-menu">
<button class="contact-button" @click="toggleDropdown">Contact</button>
<div class="contact-dropdown" v-show="isDropdownOpen">
<button>Contact All</button>
<button>Contact Person 1</button>
<button>Contact Person 2</button>
<button>Contact Person 3</button>
</div>
<div class="return"><a href="/">return to list project</a></div>
</div>
</div>
</header>
</template>
<script>
export default {
data() {
return {
isDropdownOpen: false
};
},
methods: {
toggleDropdown() {
this.isDropdownOpen = !this.isDropdownOpen;
}
}
};
</script>
<style scoped>
@import "@/components/canvas/style-project.css";
</style>

View File

@ -0,0 +1,36 @@
<template>
<header>
<img src="../icons/logo inpulse.png" alt="INPulse Logo">
<div class="header-buttons">
<div class="contact-menu">
<button class="contact-button" @click="toggleDropdown">Contact</button>
<div class="contact-dropdown" v-show="isDropdownOpen">
<button>Contact All</button>
<button>Contact Person 1</button>
<button>Contact Person 2</button>
<button>Contact Person 3</button>
</div>
<div class="return"><a href="/">return to list project</a></div>
mohamed_maoulainine marked this conversation as resolved Outdated
Outdated
Review

plutôt utiliser des routerLink au lieu de href
https://stackoverflow.com/questions/52675885/when-to-use-router-link-vs-a

plutôt utiliser des routerLink au lieu de href https://stackoverflow.com/questions/52675885/when-to-use-router-link-vs-a
</div>
</div>
</header>
</template>
<script>
export default {
mohamed_maoulainine marked this conversation as resolved Outdated
Outdated
Review

Ce n'est pas de la composition API, a changer

Ce n'est pas de la composition API, a changer

où exactement?

où exactement?
data() {
Outdated
Review

Il faut se servir de axiosInstance, voir https://gitea.piair.dev/piair/MyINPulse/src/branch/main/front/MyINPulse-front/src/services/api.ts.
Cela permet de préconfigurer l'authentification et le host du backend.

Il faut se servir de `axiosInstance`, voir https://gitea.piair.dev/piair/MyINPulse/src/branch/main/front/MyINPulse-front/src/services/api.ts. Cela permet de préconfigurer l'authentification et le host du backend.
return {
isDropdownOpen: false
};
},
methods: {
toggleDropdown() {
mohamed_maoulainine marked this conversation as resolved Outdated
Outdated
Review

Vérifier que le type de données renvoyé par le backend correspond bien à ca (ce n'est pas le cas).

Vérifier que le type de données renvoyé par le backend correspond bien à ca (ce n'est pas le cas).
this.isDropdownOpen = !this.isDropdownOpen;
}
}
};
</script>
<style scoped>
@import "@/components/canvas/style-project.css";
</style>

View File

@ -1,21 +0,0 @@
<template>
<div class="cell produit" @click="toggleExpand">
<h3>8. Indicateurs clés</h3>
<p>Activités clés que vous souhaitez évaluer</p>
</div>
</template>
<script>
export default {
methods: {
toggleExpand(event) {
event.currentTarget.classList.toggle("expanded");
}
}
};
</script>
<style scoped>
@import "@/components/canvas/style-project.css";
</style>

View File

@ -1,71 +0,0 @@
<template>
<div class="canvas">
<Probleme class="Probleme" />
<Segments class="Segments" />
<Valeur class="Valeur" />
<Solution class="Solution" />
<Avantage class="Avantage" />
<Canaux class="Canaux" />
<Indicateurs class="Indicateurs" />
<Couts class="Couts" />
<Revenus class="Revenus" />
</div>
</template>
<script>
import Probleme from "./Probleme.vue";
import Segments from "./Segments.vue";
import Solution from "./Solution.vue";
import Valeur from "./Valeur.vue";
import Canaux from "./Canaux.vue";
import Revenus from "./Revenus.vue";
import Couts from "./Couts.vue";
import Indicateurs from "./Indicateurs.vue";
import Avantage from "./Avantage.vue";
export default {
components: {
Probleme,
Segments,
Solution,
Valeur,
Canaux,
Revenus,
Couts,
Indicateurs,
Avantage
}
};
</script>
<style scoped>
.canvas {
display: grid;
grid-template-columns: repeat(10, 1fr);
grid-template-rows: repeat(6, 1fr);
gap: 10px;
padding: 10px;
}
.Probleme { grid-column: 1 / 3; grid-row: 1 / 5; }
.Segments { grid-column: 9 / 11; grid-row: 1 / 5; }
.Valeur { grid-column: 5 / 7; grid-row: 1 / 5; }
.Solution { grid-column: 3 / 5; grid-row: 1 / 3; }
.Avantage { grid-column: 7 / 9; grid-row: 1 / 3; }
.Canaux { grid-column: 7 / 9; grid-row: 3 / 5; }
.Indicateurs { grid-column: 3 / 5; grid-row: 3 / 5; }
.Couts { grid-column: 1 / 6; grid-row: 5 / 7; }
.Revenus { grid-column: 6 / 11; grid-row: 5 / 7; }
.expanded {
position: absolute;
top: 0;
left: 0;
width: 100%; /* Remplit toute la zone sans dépassement */
height: 100%;
transition: all 0.3s ease;
z-index: 10;
background: white; /* S'assurer que le contenu s'affiche correctement */
box-shadow: 0 0 10px rgba(0, 0, 0, 0.2); /* Optionnel : un petit effet visuel */
}
</style>

View File

@ -0,0 +1,92 @@
<template>
<div class="LeanCanvas">
<CanvasItem
v-for="(item, index) in items"
:key="index"
:title="item.title"
:description="item.description"
:class="item.class"
/>
</div>
</template>
<script>
mohamed_maoulainine marked this conversation as resolved Outdated
Outdated
Review

Ce n'est pas de la composition API

Ce n'est pas de la composition API
import CanvasItem from "./CanvasItem.vue";
export default {
components: {
CanvasItem
},
data() {
return {
items: [
{ title: "1. Problème",
description: "3 problèmes essentiels à résoudre pour le client",
class: "Probleme"
},
{ title: "2. Segments",
description: "Les segments de clientèle visés",
class: "Segments"
},
{ title: "3. Valeur",
description: "La proposition de valeur",
class: "Valeur"
},
{ title: "4. Solution",
description: "Les solutions proposées",
class: "Solution"
},
{ title: "5. Avantage",
description: "Les avantages concurrentiels",
class: "Avantage"
},
{ title: "6. Canaux",
description: "Les canaux de distribution",
class: "Canaux"
},
{ title: "7. Indicateurs",
description: "Les indicateurs clés de performance",
class: "Indicateurs"
},
{ title: "8. Coûts",
description: "Les coûts associés",
class: "Couts"
},
{ title: "9. Revenus",
description: "Les sources de revenus",
class: "Revenus"
}
]
};
}
};
</script>
<style scoped>
.LeanCanvas {
display: grid;
grid-template-columns: repeat(10, 1fr);
grid-template-rows: repeat(6, 1fr);
gap: 10px;
padding: 10px;
max-width: 1200px;
margin: 20px auto;
border: 2px dashed #d33;
background-color: #fff;
position: relative;
height: 80vh;
overflow: auto;
}
.Probleme { grid-column: 1 / 3; grid-row: 1 / 5; }
.Segments { grid-column: 9 / 11; grid-row: 1 / 5; }
.Valeur { grid-column: 5 / 7; grid-row: 1 / 5; }
.Solution { grid-column: 3 / 5; grid-row: 1 / 3; }
.Avantage { grid-column: 7 / 9; grid-row: 1 / 3; }
.Canaux { grid-column: 7 / 9; grid-row: 3 / 5; }
.Indicateurs { grid-column: 3 / 5; grid-row: 3 / 5; }
.Couts { grid-column: 1 / 6; grid-row: 5 / 7; }
.Revenus { grid-column: 6 / 11; grid-row: 5 / 7; }
</style>

View File

@ -1,21 +0,0 @@
<template>
<div class="cell produit" @click="toggleExpand">
<h3>1. Problème</h3>
<p>3 problèmes essentiels à résoudre pour le client</p>
</div>
</template>
<script>
export default {
methods: {
toggleExpand(event) {
event.currentTarget.classList.toggle("expanded");
}
}
};
</script>
<style scoped>
@import "@/components/canvas/style-project.css";
</style>

View File

@ -1,21 +0,0 @@
<template>
<div class="cell produit" @click="toggleExpand">
<h3>6. Sources de revenus</h3>
<p>Modèle de revenus, durée, revenus espérés, marge espérée</p>
</div>
</template>
<script>
export default {
methods: {
toggleExpand(event) {
event.currentTarget.classList.toggle("expanded");
}
}
};
</script>
<style scoped>
@import "@/components/canvas/style-project.css";
</style>

View File

@ -1,21 +0,0 @@
<template>
<div class="cell produit" @click="toggleExpand">
<h3>2. Segments de clients</h3>
<p>Clients cibles</p>
</div>
</template>
<script>
export default {
methods: {
toggleExpand(event) {
event.currentTarget.classList.toggle("expanded");
}
}
};
</script>
<style scoped>
@import "@/components/canvas/style-project.css";
</style>

View File

@ -1,21 +0,0 @@
<template>
<div class="cell produit" @click="toggleExpand">
<h3>4. Solution</h3>
<p>3 fonctionnalités essentielles pour le client</p>
</div>
</template>
<script>
export default {
methods: {
toggleExpand(event) {
event.currentTarget.classList.toggle("expanded");
}
}
};
</script>
<style scoped>
@import "@/components/canvas/style-project.css";
</style>

View File

@ -1,21 +0,0 @@
<template>
<div class="cell produit" @click="toggleExpand">
<h3>3. Proposition de valeur unique</h3>
<p>Message simple, clair et persuasif expliquant en quoi votre produit est différent et mérite d'être acheté</p>
</div>
</template>
<script>
export default {
methods: {
toggleExpand(event) {
event.currentTarget.classList.toggle("expanded");
}
}
};
</script>
<style scoped>
@import "@/components/canvas/style-project.css";
</style>

View File

@ -58,14 +58,8 @@ body {
h1 img { h1 img {
height: 80px; height: 80px;
} margin: 40px;
text-align: center;
.canvas {
max-width: 1200px;
margin: 20px auto;
padding: 20px;
border: 2px dashed #d33;
background-color: #fff;
} }
.row { .row {
@ -117,11 +111,6 @@ body {
position: relative; position: relative;
Review

Si cela ne concerne que le dropdown d'un contact, cela devrait être dans le style de la view contact

Si cela ne concerne que le dropdown d'un contact, cela devrait être dans le style de la view contact
} }
.expanded {
transform: scale(1.2); /* L'élément reste agrandi */
transition: transform 0.3s ease; /* Animation fluide */
}
.contact-button, .return { .contact-button, .return {
padding: 10px 15px; padding: 10px 15px;
border: none; border: none;

View File

@ -1,5 +1,10 @@
<!-- src/views/CanvasView.vue --> <!-- src/views/CanvasView.vue -->
<template> <template>
<div>
<header>
<HeaderCanvas />
</header>
</div>
<div> <div>
<h1>Page Canvas</h1> <h1>Page Canvas</h1>
<LeanCanvas /> <LeanCanvas />
@ -7,6 +12,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import LeanCanvas from '@/components/canvas/Lean-canvas.vue'; import HeaderCanvas from '../components/canvas/HeaderCanvas.vue';
import LeanCanvas from '../components/canvas/LeanCanvas.vue';
</script> </script>