EducationTiming.vue 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <!-- Component d'un formulaire d'une durée pour un curriculum -->
  2. <template>
  3. <main>
  4. <LayoutContainer>
  5. <v-card class="mb-5 mt-4">
  6. <FormToolbar title="educationTiming" icon="fa-calendar"/>
  7. <UiForm
  8. :id="id"
  9. :model="model"
  10. :query="query()"
  11. :submitActions="submitActions">
  12. <template #form.input="{entry, updateRepository}">
  13. <v-container fluid class="container">
  14. <v-row>
  15. <v-col cols="12" sm="6">
  16. <UiInputText
  17. field="timing"
  18. label="timing"
  19. :data="entry['timing']"
  20. @update="updateRepository"
  21. type="number"
  22. :rules="rules().timingRules"
  23. />
  24. </v-col>
  25. </v-row>
  26. </v-container>
  27. </template>
  28. <template #form.button>
  29. <NuxtLink :to="{ path: '/parameters/education'}" class="no-decoration">
  30. <v-btn class="mr-4 ot_light_grey ot_grey--text">
  31. {{ $t('back') }}
  32. </v-btn>
  33. </NuxtLink>
  34. </template>
  35. </UiForm>
  36. </v-card>
  37. </LayoutContainer>
  38. </main>
  39. </template>
  40. <script lang="ts">
  41. import {defineComponent, computed, useContext} from '@nuxtjs/composition-api'
  42. import { Repository as VuexRepository } from '@vuex-orm/core/dist/src/repository/Repository'
  43. import { Query, Model } from '@vuex-orm/core'
  44. import { SUBMIT_TYPE} from '~/types/enums'
  45. import { repositoryHelper } from '~/services/store/repository'
  46. import {AnyJson} from "~/types/interfaces";
  47. import {EducationTiming} from "~/models/Education/EducationTiming";
  48. export default defineComponent({
  49. props: {
  50. id:{
  51. type: [Number, String],
  52. required: true
  53. }
  54. },
  55. setup () {
  56. const {app:{i18n}} = useContext()
  57. const repository: VuexRepository<Model> = repositoryHelper.getRepository(EducationTiming)
  58. const query: Query = repository.query()
  59. const submitActions = computed(() => {
  60. let actions:AnyJson = {}
  61. actions[SUBMIT_TYPE.SAVE_AND_BACK] = { path: `/parameters/education` }
  62. actions[SUBMIT_TYPE.SAVE] = { path: `/parameters/education/education_timing/` }
  63. return actions
  64. })
  65. /** Computed properties needs to be returned as functions until nuxt3 : https://github.com/nuxt-community/composition-api/issues/207 **/
  66. return {
  67. model: EducationTiming,
  68. query: () => query,
  69. rules: () => getRules(i18n),
  70. panel: 0,
  71. submitActions
  72. }
  73. },
  74. beforeDestroy() {
  75. repositoryHelper.cleanRepository(EducationTiming)
  76. }
  77. })
  78. function getRules (i18n: any) {
  79. return {
  80. timingRules: [
  81. (timingValue: number) => (timingValue > 0) || i18n.t('value_need_to_be_bigger_than_0')
  82. ]
  83. }
  84. }
  85. </script>