+
+
+
+
Thông tin
+
{displayName}
+
{staff?.email}
+
Đổi mật khẩu
diff --git a/management/src/index.css b/management/src/index.css
index dc18732..8b91241 100644
--- a/management/src/index.css
+++ b/management/src/index.css
@@ -237,6 +237,51 @@ body {
flex-shrink: 0;
}
+.sidebar-user-btn {
+ width: 100%;
+ text-align: left;
+ border: 1px solid transparent;
+ border-radius: var(--radius-sm);
+ background: none;
+ padding: 0.5rem 0.6rem;
+ cursor: pointer;
+ display: flex;
+ flex-direction: column;
+ gap: 0.15rem;
+ transition: background 0.15s, border-color 0.15s;
+}
+
+.sidebar-user-btn:hover {
+ background: var(--bg-subtle);
+}
+
+.sidebar-user-btn.active {
+ background: var(--accent-light);
+ border-color: var(--accent);
+}
+
+.sidebar-user-btn.active .sidebar-user-name,
+.sidebar-user-btn.active .sidebar-user-email {
+ color: var(--accent);
+}
+
+.sidebar-user-name {
+ font-size: 0.82rem;
+ font-weight: 600;
+ color: var(--text-primary);
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.sidebar-user-email {
+ font-size: 0.72rem;
+ color: var(--text-muted);
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
.token-badge {
background-color: var(--bg-subtle);
border: 1px solid var(--border-color);
diff --git a/management/src/navigation.ts b/management/src/navigation.ts
index 0915b00..eb0c2f6 100644
--- a/management/src/navigation.ts
+++ b/management/src/navigation.ts
@@ -1,4 +1,4 @@
-export type TabId = 'dashboard' | 'classes' | 'students' | 'learning' | 'network' | 'accounts';
+export type TabId = 'dashboard' | 'classes' | 'students' | 'learning' | 'network' | 'email-domains' | 'profile';
export interface NavEntry {
id: string;
@@ -15,20 +15,22 @@ export const TAB_LABELS: Record = {
students: 'Sinh viên',
learning: 'Giám sát & Lịch học',
network: 'Quản lý mạng',
- accounts: 'Tài khoản',
+ 'email-domains': 'Đuôi email',
+ profile: 'Tài khoản của tôi',
};
const HISTORY_KEY = 'sc_nav_history';
const MAX_HISTORY = 10;
function isTabId(value: string | null): value is TabId {
- return value === 'dashboard' || value === 'classes' || value === 'students' || value === 'learning' || value === 'network' || value === 'accounts';
+ return value === 'dashboard' || value === 'classes' || value === 'students' || value === 'learning' || value === 'network' || value === 'email-domains' || value === 'profile';
}
export function parseRoute(): { tab: TabId; classId: number | null } {
const params = new URLSearchParams(window.location.search);
const tabParam = params.get('tab');
- const tab: TabId = isTabId(tabParam) ? tabParam : 'dashboard';
+ let tab: TabId = isTabId(tabParam) ? tabParam : 'dashboard';
+ if (tabParam === 'accounts') tab = 'email-domains';
const classIdRaw = params.get('classId');
const classId = classIdRaw ? Number(classIdRaw) : null;
return {