ResidenceAreas.vue 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <template>
  2. <LayoutContainer>
  3. <UiLoadingPanel v-if="pending" />
  4. <v-container v-else style="width: 500px;">
  5. <v-col cols="12">
  6. <v-row class="justify-center">
  7. <v-table class="w-100">
  8. <thead>
  9. <tr>
  10. <td>{{ $t('residenceAreas') }}</td>
  11. <td></td>
  12. </tr>
  13. </thead>
  14. <tbody>
  15. <tr v-if="residenceAreas.length > 0" v-for="residenceArea in residenceAreas" :key="residenceArea.id">
  16. <td class="cycle-editable-cell">
  17. {{ residenceArea.label }}
  18. </td>
  19. <td class="d-flex flex-row">
  20. <v-btn
  21. :flat="true"
  22. icon="fa fa-pen"
  23. class="cycle-edit-icon mr-3"
  24. @click="goToEditPage(residenceArea.id as number)"
  25. />
  26. <UiButtonDelete
  27. :model="ResidenceArea"
  28. :entity="residenceArea"
  29. :flat="true"
  30. class="cycle-edit-icon"
  31. />
  32. </td>
  33. </tr>
  34. <tr v-else class="theme-neutral">
  35. <td><i>{{ $t('nothing_to_show')}}</i></td>
  36. <td></td>
  37. </tr>
  38. </tbody>
  39. </v-table>
  40. </v-row>
  41. <v-row class="justify-end">
  42. <v-btn
  43. :flat="true"
  44. prepend-icon="fa fa-plus"
  45. class="theme-primary mt-2"
  46. @click="goToCreatePage"
  47. >
  48. {{ $t('add') }}
  49. </v-btn>
  50. </v-row>
  51. </v-col>
  52. </v-container>
  53. </LayoutContainer>
  54. </template>
  55. <script setup lang="ts">
  56. import { useEntityFetch } from '~/composables/data/useEntityFetch'
  57. import ResidenceArea from '~/models/Billing/ResidenceArea'
  58. import { useRepo } from 'pinia-orm'
  59. import ResidenceAreasRepository from '~/stores/repositories/ResidenceAreasRepository'
  60. import { useRouter } from 'vue-router'
  61. import UrlUtils from "~/services/utils/urlUtils";
  62. import EducationTiming from "~/models/Education/EducationTiming";
  63. const residenceAreasRepo = useRepo(ResidenceAreasRepository)
  64. const router = useRouter()
  65. const { fetchCollection } = useEntityFetch()
  66. const i18n = useI18n()
  67. const { pending } = fetchCollection(ResidenceArea)
  68. /**
  69. * On récupère les Residence Area via le store
  70. * (sans ça, les mises à jour SSE ne seront pas prises en compte)
  71. */
  72. const residenceAreas: ComputedRef<Array<ResidenceArea>> = computed(() => {
  73. return residenceAreasRepo.getResidenceAreas()
  74. })
  75. const goToEditPage = (id: number) => {
  76. navigateTo(UrlUtils.join('/parameters/residence_areas', id))
  77. }
  78. const goToCreatePage = () => {
  79. navigateTo(`/parameters/residence_areas/new`)
  80. }
  81. </script>
  82. <style scoped lang="scss">
  83. // TODO: voir à factoriser ces styles, ptêt en faisant un component de ces boutons?
  84. :deep(.cycle-edit-icon .v-icon) {
  85. color: rgb(var(--v-theme-primary));
  86. font-size: 18px;
  87. }
  88. </style>