Files
portal/app/resources/js/components/projects/ProjectLimitOverloadDialog.vue
T

65 lines
2.9 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<script setup lang="ts">
/**
* Диалог перегрузки лимита (Billing v2 Spec C §6.2, Task 1.10).
*
* Открывается, когда POST/PATCH /api/projects вернул 409 `balance_insufficient`.
* Показывает дефицит и предлагает три исхода:
* - «Сохранить и приостановить» → save-blocked (родитель пере-сабмитит с
* force_save_blocked=true → проект создаётся с preflight_blocked_at);
* - «Поставить лимит 0» → set-zero (родитель ставит daily_limit_target=0);
* - «Отмена» → закрытие без сохранения.
*/
export interface OverloadPayload {
current_balance_rub: string;
current_capacity_leads: number;
would_be_required_leads: number;
deficit_leads: number;
}
defineProps<{
modelValue: boolean;
payload: OverloadPayload | null;
}>();
defineEmits<{
'update:modelValue': [value: boolean];
'save-blocked': [];
'set-zero': [];
}>();
</script>
<template>
<v-dialog :model-value="modelValue" max-width="520" @update:model-value="$emit('update:modelValue', $event)">
<v-card v-if="payload" data-testid="overload-dialog">
<v-card-title>Лимит превышает баланс</v-card-title>
<v-card-text>
<p>
У тебя {{ payload.current_balance_rub }} = {{ payload.current_capacity_leads }} лидов по текущему
тарифу.
</p>
<p>После сохранения нужно {{ payload.would_be_required_leads }} лидов.</p>
<p class="font-weight-medium">Не хватает: {{ payload.deficit_leads }} лидов.</p>
<p class="text-medium-emphasis mt-2">
Чтобы проект начал работать пополни счёт, поставь его лимит 0 или уменьши лимиты других проектов.
</p>
</v-card-text>
<v-card-actions class="flex-wrap justify-end ga-2">
<v-btn variant="text" data-testid="overload-cancel" @click="$emit('update:modelValue', false)">
Отмена
</v-btn>
<v-btn variant="text" data-testid="overload-set-zero" @click="$emit('set-zero')">
Поставить лимит 0
</v-btn>
<v-btn
color="primary"
variant="flat"
data-testid="overload-save-blocked"
@click="$emit('save-blocked')"
>
Сохранить и приостановить
</v-btn>
</v-card-actions>
</v-card>
</v-dialog>
</template>