71 lines
2.9 KiB
Vue
71 lines
2.9 KiB
Vue
|
|
<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>
|
|||
|
|
<v-spacer />
|
|||
|
|
<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>
|