Website.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <template>
  2. <LayoutContainer>
  3. <UiLoadingPanel v-if="pending" />
  4. <UiForm
  5. v-else
  6. :model="Parameters"
  7. :entity="parameters"
  8. >
  9. <v-row>
  10. <v-col cols="6">
  11. <div class="mb-6">
  12. <div>{{ $t('your_opentalent_website_address_is')}} : </div>
  13. <div class="ma-2 text-primary"><strong>{{ organizationProfile.website }}</strong></div>
  14. </div>
  15. <div class="mb-6">
  16. <div>{{ $t('subdomains_history') }} : </div>
  17. <UiLoadingPanel v-if="subdomainsPending" />
  18. <v-table v-else class="my-2">
  19. <tbody>
  20. <tr
  21. v-for="subdomain in subdomains.items"
  22. :key="subdomain.id"
  23. :title="subdomain.subdomain"
  24. class="subdomainItem"
  25. @click="goToEditPage(subdomain.id)"
  26. >
  27. <td>{{ subdomain.subdomain }}</td>
  28. <td>
  29. <span v-if="subdomain.active">
  30. <v-icon class="text-success icon">
  31. fa-solid fa-check
  32. </v-icon> {{ $t('active') }}
  33. </span>
  34. </td>
  35. </tr>
  36. </tbody>
  37. </v-table>
  38. </div>
  39. <v-btn
  40. :disabled="!canAddNewSubdomain"
  41. class="my-2"
  42. @click="onAddSubdomainClick"
  43. >
  44. {{ $t('record_a_new_subdomain')}}
  45. </v-btn>
  46. </v-col>
  47. <v-col cols="6">
  48. <!-- les publicationDirectors sont des entités Access -->
  49. <UiInputAutocomplete
  50. field="publicationDirectors"
  51. itemTitle="person.name"
  52. />
  53. <UiInputCheckbox
  54. v-model="parameters.desactivateOpentalentSiteWeb"
  55. field="desactivateOpentalentSiteWeb"
  56. />
  57. <UiInputText
  58. v-model="parameters.otherWebsite"
  59. field="otherWebsite"
  60. />
  61. </v-col>
  62. </v-row>
  63. </UiForm>
  64. </LayoutContainer>
  65. </template>
  66. <script setup lang="ts">
  67. import {useOrganizationProfileStore} from "~/stores/organizationProfile";
  68. import Parameters from "~/models/Organization/Parameters";
  69. import {useEntityFetch} from "~/composables/data/useEntityFetch";
  70. import {AsyncData} from "#app";
  71. import Subdomain from "~/models/Organization/Subdomain";
  72. import ApiResource from "~/models/ApiResource";
  73. const router = useRouter()
  74. const { fetch, fetchCollection } = useEntityFetch()
  75. const organizationProfile = useOrganizationProfileStore()
  76. if (organizationProfile.parametersId === null) {
  77. throw new Error('Missing organization parameters id')
  78. }
  79. const { data: parameters, pending } = fetch(Parameters, organizationProfile.parametersId) as AsyncData<Parameters, Parameters | true>
  80. const { data: subdomains, pending: subdomainsPending } = fetchCollection(Subdomain, null, ref({ 'organization' : organizationProfile.id }) )
  81. const canAddNewSubdomain: ComputedRef<boolean> = computed(() => subdomains.value.items.length < 3)
  82. const goToEditPage = (id: number) => {
  83. router.push(`parameters/subdomains/${id}`)
  84. }
  85. const onAddSubdomainClick = () => {
  86. if (!canAddNewSubdomain) {
  87. throw new Error('Max number of subdomains reached')
  88. }
  89. }
  90. </script>
  91. <style scoped lang="scss">
  92. .v-table {
  93. background: transparent;
  94. }
  95. .subdomainItem {
  96. cursor: pointer;
  97. }
  98. .subdomainItem:hover {
  99. background: rgb(var(--v-theme-neutral));
  100. }
  101. .subdomainItem .icon {
  102. font-size: 12px;
  103. }
  104. </style>