{{ t('data_dashboard') }}
{{ t(stat.labelKey) }}
{{ stat.value }}
{{ Math.abs(stat.trend) }}% {{ t('vs_last_month') }}
{{ t('unlock_trend') }}
{{ t('device_status_distribution') }}
{{ t('recent_activities') }}
{{ t(activity.messageKey, activity.params) }}
{{ t(activity.timeKey, activity.timeParams) }}
{{ t('device_management') }}
| {{ t('device_info') }} | {{ t('tenant') }} | {{ t('location') }} | {{ t('status') }} | {{ t('smart_home') }} | {{ t('battery') }} | {{ t('operations') }} | |
|---|---|---|---|---|---|---|---|
|
{{ device.name }}
{{ device.sn }}
|
{{ device.tenant }} | {{ device.location }} | {{ device.status === 'online' ? t('online') : device.status === 'offline' ? t('offline') : t('warning') }} |
|
|
{{ t('tenant_management') }}
{{ tenant.name }}
{{ t(tenant.typeKey) }}
{{ t('user_management') }}
| {{ t('user') }} | {{ t('role') }} | {{ t('tenant') }} | {{ t('status') }} | {{ t('last_login') }} | {{ t('operations') }} |
|---|---|---|---|---|---|
|
{{ user.name }}
{{ user.email }}
|
{{ getRoleLabel(user.role) }} | {{ user.tenant }} | {{ user.status === 'active' ? t('enabled') : t('disabled') }} | {{ user.lastLogin }} |
{{ t('product_supplier') }}
{{ supplier.name }}
{{ supplier.category }}
{{ t('products') }}:
{{ t('certifications') }}:
{{ t('reseller_management') }}
{{ reseller.name }}
{{ reseller.category }}
{{ t('total_supplied') }}
{{ reseller.totalSupplied }}
{{ t('activated') }}
{{ reseller.activated }}
{{ t('online') }}
{{ reseller.active }}
{{ t('reseller_stats_title') }}
{{ t('total_supply') }}
{{ resellers.reduce((sum, s) => sum + s.totalSupplied, 0).toLocaleString() }}
{{ t('accumulated_supply') }}
{{ t('activated_devices') }}
{{ resellers.reduce((sum, s) => sum + s.activated, 0).toLocaleString() }}
{{ t('activation_rate_value') }} {{ ((resellers.reduce((sum, s) => sum + s.activated, 0) / resellers.reduce((sum, s) => sum + s.totalSupplied, 0)) * 100).toFixed(1) }}%
{{ t('online_devices_count') }}
{{ resellers.reduce((sum, s) => sum + s.active, 0).toLocaleString() }}
{{ t('online_rate_value') }} {{ ((resellers.reduce((sum, s) => sum + s.active, 0) / resellers.reduce((sum, s) => sum + s.activated, 0)) * 100).toFixed(1) }}%
{{ t('offline_devices_count') }}
{{ resellers.reduce((sum, s) => sum + s.offline, 0).toLocaleString() }}
{{ t('offline_rate') }} {{ ((resellers.reduce((sum, s) => sum + s.offline, 0) / resellers.reduce((sum, s) => sum + s.activated, 0)) * 100).toFixed(1) }}%
{{ t('monthly_revenue') }}
€{{ resellers.reduce((sum, s) => sum + s.monthlyRevenue, 0).toLocaleString() }}
{{ t('subscription_total_income') }}
{{ t('total_tickets') }}
{{ resellers.reduce((sum, s) => sum + s.tickets.total, 0) }}
{{ t('accumulated_tickets') }}
{{ t('pending_tickets') }}
{{ resellers.reduce((sum, s) => sum + s.tickets.open, 0) }}
{{ t('pending_rate') }} {{ ((resellers.reduce((sum, s) => sum + s.tickets.open, 0) / resellers.reduce((sum, s) => sum + s.tickets.total, 0)) * 100).toFixed(1) }}%
{{ t('warranty_devices') }}
{{ resellers.reduce((sum, s) => sum + s.warranty.inWarranty, 0).toLocaleString() }}
{{ t('warranty_rate') }} {{ ((resellers.reduce((sum, s) => sum + s.warranty.inWarranty, 0) / resellers.reduce((sum, s) => sum + s.activated, 0)) * 100).toFixed(1) }}%
{{ t('expired_warranty') }}
{{ resellers.reduce((sum, s) => sum + s.warranty.expired, 0).toLocaleString() }}
{{ t('potential_renewal') }}
{{ t('current_month_sales') }}
{{ resellers.reduce((sum, s) => sum + s.sales.thisMonth, 0) }}
{{ t('devices_sold') }}
{{ t('last_month_sales') }}
{{ resellers.reduce((sum, s) => sum + s.sales.lastMonth, 0) }}
{{ t('comparison_base') }}
{{ t('monthly_growth') }}
{{ (resellers.reduce((sum, s) => sum + s.sales.thisMonth, 0) - resellers.reduce((sum, s) => sum + s.sales.lastMonth, 0)) >= 0 ? '+' : '' }}{{ (resellers.reduce((sum, s) => sum + s.sales.thisMonth, 0) - resellers.reduce((sum, s) => sum + s.sales.lastMonth, 0)) }}
{{ t('month_over_month') }} {{ resellers.reduce((sum, s) => sum + s.sales.lastMonth, 0) > 0 ? ((resellers.reduce((sum, s) => sum + s.sales.thisMonth, 0) - resellers.reduce((sum, s) => sum + s.sales.lastMonth, 0)) / resellers.reduce((sum, s) => sum + s.sales.lastMonth, 0) * 100).toFixed(1) : '0.0' }}%
{{ t('inventory_for_sale') }}
{{ (resellers.reduce((sum, s) => sum + s.totalSupplied, 0) - resellers.reduce((sum, s) => sum + s.activated, 0)).toLocaleString() }}
{{ t('available_inventory') }}
{{ t('supply_ranking') }}
{{ reseller.name }}
{{ reseller.tier || 'Basic' }}
{{ (reseller.totalSupplied || 0).toLocaleString() }}
{{ t('devices') }}
{{ t('online_rate_ranking') }}
{{ reseller.name }}
{{ reseller.active || 0 }}/{{ reseller.activated || 0 }}
{{ (((reseller.active || 0)/(reseller.activated || 1))*100).toFixed(1) }}%
{{ t('online_rate') }}
{{ t('ticket_resolution_ranking') }}
{{ reseller.name }}
{{ reseller.tickets.resolved || 0 }}/{{ reseller.tickets.total || 0 }}
{{ (((reseller.tickets.resolved || 0)/(reseller.tickets.total || 1))*100).toFixed(1) }}%
{{ t('resolution_rate') }}
{{ t('monthly_growth_top3') }}
{{ reseller.name }}
{{ reseller.sales.thisMonth || 0 }} ({{ t('last_month_label') }} {{ reseller.sales.lastMonth || 0 }})
+{{ (reseller.sales.growth || 0).toFixed(1) }}%
{{ t('monthly_growth') }}
{{ t('no_growth_data') }}
{{ t('renewal_opportunity_ranking') }}
{{ reseller.name }}
{{ t('expired_warranty_count') }}
{{ (reseller.warranty.expired || 0).toLocaleString() }}
{{ t('devices') }}
{{ t('all_in_warranty') }}
{{ t('supplier_details') }}
| {{ t('supplier') }} | {{ t('tier') }} | {{ t('supply_activate_online') }} | {{ t('offline_count') }} | {{ t('ticket_total_pending_rate') }} | {{ t('warranty_status') }} | {{ t('monthly_sales_comparison') }} | {{ t('growth_rate') }} | {{ t('monthly_revenue') }} | {{ t('operations') }} |
|---|---|---|---|---|---|---|---|---|---|
|
{{ reseller.name }} {{ reseller.category }} |
{{ reseller.tier }} |
{{ reseller.totalSupplied }}
{{ reseller.activated }}
({{ ((reseller.activated/reseller.totalSupplied)*100).toFixed(0) }}%)
{{ reseller.active }}
({{ ((reseller.active/reseller.activated)*100).toFixed(0) }}%)
|
{{ reseller.offline }} |
{{ t('total_label') }}:
{{ reseller.tickets.total }}
{{ t('pending_label') }}:
{{ reseller.tickets.open }}
{{ t('rate_label') }}:
{{ reseller.tickets.total > 0 ? ((reseller.tickets.resolved/reseller.tickets.total)*100).toFixed(0) : 0 }}%
|
{{ reseller.warranty.inWarranty }}
{{ reseller.warranty.expired }}
|
{{ t('this_month_label') }}:
{{ reseller.sales.thisMonth }}
{{ t('last_month_label') }}:
{{ reseller.sales.lastMonth }}
|
{{ reseller.sales.growth >= 0 ? '+' : '' }}{{ reseller.sales.growth.toFixed(1) }}% | €{{ reseller.monthlyRevenue.toLocaleString() }} |
{{ t('reseller_tier_management') }}
Basic
{{ t('basic_tier') }}
€49
/ {{ t('month') }}
Professional
{{ t('professional_tier') }} ({{ t('recommended') }})
€149
/ {{ t('month') }}
Enterprise
{{ t('enterprise_tier') }}
{{ t('custom') }}
{{ t('custom_pricing') }}
{{ t('permission_configuration') }}
| {{ t('feature_module') }} | Basic | Professional | Enterprise |
|---|---|---|---|
| {{ t('device_management') }} | |||
| {{ t('user_management') }} | |||
| {{ t('api_access') }} | |||
| {{ t('data_analytics') }} | |||
| {{ t('sandbox_environment') }} | |||
| {{ t('white_label_branding') }} | |||
| {{ t('custom_integration') }} |
{{ t('subscription_management') }}
{{ t('total_subscriptions') }}
102
{{ t('growth_vs_last_month_percent', { percent: 12 }) }}
{{ t('monthly_income') }}
€12,450
{{ t('growth_vs_last_month_percent', { percent: 8 }) }}
{{ t('expiring_this_month') }}
15
{{ t('expiring_within_30_days') }}
{{ t('renewal_rate') }}
89%
{{ t('improvement_vs_last_month', { percent: 3 }) }}
| {{ t('supplier') }} | {{ t('tier') }} | {{ t('fee') }} | {{ t('start_date') }} | {{ t('expiry_date') }} | {{ t('auto_renewal') }} | {{ t('status') }} | {{ t('operations') }} |
|---|---|---|---|---|---|---|---|
|
TT
TTLock官方 info@ttlock.com |
Enterprise | €499{{ t('per_month') }} | 2024-01-01 | 2024-12-31 | {{ t('enabled') }} | {{ t('active') }} | |
|
SL
Smart Lock Co. contact@smartlock.com |
Professional | €149{{ t('per_month') }} | 2024-03-15 | 2024-12-15 | {{ t('enabled') }} | {{ t('expiring_this_month') }} | |
|
HL
Home Lock Ltd. info@homelock.com |
Basic | €49{{ t('per_month') }} | 2024-06-01 | 2025-06-01 | {{ t('disabled') }} | {{ t('active') }} |
{{ t('api_management') }}
{{ t('total_calls') }}
1,234,567
{{ t('success_rate') }}
99.8%
{{ t('avg_response_time') }}
45ms
{{ t('api_endpoints') }}
{{ t(endpoint.descriptionKey) }}
{{ t('permission_management') }}
{{ t('permanent_permission') }}
156
{{ t('temporary_permission') }}
89
{{ t('expired') }}
234
{{ t('virtual_key') }}
45
| {{ t('user') }} | {{ t('device') }} | {{ t('type') }} | {{ t('validity_period') }} | {{ t('usage_count') }} | {{ t('status') }} | {{ t('operations') }} |
|---|---|---|---|---|---|---|
| Zhang San | Room-101 | {{ t('temporary_permission') }} | 2024-11-06 ~ 2024-11-08 | 2/5 | {{ t('valid') }} | |
| Li Si | Room-102 | {{ t('permanent_permission') }} | {{ t('permanent') }} | {{ t('unlimited') }} | {{ t('valid') }} |
{{ t('password_management') }}
{{ t('permanent_passwords') }}
23
{{ t('temporary_passwords') }}
67
{{ t('one_time_passwords') }}
15
{{ t('expired') }}
89
Room-101
{{ t('temporary_password') }}
Room-102
{{ t('permanent_password') }}
{{ t('unlock_records') }}
| {{ t('time') }} | {{ t('device') }} | {{ t('user') }} | {{ t('method') }} | {{ t('result') }} | {{ t('battery') }} | {{ t('operations') }} |
|---|---|---|---|---|---|---|
| 2024-11-06 10:30:15 | Room-101 | Zhang San | {{ t('bluetooth_unlock') }} | {{ t('success') }} | 85% | |
| 2024-11-06 10:25:42 | Room-102 | Li Si | {{ t('password_unlock') }} | {{ t('success') }} | 72% | |
| 2024-11-06 10:20:33 | Room-201 | Wang Wu | {{ t('remote_unlock') }} | {{ t('failed') }} | 45% |
{{ t('alert_management') }}
{{ t('low_battery') }}
12
{{ t('tamper_alert') }}
3
{{ t('multiple_failures') }}
5
{{ t('device_offline') }}
8
{{ t('resolved') }}
156
{{ t('low_battery_alert') }}
{{ t('medium') }}{{ t('low_battery_msg', { device: 'Room-101', threshold: 20, current: 18 }) }}
{{ t('tamper_alert_title') }}
{{ t('high') }}{{ t('tamper_alert_msg', { device: 'Room-305' }) }}
{{ t('firmware_management') }}
F15 v1.3.0
{{ t('latest_version') }}
{{ t('update_notes') }}:
- {{ t('fix_bluetooth_issue') }}
- {{ t('optimize_battery') }}
- {{ t('improve_response') }}
F15 v1.2.5
{{ t('old_version') }}
{{ t('update_notes') }}:
- {{ t('stable_baseline') }}
{{ t('ota_upgrade_tasks') }}
F15 {{ t('task_name') }}
{{ t('target_version') }}: v1.3.0
{{ t('workflow_builder') }}
{{ t('hotel_checkin_automation') }}
{{ t('template') }}
{{ t('hotel_checkin_desc') }}
{{ t('housekeeping_access') }}
{{ t('template') }}
{{ t('housekeeping_desc') }}
{{ t('low_battery_alert') }}
{{ t('template') }}
{{ t('low_battery_desc') }}
{{ t('my_workflows') }}
{{ t('visitor_auto_auth') }}
{{ t('visitor_workflow_desc') }}
{{ t('report_statistics') }}
{{ t('device_usage_frequency') }}
{{ t('unlock_method_distribution') }}
{{ t('workflow_builder') }}
{{ t(workflow.nameKey) }}
{{ t(workflow.categoryKey) }}
{{ t(workflow.descriptionKey) }}
{{ t(currentWorkflow.nameKey) }}
{{ t(currentWorkflow.descriptionKey) }}
{{ t('node_toolbox') }}
{{ t('drag_nodes_to_start') }}
{{ node.type }}
{{ t('node_config') }}: {{ selectedNode.label }}
{{ t('system_settings') }}
{{ t('basic_settings') }}
{{ t('enable_user_registration') }}
{{ t('allow_self_registration') }}
{{ t('enable_mfa') }}
{{ t('require_mfa') }}
{{ t('gdpr_compliance_config') }}
{{ t('gdpr_status_enabled') }}
{{ t('gdpr_compliance_desc') }}
{{ t('data_minimization') }}
{{ t('collect_minimal_data') }}
{{ t('cookie_consent_banner') }}
{{ t('show_cookie_consent') }}
{{ t('data_portability') }}
{{ t('allow_data_export') }}
{{ t('deletion_right') }}
{{ t('allow_data_deletion') }}
{{ t('data_retention_desc') }}
{{ t('audit_logs') }}
{{ t('recent_operations') }}:
{{ t('cloud_storage_config') }}
{{ t('data_encryption') }}
{{ t('use_aes256') }}
{{ t('enable_cdn') }}
{{ t('use_cloudfront') }}
{{ t('storage_usage') }}
{{ t('payment_config') }}
{{ t('payment_statistics') }}
{{ t('security_settings') }}
{{ t('feature_in_progress') }}
{{ t('notification_settings') }}
{{ t('feature_in_progress') }}
{{ t('email_settings') }}
{{ t('feature_in_progress') }}
{{ t('sms_settings') }}
{{ t('feature_in_progress') }}