Better filtering
This commit is contained in:
parent
cf76272456
commit
61825de579
4
server/package-lock.json
generated
4
server/package-lock.json
generated
|
@ -1,12 +1,12 @@
|
||||||
{
|
{
|
||||||
"name": "ifms-pti-svr",
|
"name": "ifms-pti-svr",
|
||||||
"version": "2.12.4",
|
"version": "2.12.5",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "ifms-pti-svr",
|
"name": "ifms-pti-svr",
|
||||||
"version": "2.12.4",
|
"version": "2.12.5",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@prisma/client": "^3.11.0",
|
"@prisma/client": "^3.11.0",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "ifms-pti-svr",
|
"name": "ifms-pti-svr",
|
||||||
"version": "2.12.4",
|
"version": "2.12.5",
|
||||||
"description": "Servidor do Portal de TI do IFMS",
|
"description": "Servidor do Portal de TI do IFMS",
|
||||||
"main": "src/index.js",
|
"main": "src/index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import prisma from '../../prisma'
|
import prisma from '../../prisma'
|
||||||
|
|
||||||
export async function wifiDevices(_, { take = 100, skip = 0, search }) {
|
export async function wifiDevices(parent, { take = 100, skip = 0, search }) {
|
||||||
const mode = 'insensitive'
|
const mode = 'insensitive'
|
||||||
|
|
||||||
if (search === null)
|
if (search === null)
|
||||||
|
|
|
@ -1,15 +1,44 @@
|
||||||
import prisma from '../../prisma'
|
import prisma from '../../prisma'
|
||||||
|
|
||||||
// TODO: Add filtering
|
// TODO: Add filtering
|
||||||
export async function wifiUsers() {
|
export async function wifiUsers(parent, { take = 100, skip = 0, search }) {
|
||||||
const wifiUsers = await prisma.user.findMany({
|
const mode = 'insensitive'
|
||||||
where: { wifiDevices: { some: { id: { not: undefined } } } },
|
|
||||||
include: { wifiDevices: true }
|
|
||||||
})
|
|
||||||
|
|
||||||
return wifiUsers.sort(
|
if (search === null)
|
||||||
(a, b) =>
|
search = undefined
|
||||||
b.wifiDevices.filter(device => device.status == 'ONLINE').length -
|
|
||||||
a.wifiDevices.filter(device => device.status == 'ONLINE').length
|
return prisma.user.findMany({
|
||||||
)
|
where: {
|
||||||
|
AND: [
|
||||||
|
{ wifiDevices: { some: { id: { not: undefined } } } },
|
||||||
|
{
|
||||||
|
OR: [
|
||||||
|
{ wifiDevices: { some: { hostname: { contains: search, mode } } } },
|
||||||
|
{
|
||||||
|
wifiDevices: {
|
||||||
|
some: {
|
||||||
|
accessPoint: {
|
||||||
|
OR: [
|
||||||
|
{ name: { contains: search, mode } },
|
||||||
|
{ local: { contains: search, mode } },
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ wifiDevices: { some: { mac: { contains: search, mode } } } },
|
||||||
|
{ wifiDevices: { some: { ip: { contains: search, mode } } } },
|
||||||
|
{ displayName: { contains: search, mode } }, ,
|
||||||
|
{ sAMAccountName: { contains: search, mode } },
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
include: { wifiDevices: true },
|
||||||
|
orderBy: [
|
||||||
|
{ wifiDevices: { _count: 'desc' } },
|
||||||
|
{ displayName: 'asc' }],
|
||||||
|
take,
|
||||||
|
skip
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,7 +41,10 @@ const typeDefs = gql`
|
||||||
): [WifiDevice]! @auth(roles: ["superAdmin"])
|
): [WifiDevice]! @auth(roles: ["superAdmin"])
|
||||||
|
|
||||||
"Users that uses the Wi-Fi"
|
"Users that uses the Wi-Fi"
|
||||||
wifiUsers: [User]! @auth(roles: ["superAdmin"])
|
wifiUsers(
|
||||||
|
search: String = ""
|
||||||
|
take: Int
|
||||||
|
skip: Int): [User]! @auth(roles: ["superAdmin"])
|
||||||
|
|
||||||
"Application Logs"
|
"Application Logs"
|
||||||
logs(
|
logs(
|
||||||
|
|
4
web/package-lock.json
generated
4
web/package-lock.json
generated
|
@ -1,12 +1,12 @@
|
||||||
{
|
{
|
||||||
"name": "ifms-pti",
|
"name": "ifms-pti",
|
||||||
"version": "2.12.4",
|
"version": "2.12.5",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "ifms-pti",
|
"name": "ifms-pti",
|
||||||
"version": "2.12.4",
|
"version": "2.12.5",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@mdi/font": "^6.6.96",
|
"@mdi/font": "^6.6.96",
|
||||||
"apollo-link-ws": "^1.0.20",
|
"apollo-link-ws": "^1.0.20",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "ifms-pti",
|
"name": "ifms-pti",
|
||||||
"version": "2.12.4",
|
"version": "2.12.5",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"serve": "vue-cli-service serve",
|
"serve": "vue-cli-service serve",
|
||||||
|
|
|
@ -59,18 +59,18 @@ export default {
|
||||||
route: { name: 'wifi-devices' },
|
route: { name: 'wifi-devices' },
|
||||||
role: 'superAdmin'
|
role: 'superAdmin'
|
||||||
},
|
},
|
||||||
{
|
|
||||||
title: 'Access Points',
|
|
||||||
icon: 'mdi-access-point',
|
|
||||||
route: { name: 'access-points' },
|
|
||||||
role: 'superAdmin'
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
title: 'Usuários Wi-Fi',
|
title: 'Usuários Wi-Fi',
|
||||||
icon: 'mdi-account-voice',
|
icon: 'mdi-account-voice',
|
||||||
route: { name: 'wifi-users' },
|
route: { name: 'wifi-users' },
|
||||||
role: 'superAdmin'
|
role: 'superAdmin'
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title: 'Access Points',
|
||||||
|
icon: 'mdi-access-point',
|
||||||
|
route: { name: 'access-points' },
|
||||||
|
role: 'superAdmin'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
title: 'Inspecionar Usuário',
|
title: 'Inspecionar Usuário',
|
||||||
icon: 'mdi-account-search',
|
icon: 'mdi-account-search',
|
||||||
|
|
|
@ -1,16 +1,12 @@
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<v-container fluid>
|
||||||
<v-toolbar height="115" class="align-content-center bottom-border" flat>
|
<v-toolbar class="mb-2" flat outlined>
|
||||||
<v-text-field
|
<v-text-field
|
||||||
v-model="search"
|
v-model="search"
|
||||||
class="mt-6 search"
|
|
||||||
label="Pesquisar"
|
label="Pesquisar"
|
||||||
hint="MAC/IP/Usuário"
|
prepend-inner-icon="mdi-account-search"
|
||||||
prepend-icon="mdi-magnify"
|
|
||||||
clearable
|
clearable
|
||||||
outlined
|
hide-details
|
||||||
rounded
|
|
||||||
style="max-width: 512px"
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<v-tooltip bottom>
|
<v-tooltip bottom>
|
||||||
|
@ -29,171 +25,172 @@
|
||||||
</template>
|
</template>
|
||||||
</v-tooltip>
|
</v-tooltip>
|
||||||
</v-toolbar>
|
</v-toolbar>
|
||||||
<v-container fluid>
|
<div v-if="wifiDevices && stats" class="text-center my-4">
|
||||||
<div v-if="wifiDevices && stats" class="text-center my-4">
|
<v-chip color="primary" class="mr-1" dark>
|
||||||
<v-chip color="primary" class="mr-1" dark>
|
{{ stats.onlineWifiDevices }}
|
||||||
{{ stats.onlineWifiDevices }}
|
</v-chip>
|
||||||
</v-chip>
|
online de
|
||||||
online de
|
<v-chip class="mx-1">
|
||||||
<v-chip class="mx-1">
|
{{ stats.totalWifiDevices }}
|
||||||
{{ stats.totalWifiDevices }}
|
</v-chip>
|
||||||
</v-chip>
|
no total.
|
||||||
no total.
|
</div>
|
||||||
</div>
|
<v-data-iterator
|
||||||
<v-data-iterator
|
:items="computedWifiDevices"
|
||||||
:items="computedWifiDevices"
|
:items-per-page.sync="itemsPerPage"
|
||||||
:items-per-page.sync="itemsPerPage"
|
:page="page"
|
||||||
:page="page"
|
:loading="$apollo.queries.wifiDevices.loading"
|
||||||
:loading="$apollo.queries.wifiDevices.loading"
|
>
|
||||||
>
|
<template #default="{ items }">
|
||||||
<template #default="{ items }">
|
<v-expansion-panels multiple>
|
||||||
<v-expansion-panels multiple>
|
<v-expansion-panel v-for="device in items" :key="device.mac">
|
||||||
<v-expansion-panel v-for="device in items" :key="device.mac">
|
<v-expansion-panel-header>
|
||||||
<v-expansion-panel-header>
|
<v-row dense align-content="center" no-gutters>
|
||||||
<v-row dense align-content="center" no-gutters>
|
<v-col class="shrink" align-self="center">
|
||||||
<v-col class="shrink" align-self="center">
|
<v-badge
|
||||||
<v-badge
|
:color="device.status == 'ONLINE' ? 'green' : 'grey'"
|
||||||
:color="device.status == 'ONLINE' ? 'green' : 'grey'"
|
left
|
||||||
left
|
offset-y="16"
|
||||||
offset-y="16"
|
dot
|
||||||
dot
|
|
||||||
>
|
|
||||||
<ap-icon class="mr-4" :controller="device.controller" />
|
|
||||||
</v-badge>
|
|
||||||
</v-col>
|
|
||||||
<v-col align-self="center" cols="3">
|
|
||||||
{{ device.hostname }}
|
|
||||||
</v-col>
|
|
||||||
<v-col
|
|
||||||
v-if="$vuetify.breakpoint.mdAndUp"
|
|
||||||
cols="2"
|
|
||||||
class="grow"
|
|
||||||
>{{ device.ip }}</v-col
|
|
||||||
>
|
>
|
||||||
<v-col v-if="$vuetify.breakpoint.mdAndUp" class="grow">
|
<ap-icon class="mr-4" :controller="device.controller" />
|
||||||
<div>
|
</v-badge>
|
||||||
<avatar left size="24px" :src="device.thumbnailPhoto" />{{
|
</v-col>
|
||||||
device.displayName
|
<v-col align-self="center" cols="3">
|
||||||
}}
|
{{ device.hostname }}
|
||||||
</div>
|
</v-col>
|
||||||
</v-col>
|
<v-col
|
||||||
</v-row>
|
v-if="$vuetify.breakpoint.mdAndUp"
|
||||||
</v-expansion-panel-header>
|
cols="2"
|
||||||
<v-expansion-panel-content>
|
class="grow"
|
||||||
<v-list dense>
|
>{{ device.ip }}</v-col
|
||||||
<v-list-item v-if="device.status == 'ONLINE'">
|
>
|
||||||
<v-list-item-action>
|
<v-col v-if="$vuetify.breakpoint.mdAndUp" class="grow">
|
||||||
<v-icon color="green darken-1">mdi-wifi</v-icon>
|
<div>
|
||||||
</v-list-item-action>
|
<avatar left size="24px" :src="device.thumbnailPhoto" />{{
|
||||||
<v-list-item-content>
|
device.displayName
|
||||||
<v-list-item-title>
|
}}
|
||||||
{{ device.essid }}
|
</div>
|
||||||
</v-list-item-title>
|
</v-col>
|
||||||
<v-list-item-subtitle> SSID </v-list-item-subtitle>
|
</v-row>
|
||||||
</v-list-item-content>
|
</v-expansion-panel-header>
|
||||||
</v-list-item>
|
<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 v-else>
|
||||||
<v-list-item-action>
|
<v-list-item-action>
|
||||||
<v-icon>mdi-wifi-off</v-icon>
|
<v-icon>mdi-wifi-off</v-icon>
|
||||||
</v-list-item-action>
|
</v-list-item-action>
|
||||||
<v-list-item-content>
|
<v-list-item-content>
|
||||||
<v-list-item-title>
|
<v-list-item-title>
|
||||||
{{ device.essid }}
|
{{ device.essid }}
|
||||||
</v-list-item-title>
|
</v-list-item-title>
|
||||||
<v-list-item-subtitle>
|
<v-list-item-subtitle>
|
||||||
Dispositivo off-line
|
Dispositivo off-line
|
||||||
</v-list-item-subtitle>
|
</v-list-item-subtitle>
|
||||||
</v-list-item-content>
|
</v-list-item-content>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
|
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-list-item-action>
|
<v-list-item-action>
|
||||||
<v-icon>mdi-access-point</v-icon>
|
<v-icon>mdi-access-point</v-icon>
|
||||||
</v-list-item-action>
|
</v-list-item-action>
|
||||||
<v-list-item-content>
|
<v-list-item-content>
|
||||||
<v-list-item-title>
|
<v-list-item-title>
|
||||||
{{ device.apName }}
|
{{ device.apName }}
|
||||||
</v-list-item-title>
|
</v-list-item-title>
|
||||||
<v-list-item-subtitle>
|
<v-list-item-subtitle>
|
||||||
Access Point ({{ device.controller }})
|
Access Point ({{ device.controller }})
|
||||||
</v-list-item-subtitle>
|
</v-list-item-subtitle>
|
||||||
</v-list-item-content>
|
</v-list-item-content>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
|
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-list-item-action>
|
<v-list-item-action>
|
||||||
<v-icon>mdi-ip-network</v-icon>
|
<v-icon>mdi-ip-network</v-icon>
|
||||||
</v-list-item-action>
|
</v-list-item-action>
|
||||||
<v-list-item-content>
|
<v-list-item-content>
|
||||||
<v-list-item-title>
|
<v-list-item-title>
|
||||||
{{ device.ip }}
|
{{ device.ip }}
|
||||||
</v-list-item-title>
|
</v-list-item-title>
|
||||||
<v-list-item-subtitle>
|
<v-list-item-subtitle>
|
||||||
Último endereço IP conhecido
|
Último endereço IP conhecido
|
||||||
</v-list-item-subtitle>
|
</v-list-item-subtitle>
|
||||||
</v-list-item-content>
|
</v-list-item-content>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-list-item-action>
|
<v-list-item-action>
|
||||||
<v-icon>mdi-expansion-card-variant</v-icon>
|
<v-icon>mdi-expansion-card-variant</v-icon>
|
||||||
</v-list-item-action>
|
</v-list-item-action>
|
||||||
<v-list-item-content>
|
<v-list-item-content>
|
||||||
<v-list-item-title>
|
<v-list-item-title>
|
||||||
{{ device.mac }}
|
{{ device.mac }}
|
||||||
</v-list-item-title>
|
</v-list-item-title>
|
||||||
<v-list-item-subtitle>
|
<v-list-item-subtitle>
|
||||||
{{ device.oui }}
|
{{ device.oui }}
|
||||||
</v-list-item-subtitle>
|
</v-list-item-subtitle>
|
||||||
</v-list-item-content>
|
</v-list-item-content>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-list-item-action>
|
<v-list-item-action>
|
||||||
<v-icon>mdi-eye</v-icon>
|
<v-icon>mdi-eye</v-icon>
|
||||||
</v-list-item-action>
|
</v-list-item-action>
|
||||||
<v-list-item-content>
|
<v-list-item-content>
|
||||||
<v-list-item-title>
|
<v-list-item-title>
|
||||||
{{ device.lastSeen | dateAndTime }}
|
{{ device.lastSeen | dateAndTime }}
|
||||||
</v-list-item-title>
|
</v-list-item-title>
|
||||||
<v-list-item-subtitle>
|
<v-list-item-subtitle>
|
||||||
Visto pela última vez
|
Visto pela última vez
|
||||||
</v-list-item-subtitle>
|
</v-list-item-subtitle>
|
||||||
</v-list-item-content>
|
</v-list-item-content>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-list-item-action>
|
<v-list-item-action>
|
||||||
<v-icon>mdi-check-decagram</v-icon>
|
<v-icon>mdi-check-decagram</v-icon>
|
||||||
</v-list-item-action>
|
</v-list-item-action>
|
||||||
<v-list-item-content>
|
<v-list-item-content>
|
||||||
<v-list-item-title>
|
<v-list-item-title>
|
||||||
{{ device.firstSeen | dateAndTime }}
|
{{ device.firstSeen | dateAndTime }}
|
||||||
</v-list-item-title>
|
</v-list-item-title>
|
||||||
<v-list-item-subtitle>
|
<v-list-item-subtitle>
|
||||||
Visto pela primeira vez
|
Visto pela primeira vez
|
||||||
</v-list-item-subtitle>
|
</v-list-item-subtitle>
|
||||||
</v-list-item-content>
|
</v-list-item-content>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-list-item-action>
|
<v-list-item-action>
|
||||||
<Avatar :src="device.thumbnailPhoto" size="24px" />
|
<Avatar :src="device.thumbnailPhoto" size="24px" />
|
||||||
</v-list-item-action>
|
</v-list-item-action>
|
||||||
<v-list-item-content>
|
<v-list-item-content>
|
||||||
<v-list-item-title>
|
<v-list-item-title>
|
||||||
{{ device.displayName }}
|
{{ device.displayName }}
|
||||||
</v-list-item-title>
|
</v-list-item-title>
|
||||||
<v-list-item-subtitle>
|
<v-list-item-subtitle>
|
||||||
{{ device.sAMAccountName }}
|
{{ device.sAMAccountName }}
|
||||||
</v-list-item-subtitle>
|
</v-list-item-subtitle>
|
||||||
</v-list-item-content>
|
</v-list-item-content>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
</v-list>
|
</v-list>
|
||||||
</v-expansion-panel-content>
|
</v-expansion-panel-content>
|
||||||
</v-expansion-panel>
|
</v-expansion-panel>
|
||||||
</v-expansion-panels>
|
</v-expansion-panels>
|
||||||
</template>
|
</template>
|
||||||
</v-data-iterator>
|
</v-data-iterator>
|
||||||
</v-container>
|
<v-alert type="info" outlined dismissible>
|
||||||
</div>
|
São exibidos apenas os 100 primeiros resultados da pesquisa
|
||||||
|
</v-alert>
|
||||||
|
</v-container>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|
|
@ -1,16 +1,12 @@
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<v-container fluid>
|
||||||
<v-toolbar height="115" class="align-content-center bottom-border" flat>
|
<v-toolbar class="mb-2" flat outlined>
|
||||||
<v-text-field
|
<v-text-field
|
||||||
v-model="search"
|
v-model="search"
|
||||||
class="mt-6 search"
|
|
||||||
label="Pesquisar"
|
label="Pesquisar"
|
||||||
hint="Nome/conta"
|
prepend-inner-icon="mdi-account-search"
|
||||||
prepend-icon="mdi-account-search"
|
|
||||||
clearable
|
clearable
|
||||||
outlined
|
hide-details
|
||||||
rounded
|
|
||||||
style="max-width: 512px"
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<v-tooltip bottom>
|
<v-tooltip bottom>
|
||||||
|
@ -29,178 +25,178 @@
|
||||||
</template>
|
</template>
|
||||||
</v-tooltip>
|
</v-tooltip>
|
||||||
</v-toolbar>
|
</v-toolbar>
|
||||||
<v-container fluid>
|
<div v-if="stats" class="text-center my-4">
|
||||||
<div v-if="stats" class="text-center my-4">
|
<v-chip color="primary" class="mr-2" dark>
|
||||||
<v-chip color="primary" class="mr-2" dark>
|
{{ stats.onlineUsers }}
|
||||||
{{ stats.onlineUsers }}
|
</v-chip>
|
||||||
</v-chip>
|
usuários online de
|
||||||
usuários online de
|
<v-chip class="ml-2">
|
||||||
<v-chip class="ml-2">
|
{{ stats.totalUsers }}
|
||||||
{{ stats.totalUsers }}
|
</v-chip>
|
||||||
</v-chip>
|
</div>
|
||||||
</div>
|
<v-data-iterator
|
||||||
<v-data-iterator
|
:items="sortedWifiUsers"
|
||||||
:items="sortedWifiUsers"
|
:loading="$apollo.queries.wifiUsers.loading"
|
||||||
:loading="$apollo.queries.wifiUsers.loading"
|
>
|
||||||
:search="search"
|
<template #default="{ items }">
|
||||||
>
|
<v-expansion-panels>
|
||||||
<template #default="{ items }">
|
<v-expansion-panel v-for="user in items" :key="user.sAMAccountName">
|
||||||
<v-expansion-panels>
|
<v-expansion-panel-header>
|
||||||
<v-expansion-panel v-for="user in items" :key="user.sAMAccountName">
|
<div style="width: 50px">
|
||||||
<v-expansion-panel-header>
|
<avatar size="24" left :src="user.thumbnailPhoto" />
|
||||||
<div style="width: 50px">
|
{{ user.displayName }} ({{ user.sAMAccountName }})
|
||||||
<avatar size="24" left :src="user.thumbnailPhoto" />
|
</div>
|
||||||
{{ user.displayName }} ({{ user.sAMAccountName }})
|
<template #actions>
|
||||||
</div>
|
<v-badge
|
||||||
<template #actions>
|
class="mx-4"
|
||||||
|
color="grey darken-1"
|
||||||
|
bottom
|
||||||
|
offset-y="10"
|
||||||
|
:content="
|
||||||
|
user.wifiDevices
|
||||||
|
.filter(wifiDevice => wifiDevice.status != 'ONLINE')
|
||||||
|
.length.toString()
|
||||||
|
"
|
||||||
|
>
|
||||||
<v-badge
|
<v-badge
|
||||||
class="mx-4"
|
color="green darken-1"
|
||||||
color="grey darken-1"
|
top
|
||||||
bottom
|
|
||||||
offset-y="10"
|
offset-y="10"
|
||||||
:content="
|
:content="
|
||||||
user.wifiDevices
|
user.wifiDevices
|
||||||
.filter(wifiDevice => wifiDevice.status != 'ONLINE')
|
.filter(wifiDevice => wifiDevice.status == 'ONLINE')
|
||||||
.length.toString()
|
.length.toString()
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<v-badge
|
<v-icon>mdi-cellphone-wireless</v-icon>
|
||||||
color="green darken-1"
|
|
||||||
top
|
|
||||||
offset-y="10"
|
|
||||||
:content="
|
|
||||||
user.wifiDevices
|
|
||||||
.filter(wifiDevice => wifiDevice.status == 'ONLINE')
|
|
||||||
.length.toString()
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<v-icon>mdi-cellphone-wireless</v-icon>
|
|
||||||
</v-badge>
|
|
||||||
</v-badge>
|
</v-badge>
|
||||||
</template>
|
</v-badge>
|
||||||
</v-expansion-panel-header>
|
</template>
|
||||||
<v-expansion-panel-content>
|
</v-expansion-panel-header>
|
||||||
<v-expansion-panels accordion>
|
<v-expansion-panel-content>
|
||||||
<v-expansion-panel
|
<v-expansion-panels accordion>
|
||||||
v-for="device in user.wifiDevices"
|
<v-expansion-panel
|
||||||
:key="device.mac"
|
v-for="device in user.wifiDevices"
|
||||||
|
:key="device.mac"
|
||||||
|
>
|
||||||
|
<v-expansion-panel-header>
|
||||||
|
<div>
|
||||||
|
<v-icon
|
||||||
|
left
|
||||||
|
:color="device.status == 'ONLINE' ? 'green' : ''"
|
||||||
|
>
|
||||||
|
mdi-cellphone-wireless
|
||||||
|
</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-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-header>
|
</v-expansion-panel>
|
||||||
<div>
|
</v-expansion-panels>
|
||||||
<v-icon
|
</v-expansion-panel-content>
|
||||||
left
|
</v-expansion-panel>
|
||||||
:color="device.status == 'ONLINE' ? 'green' : ''"
|
</v-expansion-panels>
|
||||||
>
|
</template>
|
||||||
mdi-cellphone-wireless
|
</v-data-iterator>
|
||||||
</v-icon>
|
<v-alert type="info" outlined dismissible>
|
||||||
{{ device.hostname || device.mac }} {{ device.oui }}
|
São exibidos apenas os 100 primeiros resultados da pesquisa
|
||||||
</div>
|
</v-alert>
|
||||||
</v-expansion-panel-header>
|
</v-container>
|
||||||
<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-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-panel-content>
|
|
||||||
</v-expansion-panel>
|
|
||||||
</v-expansion-panels>
|
|
||||||
</template>
|
|
||||||
</v-data-iterator>
|
|
||||||
</v-container>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import gql from 'graphql-tag'
|
import gql from 'graphql-tag'
|
||||||
|
@ -225,8 +221,8 @@ export default {
|
||||||
wifiUsers: {
|
wifiUsers: {
|
||||||
fetchPolicy: 'cache-and-network',
|
fetchPolicy: 'cache-and-network',
|
||||||
query: gql`
|
query: gql`
|
||||||
query {
|
query wifiUsers($search: String) {
|
||||||
wifiUsers {
|
wifiUsers(search: $search) {
|
||||||
displayName
|
displayName
|
||||||
sAMAccountName
|
sAMAccountName
|
||||||
thumbnailPhoto
|
thumbnailPhoto
|
||||||
|
@ -244,7 +240,12 @@ export default {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
`
|
`,
|
||||||
|
variables() {
|
||||||
|
return {
|
||||||
|
search: this.search
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
stats: {
|
stats: {
|
||||||
query: gql`
|
query: gql`
|
||||||
|
|
Loading…
Reference in New Issue
Block a user