{{ 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') }}
-
{{ device.battery }}%
{{ t('showing') }} 1-10 / {{ t('total') }} {{ devices.length }} {{ t('items') }}

{{ t('tenant_management') }}

{{ tenant.name }}

{{ t(tenant.typeKey) }}

{{ tenant.status === 'active' ? t('active') : t('suspended') }}
{{ t('device_count') }} {{ tenant.deviceCount }} / {{ tenant.maxDevices }}
{{ t('user_count') }} {{ tenant.userCount }} / {{ tenant.maxUsers }}
{{ t('subscription_expires') }} {{ tenant.expiresAt }}

{{ 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 }}

{{ supplier.status === 'active' ? t('cooperating') : t('suspended') }}
{{ supplier.contact }}
{{ supplier.email }}
{{ supplier.phone }}
{{ supplier.address }}

{{ t('products') }}:

{{ product }}

{{ t('certifications') }}:

{{ cert }}
{{ t('established_text', { year: supplier.establishedYear }) }}

{{ t('reseller_management') }}

{{ reseller.name }}

{{ reseller.category }}

{{ reseller.status === 'verified' ? t('verified') : t('pending_review') }}
{{ t('supplier_label') }} {{ reseller.supplier }}

{{ t('total_supplied') }}

{{ reseller.totalSupplied }}

{{ t('activated') }}

{{ reseller.activated }}

{{ t('online') }}

{{ reseller.active }}

{{ t('activation_rate') }} {{ ((reseller.activated/reseller.totalSupplied)*100).toFixed(1) }}%
{{ t('online_rate') }} {{ ((reseller.active/reseller.activated)*100).toFixed(1) }}%
{{ t('tickets') }} {{ reseller.tickets.total }} ({{ t('pending_label') }}{{ reseller.tickets.open }})
{{ t('warranty') }} {{ reseller.warranty.inWarranty }}/{{ reseller.warranty.expired }}
{{ t('monthly_sales') }} {{ reseller.sales.thisMonth }} ({{ reseller.sales.growth >= 0 ? '+' : '' }}{{ reseller.sales.growth.toFixed(1) }}%)
{{ t('monthly_revenue') }} €{{ reseller.monthlyRevenue.toLocaleString() }}

{{ 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') }}

{{ index + 1 }}

{{ reseller.name }}

{{ reseller.tier || 'Basic' }}

{{ (reseller.totalSupplied || 0).toLocaleString() }}

{{ t('devices') }}

{{ t('online_rate_ranking') }}

{{ index + 1 }}

{{ reseller.name }}

{{ reseller.active || 0 }}/{{ reseller.activated || 0 }}

{{ (((reseller.active || 0)/(reseller.activated || 1))*100).toFixed(1) }}%

{{ t('online_rate') }}

{{ t('ticket_resolution_ranking') }}

{{ index + 1 }}

{{ 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') }}

{{ index + 1 }}

{{ 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') }}

{{ index + 1 }}

{{ 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') }}

{{ t('max_devices', { count: 50 }) }}
{{ t('api_calls_per_day', { count: '1,000' }) }}
{{ t('storage_space', { size: '5 GB' }) }}
{{ t('email_support') }}
{{ t('priority_support') }}
{{ t('sandbox_environment') }}
{{ t('supplier_count', { count: 23 }) }}

Professional

{{ t('professional_tier') }} ({{ t('recommended') }})

€149

/ {{ t('month') }}

{{ t('max_devices', { count: 500 }) }}
{{ t('api_calls_per_day', { count: '10,000' }) }}
{{ t('storage_space', { size: '50 GB' }) }}
{{ t('priority_support') }}
{{ t('sandbox_environment') }}
{{ t('custom_branding') }}
{{ t('supplier_count', { count: 67 }) }}

Enterprise

{{ t('enterprise_tier') }}

{{ t('custom') }}

{{ t('custom_pricing') }}

{{ t('unlimited_devices') }}
{{ t('unlimited_api_calls') }}
{{ t('unlimited_storage') }}
{{ t('dedicated_support') }}
{{ t('on_premise_deployment') }}
{{ t('sla_guarantee') }}
{{ t('supplier_count', { count: 12 }) }}

{{ 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('showing_entries', { start: 1, end: 10, total: 102 }) }}

{{ t('api_management') }}

{{ t('total_calls') }}

1,234,567

{{ t('success_rate') }}

99.8%

{{ t('avg_response_time') }}

45ms

{{ t('api_endpoints') }}

{{ endpoint.method }} {{ endpoint.path }}
{{ endpoint.calls }} {{ t('calls_today') }}

{{ 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') }}

{{ t('valid') }}
123456
{{ t('validity_period') }}: 2024-11-06 ~ 08
{{ t('usage_count') }}: 2/5
{{ t('created_time') }}: 2024-11-06 10:00

Room-102

{{ t('permanent_password') }}

{{ t('valid') }}
987654
{{ t('validity_period') }}: {{ t('permanent') }}
{{ t('usage_count') }}: {{ t('unlimited') }}
{{ t('created_time') }}: 2024-01-15 08:00

{{ 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 }) }}

2024-11-06 10:30 Room-101

{{ t('tamper_alert_title') }}

{{ t('high') }}

{{ t('tamper_alert_msg', { device: 'Room-305' }) }}

2024-11-06 10:25 Room-305

{{ t('firmware_management') }}

F15 v1.3.0

{{ t('latest_version') }}

{{ t('released') }}
{{ t('file_size') }}: 512 KB
{{ t('release_time') }}: 2024-11-01
{{ t('applicable_devices') }}: 345{{ t('units') }}

{{ t('update_notes') }}:

  • {{ t('fix_bluetooth_issue') }}
  • {{ t('optimize_battery') }}
  • {{ t('improve_response') }}

F15 v1.2.5

{{ t('old_version') }}

{{ t('deprecated') }}
{{ t('file_size') }}: 498 KB
{{ t('release_time') }}: 2024-08-15
{{ t('devices_in_use') }}: 23{{ t('units') }}

{{ t('update_notes') }}:

  • {{ t('stable_baseline') }}

{{ t('ota_upgrade_tasks') }}

F15 {{ t('task_name') }}

{{ t('target_version') }}: v1.3.0

{{ t('executing') }}
{{ t('progress') }} 23/50 (46%)
{{ t('success') }}: 20 | {{ t('failed') }}: 3 | {{ t('executing') }}: 7 ETA: 15min

{{ t('workflow_builder') }}

{{ t('hotel_checkin_automation') }}

{{ t('template') }}

{{ t('hotel_checkin_desc') }}

{{ t('execution_count') }}: 1,234

{{ t('housekeeping_access') }}

{{ t('template') }}

{{ t('housekeeping_desc') }}

{{ t('execution_count') }}: 876

{{ t('low_battery_alert') }}

{{ t('template') }}

{{ t('low_battery_desc') }}

{{ t('execution_count') }}: 543

{{ t('my_workflows') }}

{{ t('visitor_auto_auth') }}

{{ t('visitor_workflow_desc') }}

{{ t('enabled_status') }}

{{ t('report_statistics') }}

{{ t('device_usage_frequency') }}

Room-101
456{{ t('times') }}
Room-102
378{{ t('times') }}
Room-201
302{{ t('times') }}

{{ t('unlock_method_distribution') }}

{{ t('bluetooth_unlock') }}
45%
{{ t('password_unlock') }}
35%
{{ t('remote_unlock') }}
15%
{{ t('fingerprint_nfc') }}
5%

{{ t('workflow_builder') }}

{{ t(workflow.nameKey) }}

{{ t(workflow.categoryKey) }}

{{ workflow.status === 'active' ? t('activated_status') : t('draft_status') }}

{{ t(workflow.descriptionKey) }}

{{ workflow.nodeCount }} {{ t('nodes') }} {{ workflow.updatedAt }}

{{ t(currentWorkflow.nameKey) }}

{{ t(currentWorkflow.descriptionKey) }}

{{ t('node_toolbox') }}

{{ t('drag_nodes_to_start') }}

{{ t(node.labelKey) }}

{{ node.type }}

{{ key }}: {{ value }}

{{ 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('data_access') }}: 12
{{ t('data_modification') }}: 8
{{ t('data_deletion') }}: 3
{{ t('privacy_setting_change') }}: 5

{{ t('cloud_storage_config') }}

{{ t('data_encryption') }}

{{ t('use_aes256') }}

{{ t('enable_cdn') }}

{{ t('use_cloudfront') }}

{{ t('storage_usage') }}

{{ t('used') }}: 248.5 GB
{{ t('available') }}: 751.5 GB
{{ t('total_storage') }}: 1 TB
{{ t('estimated_monthly_cost') }}: $45.80

{{ t('payment_config') }}

{{ t('payment_statistics') }}

{{ t('monthly_transactions') }}: 234
{{ t('total_revenue') }}: €12,450.00
{{ t('transaction_fees') }}: €186.75
{{ t('net_revenue') }}: €12,263.25

{{ 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') }}

{{ toast.message }}

{{ t('device_detail') }}

{{ t('basic_info') }}

{{ t('device_name') }}: {{ selectedDevice.name }}
{{ t('serial_number') }}: {{ selectedDevice.sn }}
{{ t('tenant') }}: {{ selectedDevice.tenant }}
{{ t('location') }}: {{ selectedDevice.location }}
{{ t('firmware_version') }}: {{ selectedDevice.firmwareVersion }}
{{ t('supplier') }}: {{ selectedDevice.supplier }}

{{ t('status_info') }}

{{ t('online_status') }}: {{ selectedDevice.status === 'online' ? t('online') : t('offline') }}
{{ t('battery') }}: {{ selectedDevice.battery }}%
{{ t('activated_at') }}: {{ selectedDevice.activatedAt }}
{{ t('last_active') }}: {{ selectedDevice.lastActive }}
{{ t('smart_home_ecosystem') }}:
Alexa Google Home Matter {{ t('not_connected') }}

{{ t('password_management_for', { name: selectedDevice.name }) }}

{{ t('created_passwords') }}

{{ t('no_passwords_yet') }}

{{ pwd.password }} {{ getPasswordTypeLabel(pwd.type) }}
有效期: {{ pwd.startTime }} ~ {{ pwd.endTime }}
使用次数: {{ pwd.usedCount }}/{{ pwd.maxUses }}
创建时间: {{ pwd.createdAt }}

{{ showModal === 'addDevice' ? t('add_device') : showModal === 'addTenant' ? t('add_tenant') : showModal === 'addUser' ? t('add_user') : showModal === 'addSupplier' ? t('add_supplier') : t('details') }}

{{ t('edit_reseller_info') }}

{{ t('inventory_activation_data') }}

{{ t('data_affects_reports') }}

{{ t('cumulative_devices') }}

{{ t('activation_rate_label') }}: {{ editingReseller.totalSupplied > 0 ? ((editingReseller.activated/editingReseller.totalSupplied)*100).toFixed(1) : 0 }}%

{{ t('online_rate_label') }}: {{ editingReseller.activated > 0 ? ((editingReseller.active/editingReseller.activated)*100).toFixed(1) : 0 }}%

{{ t('sales_data') }}

{{ t('ticket_statistics') }}

{{ t('warranty_statistics') }}

{{ t('regional_sales_data') }}

{{ t('regional_device_distribution') }}

{{ t('regional_distribution_ratio') }}

{{ t('north') }} {{ editingReseller.regions.north }} {{ t('units') }}
{{ t('south') }} {{ editingReseller.regions.south }} {{ t('units') }}
{{ t('east') }} {{ editingReseller.regions.east }} {{ t('units') }}
{{ t('west') }} {{ editingReseller.regions.west }} {{ t('units') }}