index.vue 2.5 KB

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