_id.vue 5.3 KB

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