fix(desktop): confirm-выхода — auth-aware навигация вместо молчаливого бойнса на логин
Ссылка из письма открывается часто без сессии кабинета (другой браузер/инкогнито/ после logout). Подтверждение работает по токену без входа, но wallet защищён — гард молча редиректил на login-redirect, и пайщик не понимал, что произошло. - есть сессия → 'Перейти в кабинет' → wallet (глобальный ExitOverlay сам покажет 'на рассмотрении Совета') - нет сессии → 'Войти в кабинет' → signin + пояснение, что войти нужно для слежения за статусом и суммой возврата Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+26
-4
@@ -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 () => {
|
||||
|
||||
Reference in New Issue
Block a user