club home redesign; deal card menu: delete with confirmation
This commit is contained in:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user