WiFi devices page OK

This commit is contained in:
Douglas Barone 2020-11-27 10:37:28 -04:00
parent 63126777cf
commit d2d6a3a28a
2 changed files with 139 additions and 29 deletions

View File

@ -51,6 +51,7 @@ async function updateDBWithOnlineDevices() {
},
update: {
...device,
hostname: device.hostname || device.mac,
user
}
})

View File

@ -4,12 +4,20 @@
:items="computedWifiDevices"
:items-per-page.sync="itemsPerPage"
:page="page"
:loading="$apollo.queries.wifiDevices.loading"
>
<template #header>
<v-toolbar flat>
Dispositivos Wi-Fi
<v-spacer />
<v-toolbar flat class="mb-2">
<v-text-field
v-model="search"
rounded
outlined
label="Buscar"
hint="MAC, IP, Usuário"
dense
/>
<v-btn
class="ml-2 mb-6"
:loading="$apollo.queries.wifiDevices.loading"
color="primary"
text
@ -20,25 +28,114 @@
</v-toolbar>
</template>
<template #default="{ items }">
<v-row>
<v-col
v-for="item in items"
:key="item.mac"
cols="12"
md="4"
class="grow"
>
<v-card>
<v-card-text>
<Avatar :src="item.user.thumbnailPhoto" />
<v-expansion-panels popout multiple>
<v-expansion-panel v-for="item in items" :key="item.mac">
<v-expansion-panel-header>
<div>
<v-icon left :color="item.isOnline ? 'green darken-1' : ''">
mdi-cellphone-wireless
</v-icon>
{{ item.hostname }} - {{ item.ip }}
</div>
</v-expansion-panel-header>
<v-expansion-panel-content>
<v-list dense>
<v-list-item v-if="item.status === 'ONLINE'">
<v-list-item-action>
<v-icon color="green darken-1">mdi-wifi</v-icon>
</v-list-item-action>
<v-list-item-content>
<v-list-item-title>
{{ item.essid }} (próximo ao AP {{ item.apName }})
</v-list-item-title>
<v-list-item-subtitle> SSID </v-list-item-subtitle>
</v-list-item-content>
</v-list-item>
<v-list-item v-else>
<v-list-item-action>
<v-icon>mdi-wifi-off</v-icon>
</v-list-item-action>
<v-list-item-content>
<v-list-item-title>
{{ item.essid }} (próximo ao AP {{ item.apName }})
</v-list-item-title>
<v-list-item-subtitle>
Dispositivo off-line
</v-list-item-subtitle>
</v-list-item-content>
</v-list-item>
<v-list-item>
<v-list-item-action>
<v-icon>mdi-ip-network</v-icon>
</v-list-item-action>
<v-list-item-content>
<v-list-item-title>
{{ item.ip }}
</v-list-item-title>
<v-list-item-subtitle>
Último endereço IP conhecido
</v-list-item-subtitle>
</v-list-item-content>
</v-list-item>
<v-list-item>
<v-list-item-action>
<v-icon>mdi-expansion-card-variant</v-icon>
</v-list-item-action>
<v-list-item-content>
<v-list-item-title>
{{ item.mac }}
</v-card-text>
</v-card>
</v-col>
</v-row>
</v-list-item-title>
<v-list-item-subtitle>
{{ item.oui }}
</v-list-item-subtitle>
</v-list-item-content>
</v-list-item>
<v-list-item>
<v-list-item-action>
<v-icon>mdi-eye</v-icon>
</v-list-item-action>
<v-list-item-content>
<v-list-item-title>
{{ item.lastSeen | dateAndTime }}
</v-list-item-title>
<v-list-item-subtitle>
Visto pela última vez
</v-list-item-subtitle>
</v-list-item-content>
</v-list-item>
<v-list-item>
<v-list-item-action>
<v-icon>mdi-check-decagram</v-icon>
</v-list-item-action>
<v-list-item-content>
<v-list-item-title>
{{ item.firstSeen | dateAndTime }}
</v-list-item-title>
<v-list-item-subtitle>
Visto pela primeira vez
</v-list-item-subtitle>
</v-list-item-content>
</v-list-item>
<v-list-item>
<v-list-item-action>
<Avatar :src="item.user.thumbnailPhoto" size="24px" />
</v-list-item-action>
<v-list-item-content>
<v-list-item-title>
{{ item.user.displayName }}
</v-list-item-title>
<v-list-item-subtitle>
{{ item.user.sAMAccountName }}
</v-list-item-subtitle>
</v-list-item-content>
</v-list-item>
</v-list>
</v-expansion-panel-content>
</v-expansion-panel>
</v-expansion-panels>
</template>
<template #footer> Footer </template>
</v-data-iterator>
</v-container>
</template>
@ -51,6 +148,7 @@ export default {
name: 'WifiDevices',
components: { Avatar },
data: () => ({
search: '',
itemsPerPage: 24,
itemsPerPageArray: [15, 30, 60, 120],
page: 1
@ -84,15 +182,26 @@ export default {
},
computed: {
computedWifiDevices() {
return this.wifiDevices?.map(device => ({
const filter = this.search.toLowerCase()
return this.wifiDevices
?.map(device => ({
...device,
hostname: device.hostname || 'Desconhecido',
isOnline: device.status == 'ONLINE',
user: device.user || {
displayName: 'Não identificado',
displayName: 'Não autenticado',
sAMAccountName: null,
thumbnailPhoto: null
}
}))
.filter(
({ ip, mac, user }) =>
ip.includes(filter) ||
mac.includes(filter) ||
user.displayName.toLowerCase().includes(filter) ||
user.sAMAccountName?.includes(filter)
)
}
}
}