club home redesign; deal card menu: delete with confirmation

This commit is contained in:
2026-10-12 12:39:52 +03:30
parent b43ed68e82
commit 8af78047d9
17 changed files with 569 additions and 470 deletions
+58
View File
@@ -406,6 +406,39 @@ async function confirmDeleteStage() {
}
}
const deleteDealId = ref<string | null>(null);
const dealDeleting = ref(false);
const deleteDealTitle = computed(() => {
const id = deleteDealId.value;
for (const s of stages.value) {
const d = s.deals.find((x) => x.id === id);
if (d) return d.title;
}
return '';
});
function askDeleteDeal(dealId: string) {
menuOpenId.value = null;
deleteDealId.value = dealId;
}
async function confirmDeleteDeal() {
const id = deleteDealId.value;
if (!id || dealDeleting.value) return;
dealDeleting.value = true;
error.value = '';
try {
await api.delete(`/deals/${id}`);
deleteDealId.value = null;
await load();
} catch (e) {
error.value = apiMessage(e, 'حذف معامله ناموفق بود.');
} finally {
dealDeleting.value = false;
}
}
async function onDealSaved() {
dealModal.value = null;
await load();
@@ -597,6 +630,9 @@ defineExpose({ updateDealStage: applyUpdateDealStage });
>
ویرایش
</button>
<button type="button" role="menuitem" class="danger" @click="askDeleteDeal(menuOpenId)">
حذف
</button>
<button type="button" role="menuitem" @click="menuOpenId = null">بستن</button>
</div>
@@ -654,6 +690,24 @@ defineExpose({ updateDealStage: applyUpdateDealStage });
</template>
</UiModal>
<UiModal
:open="Boolean(deleteDealId)"
title="حذف معامله"
@close="deleteDealId = null"
>
<p class="delete-copy">
معاملهٔ «{{ deleteDealTitle }}» حذف شود؟ این کار قابل بازگشت نیست.
</p>
<template #footer>
<UiButton type="button" :disabled="dealDeleting" @click="confirmDeleteDeal">
{{ dealDeleting ? 'در حال حذف…' : 'حذف' }}
</UiButton>
<UiButton variant="ghost" type="button" @click="deleteDealId = null">
انصراف
</UiButton>
</template>
</UiModal>
<UiModal
:open="Boolean(dealModal)"
:title="dealModal?.dealId ? 'ویرایش معامله' : 'ایجاد معامله جدید'"
@@ -737,4 +791,8 @@ defineExpose({ updateDealStage: applyUpdateDealStage });
color: var(--ink);
text-align: right;
}
.menu-pop button.danger {
color: var(--danger);
}
</style>