web: put the traffic screen in the admin frame

installTracking() beacons one view per page load and one click per control that
carries a data-key, so every existing button is already counted. The new STATS
pane reads it back: a 7/30/90-day range, the three totals, an SVG timeline and
eight proportional bar lists (pages, clicked features, country, region, city,
browser, system, device).
This commit is contained in:
2026-09-18 14:23:25 +07:00
parent 8a7192eae8
commit 89beb5f160
8 changed files with 305 additions and 1 deletions
+18
View File
@@ -196,6 +196,24 @@ export const en: Dict = {
'adm.selectNone': 'SELECT NONE',
'adm.deleteSelected': 'DELETE SELECTED ({n})',
'adm.userDeleteSelectedConfirm': 'Permanently delete the {n} selected accounts with all of their photos and recipes? This cannot be undone.',
'adm.tabStats': 'STATS',
'stats.days': '{n} DAYS',
'stats.hint': 'Traffic over the selected range.',
'stats.views': 'PAGE VIEWS',
'stats.clicks': 'FEATURE CLICKS',
'stats.visitors': 'VISITORS',
'stats.timeline': 'TRAFFIC PER DAY',
'stats.peak': 'peak',
'stats.pages': 'PAGES VIEWED',
'stats.targets': 'FEATURES CLICKED',
'stats.countries': 'COUNTRIES',
'stats.regions': 'REGIONS',
'stats.cities': 'CITIES',
'stats.browsers': 'BROWSERS',
'stats.systems': 'OPERATING SYSTEMS',
'stats.devices': 'DEVICES',
'stats.empty': 'No data yet.',
'profile.title': 'My profile',
+20
View File
@@ -199,6 +199,26 @@ export const vi = {
'adm.selectNone': 'BỎ CHỌN',
'adm.deleteSelected': 'XOÁ ĐÃ CHỌN ({n})',
'adm.userDeleteSelectedConfirm': 'Xoá vĩnh viễn {n} tài khoản đã chọn cùng toàn bộ ảnh và công thức của chúng? Không hoàn tác được.',
'adm.tabStats': 'THỐNG KÊ',
// The traffic screen. Bucket names ('/app', a control's data-key, a browser
// version) are machine values and stay as they are.
'stats.days': '{n} NGÀY',
'stats.hint': 'Lưu lượng trong khoảng đã chọn.',
'stats.views': 'LƯỢT XEM',
'stats.clicks': 'LƯỢT NHẤN',
'stats.visitors': 'KHÁCH TRUY CẬP',
'stats.timeline': 'LƯU LƯỢNG THEO NGÀY',
'stats.peak': 'đỉnh',
'stats.pages': 'TRANG ĐƯỢC XEM',
'stats.targets': 'TÍNH NĂNG ĐƯỢC NHẤN',
'stats.countries': 'QUỐC GIA',
'stats.regions': 'VÙNG MIỀN',
'stats.cities': 'THÀNH PHỐ',
'stats.browsers': 'TRÌNH DUYỆT',
'stats.systems': 'HỆ ĐIỀU HÀNH',
'stats.devices': 'THIẾT BỊ',
'stats.empty': 'Chưa có dữ liệu.',
'profile.title': 'Hồ sơ của tôi',