_id.vue 5.2 KB

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