Skip to content
Snippets Groups Projects
Commit 27c17b6b authored by !! Julian Keck (old Account; do not use) !!'s avatar !! Julian Keck (old Account; do not use) !! :ghost:
Browse files

ADD: initial work on sites/buildings/rooms

parent a9c81a17
No related branches found
No related tags found
No related merge requests found
Pipeline #376152 passed with warnings
Showing with 811 additions and 80 deletions
......@@ -772,5 +772,48 @@ export default {
}
]
return TransactionService.execute(config, ta)
},
getSites(config) {
const ta = [
{ name: 'nd.site.list' },
{ name: 'ndcfg.site_type.list' }
]
return TransactionService.execute(config, ta)
},
getSite(config, site) {
const ta = [
{ name: 'nd.site.list', old: { fq_name_list: [site] } },
{ name: 'ndcfg.site_type.list' }
]
return TransactionService.execute(config, ta)
},
getBldgs(config, site = null) {
let old_dict = {}
if (site) {
old_dict = { site_fq_name: site }
}
const ta = [
{ name: 'nd.bldg.list', old: old_dict },
]
return TransactionService.execute(config, ta)
},
getRooms(config, site, bldg) {
const ta = [
{ name: 'nd.site.list', old: { fq_name_list: [site] } },
{ name: 'nd.bldg.list', old: { number_list: [bldg] }, inner_join_ref: {site_list: 'default'} },
{ name: 'nd.room.list', inner_join_ref: {bldg_list: 'default'} },
]
return TransactionService.execute(config, ta)
},
getRoomInfo(config, site, bldg, room_gpk) {
const ta = [
{ name: 'nd.site.list', old: { fq_name_list: [site] } },
{ name: 'nd.bldg.list', old: { number_list: [bldg] }, inner_join_ref: {site_list: 'default'} },
{ name: 'nd.room.list', inner_join_ref: {bldg_list: 'default'}, old: {gpk: room_gpk} },
{ name: 'nd.module.list', inner_join_ref: {room_list: 'default'} },
{ name: 'nd.p_port.list', inner_join_ref: {module_list: 'default'} },
]
console.log(ta)
return TransactionService.execute(config, ta)
}
}
<template>
<div>
<FilterInput v-model="filter"></FilterInput>
<b-pagination v-if="bldgs && bldgs.length > per_page && filter === ''" :total-rows="bldgs.length"
:per-page="per_page" v-model="current_page" align="center"></b-pagination>
<b-card no-body class="shadow">
<b-table responsive :filter="filter" :per-page="filter === '' ? per_page : null"
:current-page="filter === '' ? current_page : null" :fields="site_list_fields" :busy="bldgs === null"
:items="bldgs" :sort-by="sort_by || default_sort_by">
<template v-slot:cell(name)="data">
<b-link class="nowrap" :to="'/netdoc/sites/'+data.item.site_fq_name+'/'+data.item.number"><b>{{ data.value }}</b></b-link>
</template>
<template v-slot:cell(number)="data">
<b-link class="nowrap" :to="'/netdoc/sites/'+data.item.site_fq_name+'/'+data.item.number"><b>{{ data.value }}</b></b-link>
</template>
</b-table>
<div v-if="bldgs && bldgs.length === 0" class="font-italic text-center mb-3">
{{ $t('components.bcd_list.no_bldgs_available') }}
</div>
<b-pagination v-if="bldgs && bldgs.length > per_page && filter === ''" :total-rows="bldgs.length"
:per-page="per_page" v-model="current_page" align="center"></b-pagination>
</b-card>
</div>
</template>
<script>
import FilterInput from '@/components/FilterInput'
export default {
name: 'BldgList',
components: { FilterInput },
watch: {
filter: {
immediate: true,
async handler() {
if (this.filter_callback !== null) {
const result = await this.filter_callback(this.filter)
if (result !== null) {
this.filter = result
}
}
}
},
},
data() {
return {
filter: '',
current_page: 1,
per_page: 100,
sort_by: null,
}
},
computed: {
site_list_fields() {
const result = [
{
label: this.$t('views.nd.bldg.number'),
key: 'number',
sortable: true
},
{
label: this.$t('views.nd.bldg.name'),
key: 'name',
sortable: true
},
{
label: this.$t('views.nd.bldg.street'),
key: 'street',
sortable: true
},
{
label: this.$t('views.nd.bldg.zip'),
key: 'postal_code',
sortable: true
},
]
return result
}
},
props: {
default_sort_by: {
required: false,
default() {
return 'number'
}
},
bldgs: {
required: true,
default() {
return null
}
},
filter_callback: {
required: false,
default() {
return null
}
},
}
}
</script>
<style scoped>
</style>
<template>
<div>
<FilterInput v-model="filter"></FilterInput>
<b-pagination v-if="p_ports && p_ports.length > per_page && filter === ''" :total-rows="p_ports.length"
:per-page="per_page" v-model="current_page" align="center"></b-pagination>
<b-card no-body class="shadow">
<b-table responsive :filter="filter" :per-page="filter === '' ? per_page : null"
:current-page="filter === '' ? current_page : null" :fields="site_list_fields" :busy="p_ports === null"
:items="p_ports" :sort-by="sort_by || default_sort_by">
<template v-slot:cell(name)="data">
<b-link class="nowrap" :to="'/netdoc/modules/'+data.item.module_gfk+'/p_port/'+data.item.gpk">
<b>{{ data.item.mdl_fq_name }}: {{ data.value }}</b>
</b-link>
</template>
<template v-slot:cell(is_defective)="data">
<CheckMark :state="data.item.is_defective"/>
</template>
<template v-slot:cell(is_connected)="data">
<CheckMark :state="data.item.is_connected"/>
</template>
</b-table>
<div v-if="p_ports && p_ports.length === 0" class="font-italic text-center mb-3">
{{ $t('components.bcd_list.no_p_ports_available') }}
</div>
<b-pagination v-if="p_ports && p_ports.length > per_page && filter === ''" :total-rows="p_ports.length"
:per-page="per_page" v-model="current_page" align="center"></b-pagination>
</b-card>
</div>
</template>
<script>
import FilterInput from '@/components/FilterInput'
import CheckMark from '@/components/CheckMark.vue'
export default {
name: 'PPortList',
components: { CheckMark, FilterInput },
watch: {
filter: {
immediate: true,
async handler() {
if (this.filter_callback !== null) {
const result = await this.filter_callback(this.filter)
if (result !== null) {
this.filter = result
}
}
}
},
},
data() {
return {
filter: '',
current_page: 1,
per_page: 100,
sort_by: null,
}
},
computed: {
site_list_fields() {
const result = [
{
label: this.$t('system.name'),
key: 'name',
sortable: true
},
{
label: this.$t('system.description'),
key: 'description',
sortable: true
},
{
label: this.$t('views.nd.modules.port_protocol'),
key: 'protocol',
sortable: true
},
{
label: this.$t('views.nd.modules.port_speed'),
key: 'speed',
sortable: true
},
{
label: this.$t('views.nd.p_port.is_connected'),
key: 'is_connected',
sortable: true
},
{
label: this.$t('views.nd.bcd.defective'),
key: 'is_defective',
sortable: true
},
]
return result
}
},
props: {
default_sort_by: {
required: false,
default() {
// FIXME: modules have a canonical order...
return 'mdl_fq_name'
}
},
p_ports: {
required: true,
default() {
return null
}
},
filter_callback: {
required: false,
default() {
return null
}
},
}
}
</script>
<style scoped>
</style>
<template>
<div>
<FilterInput v-model="filter"></FilterInput>
<b-pagination v-if="rooms && rooms.length > per_page && filter === ''" :total-rows="rooms.length"
:per-page="per_page" v-model="current_page" align="center"></b-pagination>
<b-card no-body class="shadow">
<b-table responsive :filter="filter" :per-page="filter === '' ? per_page : null"
:current-page="filter === '' ? current_page : null" :fields="site_list_fields" :busy="rooms === null"
:items="rooms" :sort-by="sort_by || default_sort_by">
<template v-slot:cell(name)="data">
<b-link class="nowrap" :to="'/netdoc/sites/'+bldgs_by_nbr[data.item.bldg].site_fq_name+'/'+data.item.bldg+'/'+data.item.gpk"><b>{{ data.value }}</b></b-link>
</template>
<template v-slot:cell(number)="data">
<b-link class="nowrap" :to="'/netdoc/sites/'+bldgs_by_nbr[data.item.bldg].site_fq_name+'/'+data.item.bldg+'/'+data.item.gpk"><b>{{ data.value }}</b></b-link>
</template>
</b-table>
<div v-if="rooms && rooms.length === 0" class="font-italic text-center mb-3">
{{ $t('components.bcd_list.no_rooms_available') }}
</div>
<b-pagination v-if="rooms && rooms.length > per_page && filter === ''" :total-rows="rooms.length"
:per-page="per_page" v-model="current_page" align="center"></b-pagination>
</b-card>
</div>
</template>
<script>
import FilterInput from '@/components/FilterInput'
import apiutil from '@/util/apiutil'
export default {
name: 'RoomList',
components: { FilterInput },
watch: {
filter: {
immediate: true,
async handler() {
if (this.filter_callback !== null) {
const result = await this.filter_callback(this.filter)
if (result !== null) {
this.filter = result
}
}
}
},
},
data() {
return {
filter: '',
current_page: 1,
per_page: 100,
sort_by: null,
}
},
computed: {
bldgs_by_nbr() {
return apiutil.dict_by_value_of_array(this.bldgs, 'number')
},
site_list_fields() {
const result = [
{
label: this.$t('views.nd.room.floor'),
key: 'floor',
sortable: true
},
{
label: this.$t('views.nd.room.number'),
key: 'number',
sortable: true
},
{
label: this.$t('system.name'),
key: 'name',
sortable: true
},
{
label: this.$t('system.description'),
key: 'description',
sortable: true
},
]
return result
}
},
props: {
default_sort_by: {
required: false,
default() {
return 'number'
}
},
rooms: {
required: true,
default() {
return null
}
},
bldgs: {
required: true,
default() {
return null
}
},
filter_callback: {
required: false,
default() {
return null
}
},
}
}
</script>
<style scoped>
</style>
<template>
<div>
<FilterInput v-model="filter"></FilterInput>
<b-pagination v-if="sites && sites.length > per_page && filter === ''" :total-rows="sites.length"
:per-page="per_page" v-model="current_page" align="center"></b-pagination>
<b-card no-body class="shadow">
<b-table responsive :filter="filter" :per-page="filter === '' ? per_page : null"
:current-page="filter === '' ? current_page : null" :fields="site_list_fields" :busy="sites === null"
:items="sites" :sort-by="sort_by">
<template v-slot:cell(fq_name)="data">
<b-link class="nowrap" :to="'/netdoc/sites/'+data.value"><b>{{ data.value }}</b></b-link>
</template>
<template v-slot:cell(type)="data">
{{ $t_netdb(site_types[data.item.type].description) }}
</template>
</b-table>
<div v-if="sites && sites.length === 0" class="font-italic text-center mb-3">
{{ $t('components.bcd_list.no_sites_available') }}
</div>
<b-pagination v-if="sites && sites.length > per_page && filter === ''" :total-rows="sites.length"
:per-page="per_page" v-model="current_page" align="center"></b-pagination>
</b-card>
</div>
</template>
<script>
import FilterInput from '@/components/FilterInput'
export default {
name: 'SiteList',
components: { FilterInput },
watch: {
filter: {
immediate: true,
async handler() {
if (this.filter_callback !== null) {
const result = await this.filter_callback(this.filter)
if (result !== null) {
this.filter = result
}
}
}
},
},
data() {
return {
filter: '',
current_page: 1,
per_page: 100,
sort_by: null,
}
},
computed: {
site_list_fields() {
const result = [
{
label: this.$t('system.name'),
key: 'fq_name',
sortable: true
},
{
label: this.$t('system.description'),
key: 'description',
sortable: true
},
{
label: this.$t('views.nd.sites.type'),
key: 'type',
sortable: true
},
]
return result
}
},
props: {
default_sort_by: {
required: false,
default() {
return null
}
},
sites: {
required: true,
default() {
return null
}
},
site_types: {
required: true,
default() {
return null
}
},
filter_callback: {
required: false,
default() {
return null
}
},
}
}
</script>
<style scoped>
</style>
{
"components": {
"external_records": {
"info": "Bei Nicht-BCD-Records handelt es sich im Records, die weder direkt noch indirekt einer BCD zugeordnet werden können."
},
"bcd_free_address_block": {
"free_address": "freie Adresse | freie Adressen",
"one": "Eine",
......@@ -11,6 +8,7 @@
"bcd_list": {
"bcd_id": "BCD-ID",
"no_bcds_available": "Keine BCDs vorhanden",
"no_sites_available": "Keine Gebiete vorhanden",
"no_vlans_available": "Keine VLANs vorhanden",
"no_vni_set": "Keine VNI gesetzt"
},
......@@ -170,6 +168,9 @@
"unkown_type": "Unbekannter Typ",
"until": "Bis"
},
"external_records": {
"info": "Bei Nicht-BCD-Records handelt es sich im Records, die weder direkt noch indirekt einer BCD zugeordnet werden können."
},
"filter_input": {
"direct_dialing": "Direktwahl",
"filter": "Filter"
......@@ -268,8 +269,8 @@
"wpa2_key": "WPA2 Key"
},
"navbar": {
"developer_mode": "Entwicklermodus",
"db_editor_cache": "db_editor_cache aktiv (Änderung benötigt Neuladen der Seite)",
"developer_mode": "Entwicklermodus",
"expert_mode": "Expertenmodus",
"keep_transaction_list_after_logout": "Transaktionsliste nach Logout beibehalten",
"local_application_settings": "Lokale Anwendungseinstellungen",
......@@ -526,12 +527,12 @@
"nat_src": "NAT-Quelladresse | NAT-Quelladressen",
"natvs": "NATVS",
"natvs_plus": "NATVS+",
"net_instnc": "Netzinstanz",
"net_cmpnd": "Netzverbund|Netzverbünde",
"net_cmpnd_explain": "Die Netzinstanz legt fest, in welchen Netzverbünden im Netzwerk eine VLAN-ID einer spezifischen BCD Gültigkeit hat.",
"net_instnc": "Netzinstanz",
"netdb": "NETDB",
"netdb_oldrelease": "NETDB (Vorversion, \"Oldrelease\")",
"netdb_deprecated": "NETDB (Veraltete Version, \"Deprecated\")",
"netdb_oldrelease": "NETDB (Vorversion, \"Oldrelease\")",
"netdoc": "Netdoc",
"netinst_nc": "Netzinstanz",
"netvs": "NETVS",
......@@ -549,6 +550,7 @@
"organizational_unit": "Organisationseinheit | Organisationseinheiten",
"organizational_unit_type": "Organisationseinheitstyp | Organisationseinheitstypen",
"password": "Passwort",
"permissions": "Berechtigungen",
"planned_actions": "Geplante Aktionen",
"please_select": "Bitte auswählen...",
"previous": "Vorherige",
......@@ -587,14 +589,14 @@
"utils": {
"bulk_update": "bearbeiten (bulk)",
"bulk_update_template": "{object} bearbeiten (bulk)",
"create": "erstellen",
"create_template": "{object} erstellen",
"connect": "verbinden",
"connect_template": "{object} verbinden",
"disconnect": "Verbindung trennen",
"disconnect_template": "Verbindung {object} trennen",
"create": "erstellen",
"create_template": "{object} erstellen",
"delete": "löschen",
"delete_template": "{object} löschen",
"disconnect": "Verbindung trennen",
"disconnect_template": "Verbindung {object} trennen",
"multiple": "{action} und ein weiteres Objekt {action}",
"update": "bearbeiten",
"update_template": "{object} bearbeiten"
......@@ -604,8 +606,7 @@
"vlan_id": "VLAN-ID",
"vlan_name": "VLAN-Name",
"watt": "Watt",
"you": "Sie",
"permissions": "Berechtigungen"
"you": "Sie"
},
"views": {
"app": {
......@@ -732,14 +733,20 @@
"bcd": {
"connection_path": "Verbindungspfad",
"defective": "Defekt",
"edit_pport": "Aktualisiere PPort",
"no_dd_present": "Keine Datendosen vorhanden",
"protocol": "Protokoll",
"request_patch": "Patchrequest erstellen um Änderung zu beantragen",
"show_path": "Verbindungspfad anzeigen",
"tag": "Tag",
"tagged": "Getaggt",
"unpatch": "Datendose entpatchen",
"edit_pport": "Aktualisiere PPort"
"unpatch": "Datendose entpatchen"
},
"bldg": {
"name": "Name",
"number": "Gebäudenummer",
"street": "Straße",
"zip": "PLZ"
},
"map": {
"OSM_contributers": "OpenStreetMap-Mitwirkende",
......@@ -749,7 +756,9 @@
"p_port_type_groups": "P-Port-Typengruppen"
},
"modules": {
"edit-pport": "Aktualisiere PPort",
"free": "FREI",
"link-pport": "Verbinde PPort",
"port_assignments": "Portbelegung",
"port_connected_with": "verbunden mit",
"port_defective": "Defekt",
......@@ -765,24 +774,35 @@
"submodule_name": "Submodulname",
"submodule_type_class": "Submodultypklasse",
"submodule_type_name": "Submodultyp-Name",
"edit-pport": "Aktualisiere PPort",
"unlink-pport": "Trenne PPort",
"link-pport": "Verbinde PPort"
"unlink-pport": "Trenne PPort"
},
"netdoc": {
"bldgs": "Gebäude | Gebäude",
"dd": "Datennetzanschluss | Datennetzanschlüsse",
"device": "Gerät",
"device_attr_list": "Attribut des Geräts | Attribute des Gerät",
"get_l_ports": "LPorts laden",
"l_port": "Logischer Port | Logische Ports",
"device_attr_list": "Attribut des Geräts | Attribute des Gerät",
"module_list": "Modul des Geräts | Module der Geräte",
"module": "Modul",
"module_list": "Modul des Geräts | Module der Geräte",
"no_vlans": "Keine VLANs",
"p_port": "PPort",
"remote_p_port": "Port am anderen Ende"
"remote_p_port": "Port am anderen Ende",
"room": "Raum | Räume",
"sites": "Gebiet | Gebiete"
},
"ou_recursive": "vererbt",
"ou_recursive_assigned": "geerbt",
"p_port": {
"is_connected": "Port verbunden"
},
"room": {
"floor": "Etage",
"number": "Raumnummer"
},
"sites": {
"type": "Typ"
},
"you_are_here": "Sie sind hier"
},
"netdb": {
......@@ -956,18 +976,18 @@
"subnet_calculator": "IPv6 Subnetz-Rechner"
},
"macfinder": {
"any_format_possible": "Beliebiges Format möglich",
"building": "Gebäude",
"description": "Hier können Sie unter Angabe einer Broadcastdomain und der MAC-Adresse eines Geräts prüfen, wo sich dieses Gerät physikalisch im Netz befindet.",
"invalid_bcd": "Ungültige BCD",
"limits": {
"active-clients": "Geräte müssen zum Zeitpunkt der Suche aktiv sein (d.h. Traffic auslösen).",
"limitations": "Beschränkungen",
"no-vpn2vlan": "Nicht im VPN2VLAN",
"no-wlan": "Keine Geräte, die durch WLAN mit dem Netz verbunden sind.",
"untagged": "Nur für VLANs, die portbasiert sind (untagged)",
"only-scc-switches": "Nur Berücksichtigung von Geräten, die an Switches angeschlossen sind, die vom SCC verwaltet werden.",
"no-vpn2vlan": "Nicht im VPN2VLAN",
"active-clients": "Geräte müssen zum Zeitpunkt der Suche aktiv sein (d.h. Traffic auslösen)."
"untagged": "Nur für VLANs, die portbasiert sind (untagged)"
},
"any_format_possible": "Beliebiges Format möglich",
"building": "Gebäude",
"invalid_bcd": "Ungültige BCD",
"module": "Modul",
"no_devices_found": "Keine Geräte gefunden.",
"port": "Port",
......@@ -986,4 +1006,4 @@
}
}
}
}
}
\ No newline at end of file
{
"components": {
"external_records": {
"info": "Non-BCD records are records that cannot be attributed to a BCD either directly or indirectly."
},
"bcd_free_address_block": {
"free_address": "free address | free addresses",
"one": "One",
......@@ -11,6 +8,7 @@
"bcd_list": {
"bcd_id": "BCD ID",
"no_bcds_available": "No BCDs available",
"no_sites_available": "No sites available",
"no_vlans_available": "No VLANs available",
"no_vni_set": "No VNI set"
},
......@@ -170,6 +168,9 @@
"unkown_type": "unkown type",
"until": "Until"
},
"external_records": {
"info": "Non-BCD records are records that cannot be attributed to a BCD either directly or indirectly."
},
"filter_input": {
"direct_dialing": "Direct dialing",
"filter": "Filter"
......@@ -268,8 +269,8 @@
"wpa2_key": "WPA2 Key"
},
"navbar": {
"developer_mode": "Developer mode",
"db_editor_cache": "db_editor_cache active (manual page reload required)",
"developer_mode": "Developer mode",
"expert_mode": "Expert mode",
"keep_transaction_list_after_logout": "Retain transaction list after logout",
"local_application_settings": "Local application settings",
......@@ -524,14 +525,14 @@
"nat_src": "NAT source address | NAT source addresses",
"natvs": "NATVS",
"natvs_plus": "NATVS+",
"net_cmpnd": "Network Compound|Network Compounds",
"net_cmpnd_explain": "The network instance specifies in which network compounds the VLAN ID of a specific BCD is valid.",
"net_instnc": "Net instance",
"netdb": "NETDB",
"netdb_oldrelease": "NETDB (\"Oldrelease\")",
"netdb_deprecated": "NETDB (\"Deprecated\")",
"netdb_oldrelease": "NETDB (\"Oldrelease\")",
"netdoc": "Netdoc",
"netinst_nc": "Network Instance",
"net_cmpnd": "Network Compound|Network Compounds",
"net_cmpnd_explain": "The network instance specifies in which network compounds the VLAN ID of a specific BCD is valid.",
"netvs": "NETVS",
"netvs_hub": "NETVS Hub",
"netvs_scc_kit_edu": "netvs∂scc.kit.edu",
......@@ -547,6 +548,7 @@
"organizational_unit": "Organizational Unit | Organizational Units",
"organizational_unit_type": "Organizational Unit type | Organizational Unit types",
"password": "Password",
"permissions": "Permissions",
"planned_actions": "Planned actions",
"please_select": "Please select...",
"previous": "Previous",
......@@ -585,14 +587,14 @@
"utils": {
"bulk_update": "update (bulk)",
"bulk_update_template": "Update {object} (bulk)",
"create": "create",
"create_template": "Create {object}",
"connect": "connect",
"connect_template": "Connect {object}",
"disconnect": "disconnect",
"disconnect_template": "Disonnect {object}",
"create": "create",
"create_template": "Create {object}",
"delete": "delete",
"delete_template": "Delete {object}",
"disconnect": "disconnect",
"disconnect_template": "Disonnect {object}",
"multiple": "{action} and {action} another object",
"update": "update",
"update_template": "Update {object}"
......@@ -602,8 +604,7 @@
"vlan_id": "VLAN ID",
"vlan_name": "VLAN-name",
"watt": "Watt",
"you": "you",
"permissions": "Permissions"
"you": "you"
},
"views": {
"app": {
......@@ -730,14 +731,20 @@
"bcd": {
"connection_path": "Connection path",
"defective": "Defective",
"edit_pport": "Update PPort",
"no_dd_present": "No ports present",
"protocol": "Protocol",
"request_patch": "Create patch request to request a change",
"show_path": "Show path of connection",
"tag": "Tag",
"tagged": "Tagged",
"unpatch": "Unpatch DD",
"edit_pport": "Update PPort"
"unpatch": "Unpatch DD"
},
"bldg": {
"name": "Name",
"number": "Number",
"street": "Street",
"zip": "ZIP"
},
"map": {
"OSM_contributers": "OpenStreetMap contributors",
......@@ -747,7 +754,9 @@
"p_port_type_groups": "P-Port type groups"
},
"modules": {
"edit_pport": "Update PPort",
"free": "FREE",
"link_pport": "Link PPort",
"port_assignments": "Port assignments",
"port_connected_with": "connected with",
"port_defective": "Defective",
......@@ -763,24 +772,35 @@
"submodule_name": "Submodule name",
"submodule_type_class": "Submodule type class",
"submodule_type_name": "Submodule type name",
"edit_pport": "Update PPort",
"unlink_pport": "Unlink PPort",
"link_pport": "Link PPort"
"unlink_pport": "Unlink PPort"
},
"netdoc": {
"bldgs": "Building | Buildings",
"dd": "Dataport | Dataports",
"device": "Device",
"get_l_ports": "Get L Ports",
"device_attr_list": "Device Attribute | Device Attributes",
"module_list": "Module of Devices | Modules of Devices",
"get_l_ports": "Get L Ports",
"l_port": "logical port | logical ports",
"module": "Module",
"module_list": "Module of Devices | Modules of Devices",
"no_vlans": "No VLANs",
"p_port": "PPort",
"remote_p_port": "Remote port"
"remote_p_port": "Remote port",
"room": "Room | Rooms",
"sites": "Site | Sites"
},
"ou_recursive": "handed down",
"ou_recursive_assigned": "inherited",
"p_port": {
"is_connected": "Port connected"
},
"room": {
"floor": "Floor",
"number": "Room number"
},
"sites": {
"type": "Type"
},
"you_are_here": "You are here"
},
"netdb": {
......@@ -964,18 +984,18 @@
"subnet_calculator": "IPv6 Subnet Calculator"
},
"macfinder": {
"any_format_possible": "Any format possible",
"building": "Building",
"description": "Here you can check where a device is physically located in the network by entering its MAC address and a broadcast domain.",
"invalid_bcd": "Invalid BCD",
"limits": {
"active-clients": "Devices must be active at the time of the search (i.e. triggering traffic)",
"limitations": "Limitations",
"no-vpn2vlan": "Not in VPN2VLAN",
"no-wlan": "No devices which are connected to the network via WLAN.",
"untagged": "Only for VLANs which are port based (untagged)",
"only-scc-switches": "Works only for devices which are connected to switches managed by SCC",
"no-vpn2vlan": "Not in VPN2VLAN",
"active-clients": "Devices must be active at the time of the search (i.e. triggering traffic)"
"untagged": "Only for VLANs which are port based (untagged)"
},
"any_format_possible": "Any format possible",
"building": "Building",
"invalid_bcd": "Invalid BCD",
"module": "Module",
"no_devices_found": "No devices found.",
"port": "Port",
......
......@@ -262,6 +262,80 @@ export default new Router({
name: 'netdoc',
redirect: '/netdoc/bcds',
},
{
path: '/netdoc/sites',
name: 'netdoc_sites_overview',
component: () => import('./views/nd/NetdocSiteOverview'),
meta: {
active: true,
resolveName: function (query) {
return i18n.tc('views.nd.netdoc.sites', 2)
},
resolveParents: function (query) {
return [{text: i18n.t('system.netdoc'), to: '/netdoc'}, '/']
}
}
},
{
path: '/netdoc/sites/:site',
name: 'netdoc_site',
component: () => import('./views/nd/NetdocSite'),
meta: {
active: true,
resolveName: function (query) {
// TODO
return query.site
},
resolveParents: function (query) {
return ['/netdoc/sites']
}
}
},
{
path: '/netdoc/buildings',
name: 'netdoc_building_overview',
component: () => import('./views/nd/NetdocSite'),
meta: {
active: false,
resolveName: function (query) {
// TODO
return i18n.tc('views.nd.netdoc.bldgs', 2)
},
resolveParents: function (query) {
return [{text: i18n.tc('views.nd.netdoc.sites', 2), to: '/netdoc/sites'}, '/']
}
}
},
{
path: '/netdoc/sites/:site/:bldg',
name: 'netdoc_bldg',
component: () => import('./views/nd/NetdocBldg'),
meta: {
active: true,
resolveName: function (query) {
// TODO
return query.bldg
},
resolveParents: function (query) {
return ['/netdoc/sites/' + query.site]
}
}
},
{
path: '/netdoc/sites/:site/:bldg/:room_gpk',
name: 'netdoc_bldg',
component: () => import('./views/nd/NetdocRoom'),
meta: {
active: true,
resolveName: function (query) {
// TODO
return query.room_gpk
},
resolveParents: function (query) {
return ['/netdoc/sites/' + query.site + '/' + query.bldg]
}
}
},
{
path: '/netdoc/bcds',
name: 'netdoc_bcds',
......
<template>
<div id="Site">
<h1>{{ $tc('views.nd.netdoc.room', 2) }} <span v-if="bldg">in {{ bldg.number }}</span></h1>
<LoadingPlaceholder :data="[bldg, rooms]">
<RoomList :rooms="rooms" :bldgs="[bldg]" />
</LoadingPlaceholder>
</div>
</template>
<script>
import LoadingPlaceholder from '@/components/Loading.vue'
import netdocService from '@/api-services/netdoc.service'
import RoomList from '@/components/nd/RoomList.vue'
export default {
name: 'NetdocBldg',
components: { RoomList, LoadingPlaceholder },
data() {
return {
site: null,
bldg: null,
rooms: null,
}
},
async created() {
const response = await netdocService.getRooms(this.$store.state, this.$route.params.site, this.$route.params.bldg)
this.site = response.data.site_list[0]
this.bldg = response.data.bldg_list[0]
this.rooms = response.data.room_list
}
}
</script>
<style scoped>
</style>
<template>
<p>TODO</p>
</template>
<script>
export default {
name: 'NetdocPPortList',
components: { },
data() {
return {
p_port_gpk: undefined
}
},
methods: {
},
async created() {
},
computed: {
}
}
</script>
<style scoped>
</style>
<template>
<div id="Site">
<h1 v-if="room">{{ $tc('views.nd.netdoc.room', 1) }} {{ room.number+': '+room.name }}</h1>
<LoadingPlaceholder :data="[bldg, room, modules]">
<PPortList :p_ports="p_ports" />
</LoadingPlaceholder>
</div>
</template>
<script>
import LoadingPlaceholder from '@/components/Loading.vue'
import netdocService from '@/api-services/netdoc.service'
import PPortList from '@/components/nd/PPortList.vue'
import {EventBus} from '@/eventbus'
export default {
name: 'NetdocBldg',
components: { PPortList, LoadingPlaceholder },
data() {
return {
site: null,
bldg: null,
room: null,
modules: null,
p_ports: null,
}
},
async created() {
const response = await netdocService.getRoomInfo(this.$store.state, this.$route.params.site, this.$route.params.bldg, this.$route.params.room_gpk)
this.site = response.data.site_list[0]
this.bldg = response.data.bldg_list[0]
this.room = response.data.room_list[0]
this.modules = response.data.module_list
this.p_ports = response.data.p_port_list
const n = this.room.number // Don't lazy eval, this can cause a poo-storm in the next line on navigation to the same view iwth a different p_port
EventBus.$emit('overwrite_breadcrumbs', {room_gpk: () => n})
}
}
</script>
<style scoped>
</style>
<template>
<div id="Site">
<h1>{{ $tc('views.nd.netdoc.bldgs', 2) }} <span v-if="site">in {{ site.fq_name }}</span></h1>
<LoadingPlaceholder :data="bldgs">
<BldgList :bldgs="bldgs" />
</LoadingPlaceholder>
</div>
</template>
<script>
import LoadingPlaceholder from '@/components/Loading.vue'
import netdocService from '@/api-services/netdoc.service'
import BldgList from '@/components/nd/BldgList.vue'
export default {
name: 'NetdocSite',
components: { BldgList, LoadingPlaceholder },
data() {
return {
site: null,
bldgs: null,
}
},
async created() {
// const response = await NdSite.list(this.$store.state, {})
if (this.$route.params.site) {
const site = await netdocService.getSite(this.$store.state, this.$route.params.site)
this.site = site.data.site_list[0]
} else {
this.site = null
}
const bldgs = await netdocService.getBldgs(this.$store.state, this.$route.params.site)
this.bldgs = bldgs.data.bldg_list
}
}
</script>
<style scoped>
</style>
<template>
<div id="SitesOverview">
<h1>{{ $tc('views.nd.netdoc.sites', 2) }}</h1>
<LoadingPlaceholder :data="sites">
<SiteList :sites="sites" :site_types="site_types"></SiteList>
</LoadingPlaceholder>
</div>
</template>
<script>
import LoadingPlaceholder from '@/components/Loading.vue'
import SiteList from '@/components/nd/SiteList.vue'
import netdocService from '@/api-services/netdoc.service'
import apiutil from '@/util/apiutil'
export default {
name: 'NetdocSiteOverview',
components: { SiteList, LoadingPlaceholder },
data() {
return {
sites: null,
site_types: null,
}
},
async created() {
// const response = await NdSite.list(this.$store.state, {})
const response = await netdocService.getSites(this.$store.state)
this.sites = response.data.site_list
this.site_types = apiutil.dict_by_value_of_array(response.data.site_type_list, 'short_name')
}
}
</script>
<style scoped>
</style>
  • mentioned in issue #771

    Toggle commit list
  • Rainer Steinmüller @rainer.steinmueller ·
    Owner

    27c17b6b

    ist dupliziert/identisch zu

    27c17b6b

    m.e. in zeile 786 noch ein inner_join_ref (default) auf stmt. 0? (wg. der darstellung hier: zeile 779 vs. zeile 786)

    Edited by Rainer Steinmüller
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment