Melissa: promove rota oficial + redirect automatico da home
Sai do estado "preview/sandbox" e liga o Melissa como layout real
ativavel pelo user em Configuracoes -> Profile.
Mudancas:
- routes.misc.js: /preview/melissa/:secao? -> /melissa/:secao?,
nome PreviewMelissa -> Melissa. Sem alias por compat (autorizado).
- router/index.js: novo beforeEach apos o supportGuard e antes do
applyGuards. Quando to.name e' therapist.dashboard ou admin.dashboard
E localStorage.layout_variant === 'melissa' E viewport >= 1280px,
redireciona pra { name: 'Melissa' }. Le do localStorage (gravado pelo
bootstrapUserSettings + setVariant) pra evitar esperar store do DB e
evitar flash do shell antes do redirect. Bypassa mobile pq Melissa
nao foi feito pra <xl e o effectiveVariant ja forca 'classic' la.
- MelissaLayout.vue: 2 chamadas router.push apontavam pra
'PreviewMelissa', agora 'Melissa'. Header doc atualizado.
- useMelissaPacientes.js: comment doc citando /preview/melissa
generalizado pra "sem session retorna vazio".
- ProfilePage.vue: card Melissa perde badge "Em construcao" e ganha
badge "Beta". Texto explicativo perde "navegacao completa ainda
nao esta integrada" e ganha "Ao salvar, sua proxima entrada na
home cai direto no Melissa". Link /preview/melissa -> /melissa.
Remove regra CSS .lv-card--wip orfa.
Tradeoff aceito: rotas especificas (/therapist/agenda etc.) seguem
no shell classico/rail. So a HOME do role e' interceptada pra /melissa.
Coerente com o desenho atual do MelissaLayout, que ja abre Agenda /
Pacientes / etc. como overlays internos via deep-link /melissa/<secao>.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -105,6 +105,35 @@ router.beforeEach(async (to) => {
|
||||
await supportGuard(to, pinia);
|
||||
});
|
||||
|
||||
// ── Layout Melissa: home do role -> /melissa ─────────────────────────
|
||||
// Quando o user gravou layout_variant='melissa' em user_settings, qualquer
|
||||
// entrada na home do role (therapist.dashboard ou admin.dashboard) cai
|
||||
// direto no layout Melissa. Tomada de decisão via localStorage (espelho
|
||||
// gravado pelo bootstrapUserSettings + setVariant) — evita esperar a
|
||||
// store carregar do DB e prevenir flash do shell clássico antes do
|
||||
// redirect. Bypassa em mobile (<1280px), onde Melissa não foi feito pra
|
||||
// rodar e o effectiveVariant do layout.js já força 'classic'.
|
||||
const HOME_ROUTE_NAMES = new Set(['therapist.dashboard', 'admin.dashboard']);
|
||||
router.beforeEach((to) => {
|
||||
if (!HOME_ROUTE_NAMES.has(to.name)) return;
|
||||
|
||||
let variant = null;
|
||||
try {
|
||||
variant = localStorage.getItem('layout_variant');
|
||||
} catch {
|
||||
// localStorage indisponível (modo privado / SSR) — segue o caminho normal
|
||||
return;
|
||||
}
|
||||
if (variant !== 'melissa') return;
|
||||
|
||||
const isMobile = typeof window !== 'undefined'
|
||||
&& typeof window.matchMedia === 'function'
|
||||
&& window.matchMedia('(max-width: 1279px)').matches;
|
||||
if (isMobile) return;
|
||||
|
||||
return { name: 'Melissa' };
|
||||
});
|
||||
|
||||
applyGuards(router);
|
||||
|
||||
export default router;
|
||||
|
||||
@@ -23,14 +23,17 @@ export default {
|
||||
component: () => import('@/views/pages/Landing.vue')
|
||||
},
|
||||
|
||||
// Sandbox do layout Melissa (Direção B — lockscreen-style)
|
||||
// Standalone, sem auth, sem AppLayout. Promovido de /preview/dashboard-win11.
|
||||
// Param `:secao?` opcional reflete a seção aberta na URL (agenda,
|
||||
// Layout Melissa (Direcao B — lockscreen-style).
|
||||
// Fullscreen, fora do AppLayout — UI inteira do Melissa vive aqui.
|
||||
// Quem ativa: user com user_settings.layout_variant = 'melissa'
|
||||
// (escolhido em /account/profile). O router.beforeEach do
|
||||
// index.js redireciona automaticamente da home do role pra ca.
|
||||
// Param `:secao?` opcional reflete a secao aberta na URL (agenda,
|
||||
// pacientes, conversas, etc.) — permite deep-link, back/forward,
|
||||
// refresh preservando estado.
|
||||
{
|
||||
path: 'preview/melissa/:secao?',
|
||||
name: 'PreviewMelissa',
|
||||
path: 'melissa/:secao?',
|
||||
name: 'Melissa',
|
||||
component: () => import('@/layout/melissa/MelissaLayout.vue')
|
||||
},
|
||||
|
||||
|
||||
Reference in New Issue
Block a user