_id.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  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, Ref, ComputedRef} 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. import {Repository as VuexRepository} from "@vuex-orm/core/dist/src/repository/Repository";
  74. import {Model, Query} from "@vuex-orm/core";
  75. export default defineComponent({
  76. name: 'organization_address',
  77. setup() {
  78. const {route, $dataProvider} = useContext()
  79. const loading:Ref<boolean> = ref(true)
  80. const id:number = parseInt(route.value.params.id)
  81. const repository: VuexRepository<Model> = repositoryHelper.getRepository(OrganizationAddressPostal)
  82. const query:Query = repository.with('addressPostal', (query) => {
  83. query.with('addressCountry')
  84. })
  85. useFetch(async () => {
  86. await $dataProvider.invoke({
  87. type: QUERY_TYPE.MODEL,
  88. model: OrganizationAddressPostal,
  89. id: id
  90. })
  91. loading.value = false
  92. })
  93. const addressItem:ComputedRef<AddressPostal|null> = computed(() => {
  94. const organizationAddressPostal = queryHelper.getFirstItem(query) as OrganizationAddressPostal
  95. return organizationAddressPostal.addressPostal
  96. })
  97. const updateAddress = (address: AddressPostal) => {
  98. const organizationAddressPostal = queryHelper.getFirstItem(query) as OrganizationAddressPostal
  99. organizationAddressPostal.addressPostal = address
  100. repositoryHelper.persist(OrganizationAddressPostal, organizationAddressPostal)
  101. }
  102. /** Computed proprieties needs to be return as function until nuxt3 : https://github.com/nuxt-community/composition-api/issues/207 **/
  103. return {
  104. model: OrganizationAddressPostal,
  105. query: () => query,
  106. id,
  107. loading,
  108. panel: 0,
  109. addressItem,
  110. updateAddress,
  111. updateAddressFromOwner: (data:any) => {
  112. console.log(data)
  113. }
  114. }
  115. },
  116. })
  117. </script>
  118. <style>
  119. .toolbarForm .v-toolbar__content{
  120. padding-left: 0px !important;
  121. }
  122. .toolbarForm .v-toolbar__title .v-icon{
  123. height: 46px;
  124. width: 46px;
  125. }
  126. </style>