import { ChangeDetectionStrategy, Component, inject, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { DeviceService } from '../../core/device.service';
import { SessionService } from '../../core/session.service';
/**
* 入口分流页(SPEC FR-01)
*
* 行为(2026-11-14 重构):
* · 按 UA + 视口**一次性**判定访问端
* · **先判登录态**:未登录直接跳 `/login`,不让用户白跑一趟业务页
* · 已登录直接进对应端的业务页,**不经过空白中转**
* · **`replaceUrl: true`** 跳转 → 浏览器返回不会弹回本页(AC-01.2)
*
* 🔴 端判定**只在此处发生一次**,之后不随窗口缩放/旋转改变(ADR-004 决策 3)。
*
* 🔴 为什么在这里判登录而不是靠守卫兜底:
* 原实现无条件跳业务页,再由 `authGuard` 重定向到 `/login`。
* 结果是「入口 → 业务页 → 登录」两次跳转,中间会闪一下空白/骨架,
* 用户看到的就是「进去之后白屏加载」。现在一步到位。
*/
@Component({
selector: 'app-entry',
changeDetection: ChangeDetectionStrategy.OnPush,
template: `
`,
styles: [
`
:host {
display: block;
min-height: 100dvh;
background: var(--canvas);
}
.entry {
min-height: 100dvh;
display: grid;
place-content: center;
justify-items: center;
gap: var(--sp-3);
}
.entry-mark {
display: grid;
place-items: center;
width: 56px;
height: 56px;
border-radius: var(--r-lg);
background: var(--primary);
color: var(--primary-content);
font-size: var(--fs-20);
}
.entry-text {
margin: 0;
font-size: var(--fs-13);
color: var(--muted);
}
`,
],
})
export class EntryComponent implements OnInit {
private readonly device = inject(DeviceService);
private readonly router = inject(Router);
private readonly session = inject(SessionService);
ngOnInit(): void {
/*
* 🔴 先判登录(2026-11-14 用户要求「登录检测成功自动进入对应页面,
* 不空白加载」):未登录一步跳到登录页,不做「业务页 → 守卫 → 登录」两跳。
*/
if (!this.session.isLoggedIn()) {
void this.router.navigateByUrl('/login', { replaceUrl: true });
return;
}
void this.router.navigateByUrl(this.device.entryPath(), { replaceUrl: true });
}
}