Event.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. <template>
  2. <LayoutCommonSection>
  3. <v-row>
  4. <v-col cols="12" sm="12">
  5. <h4 class="mb-8">{{ $t('general_informations') }}</h4>
  6. <UiInputText
  7. v-model="entity.name"
  8. field="name"
  9. :rules="getAsserts('name')"
  10. />
  11. <span class="label">{{$t('datetimeStart')}}</span>
  12. <UiInputDateTimePicker
  13. v-model="entity.datetimeStart"
  14. field="datetimeStart"
  15. label="datetimeStart"
  16. :withTimePicker="true"
  17. class="my-2"
  18. :rules="getAsserts('datetimeStart')"
  19. validate-on-blur
  20. @update:model-value="onUpdateDateTimeStart(entity, $event)"
  21. />
  22. <span class="label">{{$t('datetimeEnd')}}</span>
  23. <UiInputDateTimePicker
  24. v-model="entity.datetimeEnd"
  25. field="datetimeEnd"
  26. label="datetimeEnd"
  27. :withTimePicker="true"
  28. class="my-2"
  29. :rules="getAsserts('datetimeEnd')"
  30. @update:model-value="onUpdateDateTimeEnd(entity, $event)"
  31. />
  32. <span class="label">{{$t('description')}}</span>
  33. <UiInputTextArea
  34. class="mt-3"
  35. v-model="entity.description"
  36. />
  37. <UiInputTreeSelectEventCategories
  38. v-model="entity.categories"
  39. label="event_categories_choices"
  40. />
  41. <UiInputImage
  42. v-model="entity.image"
  43. field="image"
  44. :width="240"
  45. :cropping-enabled="true"
  46. />
  47. </v-col>
  48. </v-row>
  49. </LayoutCommonSection>
  50. <LayoutCommonSection>
  51. <v-row>
  52. <v-col cols="12">
  53. <h4 class="mb-8">{{ $t('place_event') }}</h4>
  54. <UiInputAutocompleteApiResources
  55. v-model="entity.place"
  56. field="place"
  57. :model="PlaceSearchItem"
  58. listValue="id"
  59. listLabel="name"
  60. v-if="!newPlace"
  61. />
  62. <div class="d-flex justify-center"
  63. v-if="!newPlace"
  64. >
  65. <v-btn
  66. prepend-icon="fa-solid fa-plus"
  67. class="my-5"
  68. @click="onAddPlaceClick(entity)"
  69. >
  70. {{ $t('add_place') }}
  71. </v-btn>
  72. </div>
  73. <UiInputText v-if="newPlace" v-model="entity.placeName" field="placeName" />
  74. <UiInputText v-if="newPlace" v-model="entity.streetAddress" field="streetAddress" />
  75. <UiInputText v-if="newPlace" v-model="entity.streetAddressSecond" field="streetAddressSecond" />
  76. <UiInputText v-if="newPlace" v-model="entity.streetAddressThird" field="streetAddressThird" />
  77. <UiInputText v-if="newPlace" v-model="entity.postalCode" field="postalCode" />
  78. <UiInputText v-if="newPlace" v-model="entity.addressCity" field="addressCity" />
  79. <UiInputAutocompleteApiResources
  80. v-if="newPlace"
  81. v-model="entity.addressCountry"
  82. field="addressCountry"
  83. :model="Country"
  84. listValue="id"
  85. listLabel="name"
  86. />
  87. <client-only>
  88. <UiMapLeaflet
  89. v-if="newPlace"
  90. v-model:latitude="entity.latitude"
  91. v-model:longitude="entity.longitude"
  92. :streetAddress="entity.streetAddress"
  93. :streetAddressSecond="entity.streetAddressSecond"
  94. :streetAddressThird="entity.streetAddressThird"
  95. :postalCode="entity.postalCode"
  96. :addressCity="entity.addressCity"
  97. :addressCountryId="entity.addressCountry"
  98. :searchButton="true"
  99. ></UiMapLeaflet>
  100. </client-only>
  101. </v-col>
  102. </v-row>
  103. </LayoutCommonSection>
  104. <LayoutCommonSection>
  105. <v-row>
  106. <v-col cols="12">
  107. <h4 class="mb-8">{{ $t('communication_params') }}</h4>
  108. <UiInputText v-model="entity.url" field="url" />
  109. <UiInputAutocompleteEnum
  110. v-model="entity.pricing"
  111. enum-name="pricing_event"
  112. field="pricing"
  113. />
  114. <UiInputText v-if="entity.pricing==='PAID'" v-model="entity.urlTicket" field="urlTicket" />
  115. <UiInputNumber v-if="entity.pricing==='PAID'" v-model="entity.priceMini" field="priceMini" />
  116. <UiInputNumber v-if="entity.pricing==='PAID'" v-model="entity.priceMaxi" field="priceMaxi" />
  117. </v-col>
  118. </v-row>
  119. </LayoutCommonSection>
  120. </template>
  121. <script setup lang="ts">
  122. import Event from "~/models/Freemium/Event";
  123. import {getAssertUtils} from "~/services/asserts/getAssertUtils";
  124. import DateUtils from "~/services/utils/dateUtils";
  125. import Country from "~/models/Core/Country";
  126. import PlaceSearchItem from "~/models/Custom/Search/PlaceSearchItem";
  127. const props = defineProps<{
  128. entity: Event
  129. }>()
  130. const getAsserts = (key) => getAssertUtils(Event.getAsserts(), key)
  131. const onUpdateDateTimeStart = (entity, dateTime) =>{
  132. if(DateUtils.isBefore(props.entity.datetimeEnd, dateTime, false)){
  133. entity.datetimeEnd = dateTime
  134. }
  135. }
  136. const onUpdateDateTimeEnd = (entity, dateTime) =>{
  137. if(DateUtils.isBefore(dateTime, props.entity.datetimeStart, false)){
  138. entity.datetimeStart = dateTime
  139. }
  140. }
  141. const newPlace: Ref<boolean> = ref(false)
  142. const onAddPlaceClick = function(entity: Event){
  143. newPlace.value = true
  144. entity.placeName = null
  145. entity.streetAddress = null
  146. entity.streetAddressSecond = null
  147. entity.streetAddressThird = null
  148. entity.addressCity = null
  149. entity.postalCode = null
  150. entity.addressCountry = null
  151. entity.place = null
  152. }
  153. </script>
  154. <style scoped lang="scss">
  155. .label{
  156. font-size: 16px;
  157. color: rgb(var(--v-theme-on-primary-alt));
  158. }
  159. </style>