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.
35 lines
1.0 KiB
JavaScript
35 lines
1.0 KiB
JavaScript
/**
|
|
* Warranty plugin routes
|
|
*/
|
|
export default [
|
|
{
|
|
path: 'settings/dellwarranty',
|
|
name: 'dell-warranty-settings',
|
|
component: () => import('./views/DellWarrantySettings.vue'),
|
|
meta: { requiresAuth: true, requiresAdmin: true, plugin: 'warranty' }
|
|
},
|
|
{
|
|
path: 'settings/integrations/dell',
|
|
name: 'integrations-dell',
|
|
component: () => import('./views/DellWarrantySettings.vue'),
|
|
meta: { requiresAuth: true, requiresAdmin: true, plugin: 'warranty' }
|
|
},
|
|
{
|
|
path: 'warranties',
|
|
name: 'warranties',
|
|
component: () => import('./views/WarrantiesList.vue'),
|
|
meta: { plugin: 'warranty' }
|
|
},
|
|
{
|
|
path: 'reports/warranty',
|
|
name: 'warranty-report',
|
|
component: () => import('./views/WarrantyReport.vue'),
|
|
meta: { plugin: 'warranty', title: 'Warranty Report' }
|
|
}
|
|
]
|
|
|
|
// No full-screen routes: every view in this plugin renders inside
|
|
// AppLayout. Declared so routes.gen.js can read `.toplevel` off the module
|
|
// without Rollup warning about a missing export.
|
|
export const toplevel = []
|