fix(registration): pending-счёт не считать «оплачено» — вести на оплату, а не на ожидание
Счёт регистрационного взноса создаётся со статусом pending сразу при заходе на шаг оплаты («счёт выставлен», деньги ещё не получены). При возврате на страницу (перезагрузка/повторный вход) роутинг считал сам факт наличия платежа за «этап оплаты пройден» и вёл на экран ожидания, где дефолтная ветка показывала «Ваш платеж принят» — хотя оплаты не было и статус не менялся. - SignUp: на экран ожидания/отказа ведём только при PAID/COMPLETED либо терминальном статусе (отказ/отмена/возврат); pending → шаг оплаты (QR + поллинг). - WaitingRegistration: для pending — отдельная ветка «Ожидаем поступление оплаты» + кнопка «Перейти к оплате»; «платёж принят» остаётся только для PAID/COMPLETED. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -82,19 +82,25 @@ onMounted(() => {
|
||||
store.step = steps.WaitingRegistration;
|
||||
return;
|
||||
}
|
||||
// Есть незавершённый вступительный платёж (ожидание подтверждения денег или
|
||||
// отклонение председателем) — восстанавливаем экран ожидания/отказа даже
|
||||
// после перезагрузки и в любой вкладке. Процесс может тянуться днями.
|
||||
// Незавершённый вступительный платёж. PENDING означает «счёт выставлен», а НЕ
|
||||
// «деньги получены»: строку счёта мы создаём сразу при заходе на шаг оплаты.
|
||||
// Поэтому на экран ожидания/отказа ведём ТОЛЬКО когда деньги уже поступили
|
||||
// (PAID/COMPLETED) либо платёж в терминальном статусе (отказ/отмена/возврат).
|
||||
// Приоритет над статусом: при отказе платежа показываем причину, а не гоним
|
||||
// «оплатить заново».
|
||||
if (session.registrationPayment) {
|
||||
const regPaymentStatus = session.registrationPayment?.status;
|
||||
if (regPaymentStatus && regPaymentStatus !== Zeus.PaymentStatus.PENDING) {
|
||||
store.step = steps.WaitingRegistration;
|
||||
return;
|
||||
}
|
||||
// Сервер — источник истины о шаге: заявление уже подписано (Joined), но
|
||||
// оплаты ещё нет → возвращаем на шаг оплаты. Так процесс переживает
|
||||
// перезагрузку и открытие в другой вкладке, не завися от localStorage.
|
||||
if (userStatus === Zeus.UserStatus.Joined) {
|
||||
// Сервер — источник истины о шаге: заявление подписано (Joined) либо счёт
|
||||
// выставлен, но не оплачен (PENDING) → возвращаем на шаг оплаты (там QR +
|
||||
// поллинг приёма денег). Так процесс переживает перезагрузку и открытие в
|
||||
// другой вкладке, не завися от localStorage.
|
||||
if (
|
||||
regPaymentStatus === Zeus.PaymentStatus.PENDING ||
|
||||
userStatus === Zeus.UserStatus.Joined
|
||||
) {
|
||||
store.step = steps.PayInitial;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -38,7 +38,15 @@ div
|
||||
//- Техническая ошибка обработки — направляем в поддержку.
|
||||
template(v-else-if='isFailed')
|
||||
p Произошла ошибка при регистрации. Пожалуйста, обратитесь в поддержку для устранения проблемы.
|
||||
//- Штатное ожидание: деньги приняты, ждём решение совета.
|
||||
//- Счёт выставлен, но деньги ещё НЕ поступили (PENDING) — это НЕ «принят».
|
||||
//- Возвращаем пайщика к оплате, чтобы он завершил вступительный взнос.
|
||||
template(v-else-if='isAwaitingPayment')
|
||||
BaseBanner.q-mb-md(variant='info')
|
||||
.text-bold Ожидаем поступление оплаты.
|
||||
p.q-mt-xs.q-mb-none Счёт на вступительный взнос выставлен, но оплата ещё не поступила. Завершите оплату, чтобы заявление ушло на рассмотрение совета.
|
||||
.row.q-gutter-sm
|
||||
BaseButton(variant='primary', @click='retryPayment') Перейти к оплате
|
||||
//- Штатное ожидание: деньги поступили (PAID/COMPLETED), ждём решение совета.
|
||||
template(v-else)
|
||||
p Ваш платеж принят. Ожидаем, когда совет рассмотрит Ваше заявление и примет решение о приёме Вас в пайщики. Рассмотрение может занять до 30 дней, но обычно решение принимается в течение одного-двух дней. Вы получите уведомление, когда решение будет принято.
|
||||
span Эту страницу можно закрыть, а при необходимости, войти с другого устройства с помощью ключа доступа, который был сохранён ранее.
|
||||
@@ -83,6 +91,13 @@ const isDeclined = computed(() => {
|
||||
);
|
||||
});
|
||||
|
||||
// Счёт выставлен, но деньги ещё не поступили (PENDING). Это НЕ «платёж принят»:
|
||||
// строку счёта создаём сразу при заходе на шаг оплаты, она не подтверждает
|
||||
// поступление средств. Показываем «ожидаем оплату» + кнопку возврата к оплате.
|
||||
const isAwaitingPayment = computed(
|
||||
() => registrationPayment.value?.status === Zeus.PaymentStatus.PENDING
|
||||
);
|
||||
|
||||
const declineMessage = computed(() => registrationPayment.value?.message || '');
|
||||
|
||||
// Отказ совета (declinereg) — два шага возврата, бэкенд отдаёт их по
|
||||
|
||||
Reference in New Issue
Block a user