_id.vue 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <!-- Page de détails d'une adresse postale -->
  2. <template>
  3. <main>
  4. <v-skeleton-loader
  5. v-if="loading"
  6. type="text"
  7. />
  8. <LayoutContainer v-else>
  9. <v-card class="margin-bottom-20">
  10. <v-toolbar flat class="ot_light_grey toolbarForm" dark dense rounded>
  11. <v-toolbar-title class="ot_dark_grey--text form_main_title">
  12. <v-icon class="ot_white--text ot_green icon">
  13. fa-globe-europe
  14. </v-icon>
  15. {{ $t('address_postal') }}
  16. </v-toolbar-title>
  17. </v-toolbar>
  18. <UiForm :id="id" :model="model" :query="query()">
  19. <template v-slot:form.input="{entry, updateRepository}">
  20. <v-skeleton-loader
  21. v-if="loading"
  22. type="text"
  23. />
  24. <v-container v-else fluid class="container">
  25. <v-row>
  26. <v-col cols="12" sm="12">
  27. <UiInputAutocomplete
  28. field="owner"
  29. label="addressOwner"
  30. item-value="@id"
  31. :item-text="['cp', 'city']"
  32. @update="updateAddressFromOwner"
  33. />
  34. </v-col>
  35. <v-col cols="12" sm="6">
  36. <UiInputEnum field="type" label="addresstype" :data="entry['type']" enum-type="address_postal_organization" @update="updateRepository" />
  37. </v-col>
  38. <v-col cols="12" sm="6">
  39. <UiInputText field="addressPostal.streetAddress" label="streetAddress" :data="entry['addressPostal.streetAddress']" @update="updateRepository" />
  40. </v-col>
  41. <v-col cols="12" sm="6">
  42. <UiInputText field="addressPostal.streetAddressSecond" label="streetAddressSecond" :data="entry['addressPostal.streetAddressSecond']" @update="updateRepository" />
  43. </v-col>
  44. <v-col cols="12" sm="6">
  45. <UiInputText field="addressPostal.streetAddressThird" label="streetAddressThird" :data="entry['addressPostal.streetAddressThird']" @update="updateRepository" />
  46. </v-col>
  47. <v-col cols="12" sm="6">
  48. <UiInputText field="addressPostal.postalCode" label="postalCode" :data="entry['addressPostal.postalCode']" @update="updateRepository" />
  49. </v-col>
  50. <v-col cols="12" sm="6">
  51. <UiInputText field="addressPostal.addressCity" label="addressCity" :data="entry['addressPostal.addressCity']" @update="updateRepository" />
  52. </v-col>
  53. </v-row>
  54. </v-container>
  55. <UiMap :zoom="12" :address="addressItem" @updateAddress="updateAddress" />
  56. </template>
  57. <template v-slot:form.button>
  58. <NuxtLink :to="{ path: '/organization', query: { accordion: 'address_postal' }}" class="no-decoration">
  59. <v-btn class="mr-4 ot_light_grey ot_grey--text">
  60. {{ $t('back') }}
  61. </v-btn>
  62. </NuxtLink>
  63. </template>
  64. </UiForm>
  65. </v-card>
  66. </LayoutContainer>
  67. </main>
  68. </template>
  69. <script lang="ts">
  70. import { defineComponent, useContext, useFetch, ref, computed, Ref, ComputedRef } from '@nuxtjs/composition-api'
  71. import { Repository as VuexRepository } from '@vuex-orm/core/dist/src/repository/Repository'
  72. import { Model, Query } from '@vuex-orm/core'
  73. import { OrganizationAddressPostal } from '~/models/Organization/OrganizationAddressPostal'
  74. import { QUERY_TYPE } from '~/types/enums'
  75. import { repositoryHelper } from '~/services/store/repository'
  76. import { queryHelper } from '~/services/store/query'
  77. import { AddressPostal } from '~/models/Core/AddressPostal'
  78. export default defineComponent({
  79. name: 'OrganizationAddress',
  80. setup () {
  81. const { route, $dataProvider } = useContext()
  82. const loading: Ref<boolean> = ref(true)
  83. const id: number = parseInt(route.value.params.id)
  84. const repository: VuexRepository<Model> = repositoryHelper.getRepository(OrganizationAddressPostal)
  85. const query: Query = repository.with('addressPostal', (query) => {
  86. query.with('addressCountry')
  87. })
  88. useFetch(async () => {
  89. await $dataProvider.invoke({
  90. type: QUERY_TYPE.MODEL,
  91. model: OrganizationAddressPostal,
  92. id
  93. })
  94. loading.value = false
  95. })
  96. const addressItem: ComputedRef<AddressPostal|null> = computed(() => {
  97. const organizationAddressPostal = queryHelper.getFirstItem(query) as OrganizationAddressPostal
  98. return organizationAddressPostal.addressPostal
  99. })
  100. const updateAddress = (address: AddressPostal) => {
  101. const organizationAddressPostal = queryHelper.getFirstItem(query) as OrganizationAddressPostal
  102. organizationAddressPostal.addressPostal = address
  103. repositoryHelper.persist(OrganizationAddressPostal, organizationAddressPostal)
  104. }
  105. /** Computed properties needs to be returned as functions until nuxt3 : https://github.com/nuxt-community/composition-api/issues/207 **/
  106. return {
  107. model: OrganizationAddressPostal,
  108. query: () => query,
  109. id,
  110. loading,
  111. panel: 0,
  112. addressItem,
  113. updateAddress,
  114. updateAddressFromOwner: (data: any) => {
  115. console.log(data)
  116. }
  117. }
  118. }
  119. })
  120. </script>
  121. <style>
  122. .toolbarForm .v-toolbar__content{
  123. padding-left: 0 !important;
  124. }
  125. .toolbarForm .v-toolbar__title .v-icon{
  126. height: 46px;
  127. width: 46px;
  128. }
  129. </style>