fix : order navbar + modification création fournisseur et client
This commit is contained in:
@@ -15,6 +15,19 @@
|
||||
<UiTextInput id="supplier-phone" v-model="form.phone" label="Téléphone" :disabled="!auth.isAdmin" wrapper-class="w-[280px]" required/>
|
||||
<UiTextInput id="supplier-email" v-model="form.email" label="Email" :disabled="!auth.isAdmin" wrapper-class="w-[280px]"/>
|
||||
</div>
|
||||
<div v-if="!supplierId" class="flex flex-cols-3 justify-between mb-11">
|
||||
<UiTextInput id="address-street" v-model="addressForm.street" label="Rue" wrapper-class="w-[280px]" required />
|
||||
<UiTextInput id="address-street2" v-model="addressForm.street2" label="Complément" wrapper-class="w-[280px]" />
|
||||
<UiTextInput id="address-country" v-model="addressForm.countryCode" label="Pays (code)" wrapper-class="w-[280px]" />
|
||||
</div>
|
||||
<div v-if="!supplierId" class="flex flex-cols-3 justify-between mb-11">
|
||||
<UiTextInput id="address-postalCode" v-model="addressForm.postalCode" label="Code postal" wrapper-class="w-[280px]" required />
|
||||
<UiSelect id="address-city" v-model="addressForm.city" label="Ville"
|
||||
:options="communeOptions" :loading="isLoadingCities"
|
||||
wrapper-class="w-[280px]" required />
|
||||
<div class="w-[280px]" />
|
||||
</div>
|
||||
|
||||
<div class="flex items-center justify-center">
|
||||
<UiButton
|
||||
class="inline-flex mb-28 items-center justify-center text-xl min-w-[194px] text-white uppercase bg-primary-500 h-[50px] rounded hover:opacity-80 justify-self-end"
|
||||
@@ -27,6 +40,7 @@
|
||||
</UiButton>
|
||||
</div>
|
||||
|
||||
<template v-if="supplierId">
|
||||
<div class="flex items-center justify-between mb-7">
|
||||
<h2 class="text-3xl text-primary-500 font-bold uppercase">Adresses du fournisseur</h2>
|
||||
</div>
|
||||
@@ -78,6 +92,7 @@
|
||||
Ajouter
|
||||
</UiButton>
|
||||
</div>
|
||||
</template>
|
||||
</form>
|
||||
</template>
|
||||
|
||||
@@ -85,6 +100,8 @@
|
||||
import {computed, reactive, ref, watch} from "vue"
|
||||
import {createSupplier, getSupplier, updateSupplier} from "~/services/supplier"
|
||||
import type {SupplierData, SupplierFormData, SupplierPayload} from "~/services/dto/supplier-data"
|
||||
import {createAddress, type AddressPayload} from "~/services/address"
|
||||
import {getCommunesByPostalCode, type CommuneData} from "~/services/geo"
|
||||
import {useAuthStore} from "~/stores/auth"
|
||||
|
||||
const route = useRoute()
|
||||
@@ -107,6 +124,30 @@ const form = reactive<SupplierFormData>({
|
||||
addresses: [],
|
||||
})
|
||||
|
||||
// Address form (creation mode only)
|
||||
const addressForm = reactive<AddressPayload>({
|
||||
street: "", street2: null, postalCode: "", city: "", countryCode: "FR",
|
||||
})
|
||||
const communes = ref<CommuneData[]>([])
|
||||
const isLoadingCities = ref(false)
|
||||
const communeOptions = computed(() => communes.value.map(c => ({ value: c.nom, label: c.nom })))
|
||||
|
||||
let debounceTimer: ReturnType<typeof setTimeout> | null = null
|
||||
watch(() => addressForm.postalCode, (cp) => {
|
||||
if (debounceTimer) clearTimeout(debounceTimer)
|
||||
if (!cp || cp.length < 5) { communes.value = []; addressForm.city = ''; return }
|
||||
if (cp.length === 5) {
|
||||
debounceTimer = setTimeout(async () => {
|
||||
isLoadingCities.value = true
|
||||
try {
|
||||
communes.value = await getCommunesByPostalCode(cp)
|
||||
if (communes.value.length === 1) addressForm.city = communes.value[0].nom
|
||||
else addressForm.city = ''
|
||||
} finally { isLoadingCities.value = false }
|
||||
}, 300)
|
||||
}
|
||||
})
|
||||
|
||||
const goToAddAddress = () => {
|
||||
if (supplierId.value === null || !auth.isAdmin) return
|
||||
router.push({
|
||||
@@ -190,8 +231,11 @@ async function validate() {
|
||||
await updateSupplier(supplierId.value, supplierPayload)
|
||||
targetId = supplierId.value
|
||||
} else {
|
||||
const addressData = await createAddress({ ...addressForm })
|
||||
const addressIRI = `/api/addresses/${addressData.id}`
|
||||
const creationPayload = {
|
||||
...supplierPayload,
|
||||
addresses: [addressIRI],
|
||||
...(auth.user?.id ? { createdBy: `/api/users/${auth.user.id}` } : {}),
|
||||
}
|
||||
const created = await createSupplier(creationPayload)
|
||||
|
||||
Reference in New Issue
Block a user