const deviceManufacturerFilterOptions = window?.TT_CONFIG?.DEVICE_MANUFACTURERS.map(manufacturer => ({
value: manufacturer.name,
text: manufacturer.name,
}));
const deviceTypeFilterOptions = window?.TT_CONFIG?.DEVICE_TYPES.map(type => ({
value: type.name,
text: type.name,
}));
Vue.component('device-view-switch', {
//language=Vue
template: `
`,
props: ['value'],
data() {
return {
window: window,
isOverflowing: false,
showDropdown: false,
};
},
mounted() {
this.checkOverflow();
window.addEventListener('resize', this.checkOverflow);
},
beforeDestroy() {
window.removeEventListener('resize', this.checkOverflow);
},
methods: {
checkOverflow() {
this.isOverflowing = window.innerWidth < 650
},
},
})
Vue.component('DeviceTable', {
//language=Vue
template: `
{{row.name}}
{{row.locationText}}
{{row.locationText}}
`,
data() {
return {
window: window,
DeviceTableConfig: {
key: 'DeviceTable',
tableHeader: 'Device-Liste',
defaultPageSize: 25,
headers: [],
},
}
},
mounted() {
this.DeviceTableConfig.headers = [
{text: 'Device Name', key: 'name', sortable: true, class: 'text-nowrap', priority: 10},
{text: 'Hersteller', key: 'devicemanufactor', filter: 'select', class: 'text-nowrap text-center', filterOptions: deviceManufacturerFilterOptions},
{text: 'Geräte Typ', key: 'devicetype', filter: 'select', class: 'text-nowrap text-center', filterOptions: deviceTypeFilterOptions, priority: 7},
{text: 'Pop/Adresse', key: 'locationText', filter: 'search', class: 'text-nowrap text-center'},
{text: 'IP-Adresse', key: 'ip', filter: 'search', class: 'text-center', priority: 8},
{text: 'Mac-Adresse', key: 'mac', filter: 'search', class: 'text-center'},
{text: 'Seriennummer', key: 'serial', filter: 'search', class: 'text-center'},
];
if (this.window.TT_CONFIG['IS_ADMIN'] === '1') {
this.DeviceTableConfig.headers = [
...this.DeviceTableConfig.headers,
{text: 'Preis', key: 'price', filter: 'numberRange', class: 'text-center', suffix: ' €'},
{text: 'max. Leistung', key: 'power', filter: 'numberRange', class: 'text-center', suffix: ' W'},
{
text: 'Backup',
key: 'backup',
filter: 'iconSelect',
filterOptions: [
{value: 'ok', text: 'Configbackup aktuell', icon: 'fa-regular fa-circle-check text-success'},
{value: 'auto', text: 'Configbackup aktuell', icon: 'fa-regular fa-circle-a text-success'},
{value: 'aged', text: 'Letztes Configbackup älter als 48 Stunden', icon: 'fa-regular fa-circle-xmark'},
{value: 'na', text: 'N/A', icon: 'fa-regular fa-ban text-warning'}
],
priority: 6,
sortable: false,
}, {
text: 'Status',
key: 'zabbix_online',
filter: 'iconSelect',
filterOptions: [
{value: 0, text: 'Status unbekannt', icon: 'fa-regular fa-circle-xmark'},
{value: 1, text: 'Offline', icon: 'fa-regular fa-circle-xmark text-danger'},
{value: 2, text: 'Online', icon: 'fa-regular fa-circle-check text-success'},
],
priority: 5,
sortable: false,
},
{text: 'Aktionen', key: 'actions', class: 'text-center', sortable: false, filter: false, priority: 9},
]
}
}
});
Vue.component('DeviceManufacturer', {
//language=Vue
template: `
`,
data() {
return {
window: window,
DeviceManufacturerConfig: {
key: 'DeviceManufacturer',
tableHeader: 'Hersteller',
defaultPageSize: 25,
headers: [
{text: 'Name', key: 'name', sortable: true, class: 'text-nowrap', priority: 10},
{text: 'Erstellungsdatum', key: 'created', filter: 'date', class: 'text-center'},
{text: 'Erstellt von', key: 'creator', filter: 'search', class: 'text-center'},
{text: 'Aktionen', key: 'actions', class: 'text-center', sortable: false, filter: false, priority: 9},
],
},
}
}
});
Vue.component('DeviceType', {
//language=Vue
template: `
`,
data() {
return {
window: window,
DeviceTypeConfig: {
key: 'DeviceType',
tableHeader: 'Gerätetypen',
defaultPageSize: 25,
headers: [
{text: 'Name', key: 'name', sortable: true, class: 'text-nowrap', priority: 10},
{text: 'Hersteller', key: 'manufacturer', filter: 'search', class: 'text-center'},
{text: 'Preis', key: 'price', filter: 'numberRange', class: 'text-center', suffix: ' €'},
{text: 'max. Leistung', key: 'power', filter: 'numberRange', class: 'text-center', suffix: ' W'},
{text: 'Erstellungsdatum', key: 'created', filter: 'date', class: 'text-center'},
{text: 'Erstellt von', key: 'creator', filter: 'search', class: 'text-center'},
{text: 'Aktionen', key: 'actions', class: 'text-center', sortable: false, filter: false, priority: 9},
],
},
}
}
})
Vue.component('Device', {
//language=Vue
template: `
`,
data() {
return {
window: window,
currentView: 'DeviceTable',
};
},
beforeMount() {
const storedView = window.localStorage.getItem('tt-device-view');
if (storedView) {
this.currentView = storedView;
}
},
watch: {
currentView() {
window.localStorage.setItem('tt-device-view', this.currentView);
}
},
});