Added WifiDevicesTable

This commit is contained in:
Douglas Barone 2022-05-02 15:41:46 -04:00
parent 15be4acd27
commit d648178f89
2 changed files with 107 additions and 130 deletions

View File

@ -0,0 +1,102 @@
<template>
<div>
<v-text-field
v-model="search"
prepend-icon="mdi-magnify"
placeholder="Pesquisar"
clearable
/>
<v-data-table
:items="wifiDevices"
:headers="headers"
:search="search"
calculate-widths
>
<template #[`item.status`]="{ item }">
<v-chip v-if="item.status == 'ONLINE'" color="green" dark small>
Online
</v-chip>
<v-chip v-else color="grey" small dark>Offline</v-chip>
</template>
<template #[`item.ip`]="{ item }">
<code> {{ item.ip }}</code>
</template>
<template #[`item.mac`]="{ item }">
<code> {{ item.mac }}</code>
</template>
<template #[`item.firstSeen`]="{ item }">
{{ item.firstSeen | shortDate }}
</template>
<template #[`item.lastSeen`]="{ item }">
{{ item.lastSeen | shortDate }}
</template>
<template #[`item.apName`]="{ item }">
<router-link
class="text-decoration-none"
:to="{
name: 'access-point-clients',
params: { id: item.accessPoint.id }
}"
>
{{ item.apName }}
</router-link>
</template>
<template #[`item.uptime`]="{ item }">
<span v-if="item.uptime > 0">
<small>
{{ item.uptime | durationFromSeconds }}
</small>
</span>
<span v-else><small> Off-line </small> </span>
</template>
<template #[`item.controller`]="{ item }">
<ApIcon :controller="item.controller" />
</template>
<template #[`item.local`]="{ item }">
{{ item.accessPoint.local }}
</template>
</v-data-table>
</div>
</template>
<script>
import ApIcon from '@/components/ApIcon.vue'
export default {
components: { ApIcon },
props: {
wifiDevices: {
type: Array,
required: true
}
},
data: () => ({
search: '',
headers: [
{ text: 'Hostname', value: 'hostname' },
{ text: 'IP', value: 'ip' },
{ text: 'MAC', value: 'mac' },
{ text: 'Status', value: 'status' },
{ text: 'ESSID', value: 'essid' },
{ text: 'Controladora', value: 'controller' },
{ text: 'Uptime', value: 'uptime' },
{ text: 'Marca', value: 'oui' },
{ text: 'Primeira aparição', value: 'firstSeen' },
{ text: 'Última aparição', value: 'lastSeen' },
{ text: 'AccessPoint', value: 'apName' },
{ text: 'Local', value: 'local' }
]
}),
computed: {
items() {
return this.wifiDevices.map(device => ({
...device.accessPoint,
...device,
accessPointId: device.accessPoint.id
}))
}
}
}
</script>
<style></style>

View File

@ -91,134 +91,7 @@
</v-expansion-panel-header> </v-expansion-panel-header>
<v-expansion-panel-content> <v-expansion-panel-content>
<v-expansion-panels accordion> <v-expansion-panels accordion>
<v-expansion-panel <wifi-devices-table :wifi-devices="user.wifiDevices" />
v-for="device in user.wifiDevices"
:key="device.mac"
>
<v-expansion-panel-header>
<div>
<v-icon
v-if="device.status == 'ONLINE'"
left
color="green"
>
mdi-cellphone-wireless
</v-icon>
<v-icon v-else left> mdi-cellphone </v-icon>
{{ device.hostname || device.mac }} {{ device.oui }}
</div>
</v-expansion-panel-header>
<v-expansion-panel-content>
<v-list dense>
<v-list-item v-if="device.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>
{{ device.essid }}
</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>
{{ device.essid }}
</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-access-point</v-icon>
</v-list-item-action>
<v-list-item-content>
<v-list-item-title>
{{ device.apName }}
</v-list-item-title>
<v-list-item-subtitle>
Access Point ({{ device.controller }})
</v-list-item-subtitle>
</v-list-item-content>
</v-list-item>
<v-list-item
v-if="device.accessPoint && device.accessPoint.local"
>
<v-list-item-action>
<v-icon>mdi-map-marker-radius</v-icon>
</v-list-item-action>
<v-list-item-content>
<v-list-item-title>
{{ device.accessPoint.local }}
</v-list-item-title>
<v-list-item-subtitle>
Localização do AP
</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>
{{ device.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>
{{ device.mac }}
</v-list-item-title>
<v-list-item-subtitle>
{{ device.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>
{{ device.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>
{{ device.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></v-expansion-panel-content
>
</v-expansion-panel>
</v-expansion-panels> </v-expansion-panels>
</v-expansion-panel-content> </v-expansion-panel-content>
</v-expansion-panel> </v-expansion-panel>
@ -233,10 +106,10 @@
<script> <script>
import gql from 'graphql-tag' import gql from 'graphql-tag'
import Avatar from '../components/Avatar.vue' import Avatar from '../components/Avatar.vue'
import WifiDevicesTable from '../components/WifiDevicesTable.vue'
export default { export default {
components: { Avatar }, components: { Avatar, WifiDevicesTable },
data: () => ({ data: () => ({
search: '' search: ''
}), }),
@ -279,7 +152,9 @@ export default {
apName apName
essid essid
ip ip
uptime
accessPoint { accessPoint {
id
name name
hostname hostname
local local