index.vue 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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 v-if="residenceAreas!.items.length > 0">
  13. <tr
  14. v-for="residenceArea in residenceAreas!.items"
  15. :key="residenceArea.id"
  16. >
  17. <td class="cycle-editable-cell">
  18. {{ residenceArea.label }}
  19. </td>
  20. <td class="d-flex flex-row">
  21. <v-btn
  22. :flat="true"
  23. icon="fa fa-pen"
  24. class="cycle-edit-icon mr-3"
  25. @click="goToEditPage(residenceArea.id as number)"
  26. />
  27. <UiButtonDelete
  28. :model="ResidenceArea"
  29. :entity="residenceArea"
  30. :flat="true"
  31. class="cycle-edit-icon"
  32. />
  33. </td>
  34. </tr>
  35. </tbody>
  36. <tbody v-else>
  37. <tr class="theme-neutral">
  38. <td>
  39. <i>{{ $t('nothing_to_show') }}</i>
  40. </td>
  41. <td></td>
  42. </tr>
  43. </tbody>
  44. </v-table>
  45. <v-btn
  46. :flat="true"
  47. prepend-icon="fa fa-plus"
  48. class="theme-primary mt-4"
  49. @click="goToCreatePage"
  50. >
  51. {{ $t('add') }}
  52. </v-btn>
  53. </div>
  54. </LayoutContainer>
  55. </template>
  56. <script setup lang="ts">
  57. import { useEntityFetch } from '~/composables/data/useEntityFetch'
  58. import ResidenceArea from '~/models/Billing/ResidenceArea'
  59. import UrlUtils from '~/services/utils/urlUtils'
  60. definePageMeta({
  61. name: 'parameters_residence_areas_page',
  62. })
  63. const { fetchCollection } = useEntityFetch()
  64. const { data: residenceAreas, pending } = fetchCollection(ResidenceArea)
  65. const goToEditPage = (id: number) => {
  66. navigateTo(UrlUtils.join('/parameters/residence_areas', id))
  67. }
  68. const goToCreatePage = () => {
  69. navigateTo(`/parameters/residence_areas/new`)
  70. }
  71. </script>
  72. <style scoped lang="scss">
  73. .v-table {
  74. width: 100%;
  75. max-width: 800px;
  76. }
  77. // TODO: voir à factoriser ces styles, ptêt en faisant un component de ces boutons?
  78. :deep(.cycle-edit-icon .v-icon) {
  79. color: rgb(var(--v-theme-primary));
  80. font-size: 18px;
  81. }
  82. </style>