feat(front) : page consultation client + archivage
Ecran de consultation client en lecture seule (route /clients/[id], ERP-64) : - composable useClient(id) : chargement du detail (embed contacts/adresses/ribs), archivage/restauration (PATCH isArchived seul, refetch complet, 409 RG-1.23 propage) - formulaire principal + 8 onglets readonly (navigation libre), onglet Comptabilite visible uniquement avec accounting.view - boutons Modifier (manage OU accounting.manage), Archiver/Restaurer (archive) - libelles categories/sites/referentiels lus depuis l'embed (role-independant, /categories et /sites etant en 403 pour les roles metier) - ClientAddressBlock : affichage readonly de la ville et de la rue corrige
This commit is contained in:
@@ -88,9 +88,11 @@
|
||||
sur l'input interne, pas sur la cellule de grille. Le wrapper porte
|
||||
le col-span-2, le champ le remplit (w-full). -->
|
||||
<div class="col-span-2">
|
||||
<!-- Adresse : saisie assistee (BAN) ou libre en mode degrade. -->
|
||||
<!-- Adresse : saisie assistee (BAN) en edition ; champ texte simple en
|
||||
mode degrade OU en lecture seule (MalioInputAutocomplete ne reaffiche
|
||||
pas sa valeur liee, il n'afficherait rien en readonly). -->
|
||||
<MalioInputAutocomplete
|
||||
v-if="!degraded"
|
||||
v-if="!degraded && !readonly"
|
||||
:model-value="model.street"
|
||||
:options="addressOptions"
|
||||
:loading="addressLoading"
|
||||
@@ -197,8 +199,21 @@ const model = computed(() => props.modelValue)
|
||||
|
||||
// Mode degrade : service BAN indisponible → Ville/Adresse en saisie libre.
|
||||
const degraded = ref(false)
|
||||
const cityOptions = ref<RefOption[]>([])
|
||||
// Villes proposees par la BAN (alimentees a la saisie du code postal).
|
||||
const banCityOptions = ref<RefOption[]>([])
|
||||
const addressOptions = ref<RefOption[]>([])
|
||||
|
||||
// Options ville effectives : on garantit que la ville courante figure toujours
|
||||
// dans la liste, sinon MalioSelect (qui resout le libelle depuis ses options)
|
||||
// afficherait un champ vide en lecture seule (consultation 1.11) ou en edition
|
||||
// d'une adresse existante (1.12), ou la BAN n'a pas (re)peuple les suggestions.
|
||||
const cityOptions = computed<RefOption[]>(() => {
|
||||
const current = props.modelValue.city
|
||||
if (current && !banCityOptions.value.some(o => o.value === current)) {
|
||||
return [{ value: current, label: current }, ...banCityOptions.value]
|
||||
}
|
||||
return banCityOptions.value
|
||||
})
|
||||
const addressLoading = ref(false)
|
||||
// Conserve les suggestions d'adresse pour retrouver ville/CP au moment du select.
|
||||
let lastAddressSuggestions: AddressSuggestion[] = []
|
||||
@@ -248,7 +263,7 @@ async function onPostalCodeChange(value: string): Promise<void> {
|
||||
}
|
||||
try {
|
||||
const suggestions = await autocomplete.searchCity(digits)
|
||||
cityOptions.value = suggestions.map(s => ({ value: s.city, label: s.city }))
|
||||
banCityOptions.value = suggestions.map(s => ({ value: s.city, label: s.city }))
|
||||
}
|
||||
catch {
|
||||
enterDegraded()
|
||||
|
||||
Reference in New Issue
Block a user