github.com/benoitkugler/goacve@v0.0.0-20201217100549-151ce6e55dc8/server/frontend/bv/src/shared/fields/OptionPrixCampField.vue (about) 1 <template> 2 <div class="mb-2"> 3 <div v-if="kind.statut"> 4 (Optionnel) Prix selon le statut : 5 <static-list :items="itemsStatut" :width="100"></static-list> 6 </div> 7 <div v-else-if="kind.semaine"> 8 (Optionnel) Prix à la semaine : 9 <static-list :items="itemsSemaine" :width="50"></static-list> 10 </div> 11 <div v-else-if="kind.quotient_familial"> 12 (Optionnel) Prix au quotient familial : 13 <static-list :items="itemsQuotientFamilial" :width="50"></static-list> 14 </div> 15 <div v-else-if="kind.jour"> 16 (Optionnel) Prix à la journée : 17 <static-list :items="itemsJour" :width="25"></static-list> 18 </div> 19 </div> 20 </template> 21 22 <script lang="ts"> 23 import Vue from "vue"; 24 import Component from "vue-class-component"; 25 26 import StaticList from "./StaticList.vue"; 27 import { QuotientFamilial } from "../logic/enums"; 28 import { PrixParStatut, OptionPrixCamp } from "@/shared/logic/types"; 29 30 const OptionPrixCampFieldProps = Vue.extend({ 31 props: { 32 option: Object as () => OptionPrixCamp 33 } 34 }); 35 36 type optionKind = "statut" | "semaine" | "quotient_familial" | "jour"; 37 type kindCrible = { [P in optionKind]: boolean }; 38 @Component({ 39 components: { StaticList } 40 }) 41 export default class OptionPrixCampField extends OptionPrixCampFieldProps { 42 get kind(): kindCrible { 43 const a = this.option.active as optionKind; 44 return { 45 statut: a == "statut", 46 semaine: a == "semaine", 47 quotient_familial: a == "quotient_familial", 48 jour: a == "jour" 49 }; 50 } 51 52 get itemsStatut() { 53 return (this.option.statut || []).map((item: PrixParStatut) => { 54 return `${item.statut} : <b>${item.prix ? item.prix + "€" : "gratuit"}</b> 55 <i> ${item.description ? "(" + item.description + ")" : ""} </i>`; 56 }); 57 } 58 59 get itemsSemaine() { 60 const s = this.option.semaine; 61 return [ 62 "Semaine 1 : <b>" + (s.prix_1 || "-") + "€</b>", 63 "Semaine 2 : <b>" + (s.prix_2 || "-") + "€</b>" 64 ]; 65 } 66 67 get itemsQuotientFamilial() { 68 const optionQF = this.option.quotient_familial || []; 69 return QuotientFamilial.map((v, i) => { 70 let interv = "Plus de " + (v + 1); 71 if (i + 1 < QuotientFamilial.length) { 72 interv = "Entre " + (v + 1) + " et " + QuotientFamilial[i + 1]; 73 } 74 return interv + " : <b>" + optionQF[i] + "€</b>"; 75 }); 76 } 77 78 get itemsJour() { 79 return (this.option.jour || []).map((p, i) => { 80 let s = i + 1 + " jour"; 81 if (i > 0) { 82 s += "s"; 83 } 84 s += " : <b>" + p + "€</b>"; 85 return s; 86 }); 87 } 88 } 89 </script> 90 91 <style scoped></style>