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>