blob: 0279cbe671f8a537d545bbf4bfd587195a2d412f [file] [log] [blame]
Dixsie Wolmersbb81d552020-02-26 19:52:28 -06001<template>
2 <b-container fluid="xl">
Sandeepa Singhf67f7692021-07-19 18:04:18 +05303 <page-title :description="$t('pageNetwork.pageDescription')" />
Dixsie Wolmersc4b87572021-10-07 16:15:50 -05004 <!-- Global settings for all interfaces -->
5 <network-global-settings />
6 <!-- Interface tabs -->
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -06007 <page-section v-show="ethernetData">
Dixsie Wolmersbb81d552020-02-26 19:52:28 -06008 <b-row>
Dixsie Wolmersc4b87572021-10-07 16:15:50 -05009 <b-col>
10 <b-card no-body>
11 <b-tabs
12 active-nav-item-class="font-weight-bold"
13 card
14 content-class="mt-3"
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060015 >
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050016 <b-tab
17 v-for="(data, index) in ethernetData"
18 :key="data.Id"
19 :title="data.Id"
20 @click="getTabIndex(index)"
21 >
22 <!-- Interface settings -->
23 <network-interface-settings :tab-index="tabIndex" />
24 <!-- IPV4 table -->
25 <table-ipv-4 :tab-index="tabIndex" />
Sean Zhangdb47b7e2024-06-12 10:28:41 +030026 <!-- IPV6 table -->
27 <table-ipv-6 :tab-index="tabIndex" />
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050028 <!-- Static DNS table -->
29 <table-dns :tab-index="tabIndex" />
30 </b-tab>
31 </b-tabs>
32 </b-card>
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060033 </b-col>
34 </b-row>
35 </page-section>
Dixsie Wolmersb34349d2021-11-02 22:06:35 -050036 <!-- Modals -->
37 <modal-ipv4 :default-gateway="defaultGateway" @ok="saveIpv4Address" />
Sean Zhangdb47b7e2024-06-12 10:28:41 +030038 <modal-ipv6 @ok="saveIpv6Address" />
Dixsie Wolmersb34349d2021-11-02 22:06:35 -050039 <modal-dns @ok="saveDnsAddress" />
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -060040 <modal-hostname :hostname="currentHostname" @ok="saveSettings" />
41 <modal-mac-address :mac-address="currentMacAddress" @ok="saveSettings" />
Sean Zhangdb47b7e2024-06-12 10:28:41 +030042 <modal-default-gateway
43 :default-gateway="ipv6DefaultGateway"
44 @ok="saveSettings"
45 />
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060046 </b-container>
47</template>
48
49<script>
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060050import BVToastMixin from '@/components/Mixins/BVToastMixin';
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050051import DataFormatterMixin from '@/components/Mixins/DataFormatterMixin';
Yoshie Muranakad73f4962020-12-09 08:52:23 -080052import LoadingBarMixin, { loading } from '@/components/Mixins/LoadingBarMixin';
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -060053import ModalMacAddress from './ModalMacAddress.vue';
Sean Zhangdb47b7e2024-06-12 10:28:41 +030054import ModalDefaultGateway from './ModalDefaultGateway.vue';
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -060055import ModalHostname from './ModalHostname.vue';
Dixsie Wolmersb34349d2021-11-02 22:06:35 -050056import ModalIpv4 from './ModalIpv4.vue';
Sean Zhangdb47b7e2024-06-12 10:28:41 +030057import ModalIpv6 from './ModalIpv6.vue';
Dixsie Wolmersb34349d2021-11-02 22:06:35 -050058import ModalDns from './ModalDns.vue';
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050059import NetworkGlobalSettings from './NetworkGlobalSettings.vue';
60import NetworkInterfaceSettings from './NetworkInterfaceSettings.vue';
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060061import PageSection from '@/components/Global/PageSection';
62import PageTitle from '@/components/Global/PageTitle';
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050063import TableIpv4 from './TableIpv4.vue';
Sean Zhangdb47b7e2024-06-12 10:28:41 +030064import TableIpv6 from './TableIpv6.vue';
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050065import TableDns from './TableDns.vue';
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060066import { mapState } from 'vuex';
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060067
68export default {
Sandeepa Singhf67f7692021-07-19 18:04:18 +053069 name: 'Network',
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060070 components: {
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -060071 ModalHostname,
72 ModalMacAddress,
Sean Zhangdb47b7e2024-06-12 10:28:41 +030073 ModalDefaultGateway,
Dixsie Wolmersb34349d2021-11-02 22:06:35 -050074 ModalIpv4,
Sean Zhangdb47b7e2024-06-12 10:28:41 +030075 ModalIpv6,
Dixsie Wolmersb34349d2021-11-02 22:06:35 -050076 ModalDns,
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050077 NetworkGlobalSettings,
78 NetworkInterfaceSettings,
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060079 PageSection,
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050080 PageTitle,
81 TableDns,
82 TableIpv4,
Sean Zhangdb47b7e2024-06-12 10:28:41 +030083 TableIpv6,
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060084 },
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050085 mixins: [BVToastMixin, DataFormatterMixin, LoadingBarMixin],
Derick Montague602e98a2020-10-21 16:20:00 -050086 beforeRouteLeave(to, from, next) {
87 this.hideLoader();
88 next();
89 },
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060090 data() {
91 return {
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -060092 currentHostname: '',
93 currentMacAddress: '',
Dixsie Wolmersb34349d2021-11-02 22:06:35 -050094 defaultGateway: '',
Sean Zhangdb47b7e2024-06-12 10:28:41 +030095 ipv6DefaultGateway: '',
Yoshie Muranakad73f4962020-12-09 08:52:23 -080096 loading,
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050097 tabIndex: 0,
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060098 };
99 },
100 computed: {
Dixsie Wolmersc4b87572021-10-07 16:15:50 -0500101 ...mapState('network', ['ethernetData']),
Dixsie Wolmersbb81d552020-02-26 19:52:28 -0600102 },
Dixsie Wolmersb34349d2021-11-02 22:06:35 -0500103 watch: {
104 ethernetData() {
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -0600105 this.getModalInfo();
Dixsie Wolmersb34349d2021-11-02 22:06:35 -0500106 },
107 },
Dixsie Wolmersbb81d552020-02-26 19:52:28 -0600108 created() {
109 this.startLoader();
Dixsie Wolmersc4b87572021-10-07 16:15:50 -0500110 const globalSettings = new Promise((resolve) => {
111 this.$root.$on('network-global-settings-complete', () => resolve());
112 });
113 const interfaceSettings = new Promise((resolve) => {
114 this.$root.$on('network-interface-settings-complete', () => resolve());
115 });
116 const networkTableDns = new Promise((resolve) => {
117 this.$root.$on('network-table-dns-complete', () => resolve());
118 });
119 const networkTableIpv4 = new Promise((resolve) => {
120 this.$root.$on('network-table-ipv4-complete', () => resolve());
121 });
Sean Zhangdb47b7e2024-06-12 10:28:41 +0300122 const networkTableIpv6 = new Promise((resolve) => {
123 this.$root.$on('network-table-ipv6-complete', () => resolve());
124 });
Dixsie Wolmersc4b87572021-10-07 16:15:50 -0500125 // Combine all child component Promises to indicate
126 // when page data load complete
127 Promise.all([
128 this.$store.dispatch('network/getEthernetData'),
129 globalSettings,
130 interfaceSettings,
131 networkTableDns,
132 networkTableIpv4,
Sean Zhangdb47b7e2024-06-12 10:28:41 +0300133 networkTableIpv6,
Dixsie Wolmersc4b87572021-10-07 16:15:50 -0500134 ]).finally(() => this.endLoader());
Dixsie Wolmersbb81d552020-02-26 19:52:28 -0600135 },
Dixsie Wolmersbb81d552020-02-26 19:52:28 -0600136 methods: {
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -0600137 getModalInfo() {
Ed Tanous81323992024-02-27 11:26:24 -0800138 this.defaultGateway =
139 this.$store.getters['network/globalNetworkSettings'][
140 this.tabIndex
141 ].defaultGateway;
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -0600142
Ed Tanous81323992024-02-27 11:26:24 -0800143 this.currentHostname =
144 this.$store.getters['network/globalNetworkSettings'][
145 this.tabIndex
146 ].hostname;
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -0600147
Ed Tanous81323992024-02-27 11:26:24 -0800148 this.currentMacAddress =
149 this.$store.getters['network/globalNetworkSettings'][
150 this.tabIndex
151 ].macAddress;
Sean Zhangdb47b7e2024-06-12 10:28:41 +0300152 this.ipv6DefaultGateway =
153 this.$store.getters['network/globalNetworkSettings'][
154 this.tabIndex
155 ].ipv6DefaultGateway;
Dixsie Wolmersb34349d2021-11-02 22:06:35 -0500156 },
Dixsie Wolmersc4b87572021-10-07 16:15:50 -0500157 getTabIndex(selectedIndex) {
158 this.tabIndex = selectedIndex;
Dixsie Wolmersb34349d2021-11-02 22:06:35 -0500159 this.$store.dispatch('network/setSelectedTabIndex', this.tabIndex);
160 this.$store.dispatch(
161 'network/setSelectedTabId',
Ed Tanous81323992024-02-27 11:26:24 -0800162 this.ethernetData[selectedIndex].Id,
Dixsie Wolmersb34349d2021-11-02 22:06:35 -0500163 );
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -0600164 this.getModalInfo();
Dixsie Wolmersb34349d2021-11-02 22:06:35 -0500165 },
166 saveIpv4Address(modalFormData) {
167 this.startLoader();
168 this.$store
169 .dispatch('network/saveIpv4Address', modalFormData)
170 .then((message) => this.successToast(message))
171 .catch(({ message }) => this.errorToast(message))
172 .finally(() => this.endLoader());
173 },
Sean Zhangdb47b7e2024-06-12 10:28:41 +0300174 saveIpv6Address(modalFormData) {
175 this.startLoader();
176 this.$store
177 .dispatch('network/saveIpv6Address', modalFormData)
178 .then((message) => this.successToast(message))
179 .catch(({ message }) => this.errorToast(message))
180 .finally(() => this.endLoader());
181 },
Dixsie Wolmersb34349d2021-11-02 22:06:35 -0500182 saveDnsAddress(modalFormData) {
183 this.startLoader();
184 this.$store
185 .dispatch('network/saveDnsAddress', modalFormData)
186 .then((message) => this.successToast(message))
187 .catch(({ message }) => this.errorToast(message))
188 .finally(() => this.endLoader());
Derick Montague602e98a2020-10-21 16:20:00 -0500189 },
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -0600190 saveSettings(modalFormData) {
191 this.startLoader();
192 this.$store
193 .dispatch('network/saveSettings', modalFormData)
194 .then((message) => this.successToast(message))
195 .catch(({ message }) => this.errorToast(message))
196 .finally(() => this.endLoader());
197 },
Derick Montague602e98a2020-10-21 16:20:00 -0500198 },
Dixsie Wolmersbb81d552020-02-26 19:52:28 -0600199};
200</script>