{{ t('deviceList') }} ({{total}})
SN BCU PCS {{ t('ioServer') }} {{ t('serialServer') }} {{ t('stationCode') }} {{ t('port') }} {{ t('actions') }}
{{d.sn}} {{d.bcu_ip}} {{d.pcs_ip}} {{d.io_server_ip}} {{d.serial_server_ip}} {{d.station_code}} {{d.port}}
{{ t('snQueryTitle') }}
{{snQueryError}}
SN Station Code BCU IP PCS IP {{ t('ioServerIP') }} {{ t('serialServerIP') }} {{ t('status') }}
{{r.sn}} {{r.station_code || '—'}} {{r.bcu_ip || '—'}} {{r.pcs_ip || '—'}} {{r.io_server_ip || '—'}} {{r.serial_server_ip || '—'}} — {{ t('probing') }} 🟢 {{ t('online') }} 🔴 {{ t('offline') }}
{{ t('noMatchDevice') }}
📁 {{ t('subLocalTemplates') }}
🔌 {{ t('subIOConfigs') }}
🏢 {{ t('subProductModels') }}
🗂 {{ t('subManagedDirs') }}
{{ t('managedDirMgmt') }}
{{dirLog}}
{{ t('dirPath') }} {{ t('fileCount') }} {{ t('fileSize') }} {{ t('dirFiles') }} {{ t('actions') }}
{{d.rel}} {{d.file_count}} {{ (d.total_size/1024).toFixed(1) }} KB {{ (d.files||[]).join(', ') || '—' }}
{{ t('noManagedDirs') }}
{{ t('productModelMgmt') }}
{{ t('modelName') }} {{ t('defaultProtocolMap') }} {{ t('actions') }}
{{m.model_name}} {{JSON.stringify(m.default_protocols, null, 2)}}
{{ t('noProductModels') }}
{{ t('localTplList') }} ({{localTemplates.length}})
{{ t('folderName') }} {{ t('templateName') }} {{ t('category') }} {{ t('deviceType') }} {{ t('protocol') }} {{ t('csvFiles') }} {{ t('syncStatus') }} {{ t('actions') }}
{{lt.folder_name}} {{lt.template_name}} {{ t('builtin') }} {{ t('custom') }} {{lt.device_type}} {{lt.protocol}} {{csv}}.csv {{ t('calcPoints') }} {{ t('synced') }} {{ t('modified') }} {{ t('notSynced') }} {{ t('unknown') }}
{{ t('noLocalTpls') }}
{{ t('ioConfigList') }} ({{ioConfigs.length}})
{{ t('folder') }} {{ t('templateName') }} {{ t('description') }} {{ t('protocol') }} {{ t('moduleCount') }} {{ t('wiringDiagram') }} {{ t('syncStatus') }} {{ t('actions') }}
{{cfg.folder_name}} {{cfg.template_name}} {{cfg.description || '—'}} {{cfg.protocol}} {{cfg.module_count}} {{ t('primaryDiagram') }} {{ t('secondaryDiagram') }} — {{ t('synced') }} {{ t('modified') }} {{ t('notSynced') }} {{ t('unknown') }}
{{ t('noIOConfigs') }}
{{ t('firmwareMgmt') }}
{{firmwareLog}}
{{ t('status') }} {{ t('versionLabel') }} {{ t('buildDate') }} {{ t('physicalFilename') }} {{ t('packageSize') }} {{ t('changelogLabel') }} {{ t('uploadTime') }} {{ t('actions') }}
{{ t('activeNow') }} {{ t('historyVersion') }}
{{fw.version}}
FE: {{fw.frontend_version || '—'}}
BE: {{fw.backend_version || '—'}}
{{fw.build_date || '—'}} {{fw.filename}} {{fw.size_mb}} MB {{fw.changelog || '—'}} {{new Date(fw.uploaded_at).toLocaleString()}}
{{ t('noFirmware') }}
{{ t('toolMgmt') }}
{{toolUpgradeLog}}
{{ t('status') }} {{ t('version') }} {{ t('filename') }} {{ t('fileSize') }} {{ t('releaseDate') }} {{ t('changelog') }} {{ t('actions') }}
{{ t('activeNow') }} {{ t('historyVersion') }} {{tv.version}} {{tv.filename}} {{tv.size_mb}} MB {{tv.release_date || '—'}} {{tv.changelog || '—'}}
{{ t('noToolVersions') }}
{{ t('installerMgmt') }}
{{installerLog}}
{{ t('version') }} {{ t('filename') }} {{ t('fileSize') }} {{ t('releaseDate') }} {{ t('actions') }}
{{it.version}} {{ t('latestBadge') }} {{it.filename}} {{it.size_mb}} MB {{it.release_date || '—'}} ⬇️ {{ t('downloadBtn') }}
{{ t('noInstallers') }}
{{ t('importTitle') }}
💡 {{ t('importGuide') }}
  • {{ t('importGuide1') }}
  • {{ t('requiredCol') }}{{ t('importGuide2') }}
  • {{ t('otherCol') }}{{ t('importGuide3') }}
  • {{ t('importGuide4') }}
{{ t('uploadZoneText') }}
{{log}}
{{ t('configMgmt') }}
SN {{ t('stationName') }} {{ t('productModel') }} {{ t('filename') }} {{ t('fileSize') }} {{ t('uploadTime') }} {{ t('actions') }}
{{c.sn}} {{c.station_name || '—'}} {{c.product_model || '—'}} {{c.filename}} {{formatFileSize(c.file_size)}} {{c.uploaded_at}}
{{ t('noConfigs') }}
{{ t('userMgmt') }} ({{users.length}})
ID {{ t('username') }} {{ t('role') }} {{ t('actions') }}
{{u.id}} {{u.username}} {{u.role}}
{{ t('changePwdTitle') }}
❓ {{ t('navHelp') }}
↗ {{ t('helpOpenNewTab') }}
{{ t('securityMgmt') }}
{{ t('newTokenHint') }}
{{newlyGeneratedToken}}
{{ t('token') }} {{ t('type') }} {{ t('status') }} {{ t('usedByDevice') }} {{ t('applicant') }} {{ t('createdAt') }} {{ t('expiresAt') }} {{ t('note') }} {{ t('actions') }}
{{tok.token}} {{tok.token_type === 'onetime' ? t('onetime') : t('timed')}} {{tok.status === 'active' ? t('statusActive') : tok.status === 'used' ? t('statusUsed') : t('statusExpired')}} {{tok.used_by_sn || '—'}} {{tok.created_by || '—'}} {{formatTime(tok.created_at)}} {{tok.expires_at ? formatTime(tok.expires_at) : '—'}} {{tok.note || '—'}}
{{ t('noTokens') }}