feat(directory) : refonte UI des fiches + onglet rapport (LST-72)
Fiches Client / Prospect / Prestataire (onglet Rapport mis à part) : - Champs email/téléphone : composants MalioInputEmail / MalioInputPhone - Grilles en 4 colonnes (Info + blocs Contact/Adresse) - Boutons « Nouveau contact/adresse » en secondary ; « Enregistrer » en taille Malio standard ; marge form↔bouton homogène entre onglets - Bouton retour ghost (mdi:arrow-left-bold) comme Starseed - Adresse : flux CP → ville → rue (rue conditionnée au CP+ville, cascade de reset), titre du bloc = libellé saisi - Suppression d'un bloc Contact/Adresse : modal de confirmation (logique centralisée dans useDirectoryDetail) Onglet Rapport : - Bouton d'ajout en taille Malio standard, label « Ajouter » - Suppression compte-rendu : passe à la ConfirmModal partagée (remplace l'ancienne ConfirmDeleteReportModal, supprimée) - Suppression d'un document joint : ajout d'une modal de confirmation - Upload via MalioInputUpload ; bouton supprimer document aligné (mdi:delete-outline ghost) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -9,8 +9,7 @@
|
||||
v-if="canManage"
|
||||
icon-name="mdi:plus"
|
||||
icon-position="left"
|
||||
button-class="w-auto px-4"
|
||||
:label="$t('directory.reports.add')"
|
||||
:label="$t('common.add')"
|
||||
@click="openCreate"
|
||||
/>
|
||||
</div>
|
||||
@@ -108,7 +107,7 @@
|
||||
v-if="report.documents?.length"
|
||||
:documents="report.documents"
|
||||
:can-manage="canManage"
|
||||
@delete="(docId) => removeDocument(docId)"
|
||||
@delete="(docId) => askDeleteDocument(docId)"
|
||||
/>
|
||||
<ReportDocumentUpload
|
||||
v-if="canManage"
|
||||
@@ -127,11 +126,18 @@
|
||||
:owner="owner"
|
||||
@saved="reload"
|
||||
/>
|
||||
<ConfirmDeleteReportModal
|
||||
<ConfirmModal
|
||||
v-model="confirmOpen"
|
||||
:busy="deleting"
|
||||
:title="$t('directory.reports.confirmDeleteTitle')"
|
||||
:message="$t('directory.reports.confirmDeleteMessage')"
|
||||
@confirm="confirmDelete"
|
||||
/>
|
||||
<ConfirmModal
|
||||
v-model="docConfirmOpen"
|
||||
:title="$t('directory.reports.documentDeleteTitle')"
|
||||
:message="$t('directory.reports.documentDeleteMessage')"
|
||||
@confirm="confirmDeleteDocument"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -158,6 +164,11 @@ const confirmOpen = ref(false)
|
||||
const pendingDelete = ref<CommercialReport | null>(null)
|
||||
const deleting = ref(false)
|
||||
|
||||
// Suppression d'un document joint : passe désormais par une modal de confirmation.
|
||||
const docConfirmOpen = ref(false)
|
||||
const pendingDocId = ref<number | null>(null)
|
||||
const deletingDoc = ref(false)
|
||||
|
||||
// Le plus récent en haut (l'API ne garantit pas l'ordre).
|
||||
const sortedReports = computed(() =>
|
||||
[...reports.value].sort((a, b) => b.occurredAt.localeCompare(a.occurredAt)),
|
||||
@@ -222,9 +233,22 @@ async function confirmDelete(): Promise<void> {
|
||||
}
|
||||
}
|
||||
|
||||
async function removeDocument(id: number): Promise<void> {
|
||||
await documentService.remove(id)
|
||||
await reload()
|
||||
function askDeleteDocument(id: number): void {
|
||||
pendingDocId.value = id
|
||||
docConfirmOpen.value = true
|
||||
}
|
||||
|
||||
async function confirmDeleteDocument(): Promise<void> {
|
||||
if (pendingDocId.value === null || deletingDoc.value) return
|
||||
deletingDoc.value = true
|
||||
try {
|
||||
await documentService.remove(pendingDocId.value)
|
||||
docConfirmOpen.value = false
|
||||
pendingDocId.value = null
|
||||
await reload()
|
||||
} finally {
|
||||
deletingDoc.value = false
|
||||
}
|
||||
}
|
||||
|
||||
async function reload(): Promise<void> {
|
||||
|
||||
Reference in New Issue
Block a user