fix(desktop): confirm-выхода — auth-aware навигация вместо молчаливого бойнса на логин
Typecheck / controller (pull_request) Has been cancelled
Typecheck / desktop (pull_request) Has been cancelled

Ссылка из письма открывается часто без сессии кабинета (другой браузер/инкогнито/
после logout). Подтверждение работает по токену без входа, но wallet защищён —
гард молча редиректил на login-redirect, и пайщик не понимал, что произошло.

- есть сессия → 'Перейти в кабинет' → wallet (глобальный ExitOverlay сам покажет
  'на рассмотрении Совета')
- нет сессии → 'Войти в кабинет' → signin + пояснение, что войти нужно для слежения
  за статусом и суммой возврата

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
coopops
2026-06-16 07:40:02 +00:00
parent 00e15be65e
commit a0e0c9310c
@@ -9,33 +9,55 @@
q-icon(name='error_outline', size='56px', color='negative')
div.text-h6.q-mt-md Не удалось подтвердить выход
p.text-body2.text-grey-7.q-mt-sm {{ error }}
BaseButton.q-mt-lg(variant='secondary', label='Вернуться в кабинет', @click='goToCabinet')
BaseButton.q-mt-lg(
variant='secondary',
:label='isAuth ? "Вернуться в кабинет" : "Войти в кабинет"',
@click='goToCabinet'
)
template(v-else)
q-icon(name='check_circle', size='56px', color='positive')
div.text-h6.q-mt-md Выход подтверждён
p.text-body2.text-grey-7.q-mt-sm Заявление отправлено. Процесс выхода запущен ожидайте решения Совета.
BaseButton.q-mt-lg(variant='primary', label='Продолжить', @click='goToCabinet')
p.text-body2.text-grey-7.q-mt-sm(v-if='!isAuth') Войдите в кабинет, чтобы следить за статусом заявления и суммой возврата.
BaseButton.q-mt-lg(
variant='primary',
:label='isAuth ? "Перейти в кабинет" : "Войти в кабинет"',
@click='goToCabinet'
)
</template>
<script setup lang="ts">
import { onMounted, ref } from 'vue';
import { computed, onMounted, ref } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import { BaseButton } from 'src/shared/ui/base/BaseButton';
import { useSystemStore } from 'src/entities/System/model';
import { useSessionStore } from 'src/entities/Session';
import { useMembershipExit, useExitGate } from 'src/features/Membership/ExitFromCoop';
const route = useRoute();
const router = useRouter();
const { info } = useSystemStore();
const session = useSessionStore();
const { confirmExit } = useMembershipExit();
const { loadExitStatus } = useExitGate();
const loading = ref(true);
const error = ref<string | null>(null);
// Ссылка-подтверждение приходит на e-mail и часто открывается там, где сессии
// кабинета нет (другой браузер/инкогнито/после выхода). Подтверждение работает
// по токену и без входа, но кабинет (wallet) защищён — без сессии навигационный
// гард молча кинет на логин. Поэтому ведём явно: есть сессия → в кабинет (там
// глобальный ExitOverlay сам покажет «на рассмотрении Совета»); нет — на вход.
const isAuth = computed(() => session.isAuth);
const goToCabinet = (): void => {
router.replace({ name: 'wallet', params: { coopname: info.coopname } });
if (session.isAuth) {
router.replace({ name: 'wallet', params: { coopname: info.coopname } });
} else {
router.replace({ name: 'signin', params: { coopname: info.coopname } });
}
};
onMounted(async () => {