residence_areas.vue 2.6 KB

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