Settings Consolidation (37+ pages to 8 hubs): - Asset Type Hub: Unified type management with plugin descriptors - Model Catalog Hub: Vendors, types, models, operating systems - Asset Configuration Hub: Statuses, relationships, fields, identifiers - Security Hub: Authentication, tokens, users, audit - Site Configuration Hub: Site settings, floor map, branding, imports - Integrations Hub: ServiceNow, Zabbix, Dell warranty - Locations Hub: Locations, business units, employees - Network Infrastructure Hub: VLANs, subnets Plugin Descriptor Pattern: - Add get_asset_type_descriptor hook to BasePlugin - Implement descriptors in 6 plugins (printers, computers, machines, network, measuringtools, locations) - Add /api/pluginui/asset-type-descriptors and core-type-descriptors endpoints - Generic SubtypesTab component renders CRUD UI from descriptor schema Security Fixes: - Fix stored XSS via javascript: URIs in Models and Support Teams - Add URL scheme validation (allow only http/https) in create/update endpoints - Fix plugin contract violations in endpoints plugin (use shopdb.api imports) - Add missing requiresAdmin guard to printer model supplies route - Add user-facing error messages to API token load failures Integration Improvements: - Add persistent tab navigation to ServiceNow, Zabbix, and Dell Warranty settings - Standardize integration settings UI across all three pages - Fix tab visibility when navigating between integrations Tested with 94-agent orchestrated review for ADR compliance and security.
103 lines
3.0 KiB
JavaScript
103 lines
3.0 KiB
JavaScript
/**
|
|
* Printers plugin routes
|
|
*/
|
|
export default [
|
|
{
|
|
path: 'reports/toner',
|
|
name: 'toner-report',
|
|
component: () => import('./views/TonerReport.vue'),
|
|
meta: { plugin: 'printers', title: 'Toner Report' }
|
|
},
|
|
{
|
|
path: 'reports/toner-forecast',
|
|
name: 'toner-forecast',
|
|
component: () => import('./views/TonerForecast.vue'),
|
|
meta: { plugin: 'printers', title: 'Toner Forecast' }
|
|
},
|
|
{
|
|
path: 'settings/printertypes',
|
|
name: 'printer-types',
|
|
component: () => import('./views/PrinterTypesList.vue'),
|
|
meta: { requiresAuth: true, requiresAdmin: true, plugin: 'printers' }
|
|
},
|
|
{
|
|
path: 'settings/zabbix',
|
|
name: 'zabbix-settings',
|
|
component: () => import('./views/ZabbixSettings.vue'),
|
|
meta: { requiresAuth: true, requiresAdmin: true, plugin: 'printers' }
|
|
},
|
|
{
|
|
path: 'settings/integrations/zabbix',
|
|
name: 'integrations-zabbix',
|
|
component: () => import('./views/ZabbixSettings.vue'),
|
|
meta: { requiresAuth: true, requiresAdmin: true, plugin: 'printers' }
|
|
},
|
|
{
|
|
path: 'settings/printer-alerts',
|
|
name: 'printer-alerts',
|
|
component: () => import('./views/PrinterAlertsSettings.vue'),
|
|
meta: { requiresAuth: true, requiresAdmin: true, plugin: 'printers' }
|
|
},
|
|
{
|
|
path: 'printers',
|
|
name: 'printers',
|
|
component: () => import('./views/PrintersList.vue'),
|
|
meta: { plugin: 'printers' }
|
|
},
|
|
{
|
|
path: 'printers/new',
|
|
name: 'printer-new',
|
|
component: () => import('./views/PrinterForm.vue'),
|
|
meta: { requiresAuth: true, plugin: 'printers' }
|
|
},
|
|
{
|
|
path: 'printers/:id',
|
|
name: 'printer-detail',
|
|
component: () => import('./views/PrinterDetail.vue'),
|
|
meta: { plugin: 'printers' }
|
|
},
|
|
{
|
|
path: 'printers/:id/edit',
|
|
name: 'printer-edit',
|
|
component: () => import('./views/PrinterForm.vue'),
|
|
meta: { requiresAuth: true, plugin: 'printers' }
|
|
},
|
|
// printer-specific settings
|
|
{
|
|
path: 'settings/modelsupplies',
|
|
name: 'model-supplies',
|
|
component: () => import('./views/ModelSuppliesList.vue'),
|
|
meta: { requiresAuth: true, requiresAdmin: true, plugin: 'printers' }
|
|
},
|
|
{
|
|
path: 'settings/printerdrivers',
|
|
name: 'printer-drivers',
|
|
component: () => import('./views/PrinterDriversList.vue'),
|
|
meta: { requiresAuth: true, requiresAdmin: true, plugin: 'printers' }
|
|
}
|
|
]
|
|
|
|
export const toplevel = [
|
|
{
|
|
path: '/printer-installer',
|
|
name: 'printer-installer-map',
|
|
component: () => import('./views/PrinterInstallerMap.vue'),
|
|
// Public: it only reads the public install-list + downloads the install
|
|
// .bat (both jwt-optional endpoints), so no login needed - same as the
|
|
// other display/kiosk tools.
|
|
meta: { plugin: 'printers' }
|
|
},
|
|
{
|
|
path: '/print/printer-qr',
|
|
name: 'print-printer-qr-batch',
|
|
component: () => import('./views/PrinterQRBatch.vue'),
|
|
meta: { plugin: 'printers' }
|
|
},
|
|
{
|
|
path: '/print/printer-qr/:id',
|
|
name: 'print-printer-qr-single',
|
|
component: () => import('./views/PrinterQRSingle.vue'),
|
|
meta: { plugin: 'printers' }
|
|
}
|
|
]
|