The following code is not complete, but I wanted to create a method in pages/configurations.vue that called this.getTags() in setselectedMainMenu and this getTags() is in the sampleTypeModal.vue component. getSampleType is working, but how it is being called in the sampleTypes.vue component ends up being different, how can I call getTags correctly?
pages/configurations.vue
<template>
<acc-layout-side-menu>
<!-- Tabela Steps-->
<sample-types
v-if="selectedMainMenu == 4"
ref="sampleType"
class="full-height"
></sample-types>
</acc-layout-side-menu>
</template>
<script>
import SampleTypes from '@/components/configurations/sampleTypes.vue';
export default {
name: 'configurations',
components: {
SampleTypes
},
data() {
return {
//Menu Lateral
selectedMainMenu: '1',
}
},
methods: {
setselectedMainMenu(id){
this.selectedMainMenu = id;
localStorage.setItem('selectedMainMenu', id);
switch(this.selectedMainMenu){
case '1':
break
case '2':
break
case '3':
this.getStepsList();
break
case '4':
this.getSampleType();
this.getTags();
break
default:
return;
}
},
getSampleType() {
this.$nextTick(()=> {
this.$refs.sampleType.getSampleType();
})
},
},
mounted() {
this.selectedMainMenu = '1';
}
}
</script>
@/components/configurations/Modals/sampleTypeModal.vue
<acc-data-table-v2
:data="data2"
:columns="columns2"
>
</acc-data-table-v2>
<!-- Modal -->
<sample-type-modal
:visible.sync="isModalVisible"
:modalTitle="modalTitle"
:rowData="clickedRow"
:rowData2="[]"
:selectedSampleType="selectedSampleType"
@refresh="getSampleType"
/>
</div>
<script>
import sampleTypeModal from '@/components/configurations/sampleType.vue';
export default {
name: "sampleTypes",
components: {sampleTypeModal},
props: {
},
data() {
return {
isModalVisible: false,
modalTitle: null,
selectedSampleType: null,
// Tabela
data2: [],
isLoading: false,
clickedRow: {},
clickedRow2: [],
}
},
methods: {
async getSampleType(searchParams) {
this.isLoading = true;
try {
const response = await this.$store.dispatch('getSampleTypeList', searchParams);
this.data2 = response.data.data.data;
this.lastPage = response.data.data.last_page;
this.rowsPerPage = response.data.data.per_page || 20;
this.currentPage = response.data.data.currentPage;
} catch (error) {
console.error('Error while fetching steps: ', error);
this.$notify_error();
} finally {
this.isLoading = false;
}
},
},
};
@/components/configurations/Modals/sampleTypeModal.vue
<template>
<acc-modal
:visible="visible"
:title="modalTitle"
@open="openModal"
>
<div class="custom-modal">
<acc-form ref="form" :model="form" :rules="formRules">
<div class="columns is-multiline">
<div class="column is-6 py-0">
<acc-form-item :label="$t('app.table.name')" prop="description">
<acc-input v-model="form.description" autocomplete="off"></acc-input>
</acc-form-item>
</div>
</div>
</acc-form>
</div>
</acc-modal>
</template>
<script>
export default{
name: 'sampleTypeModal',
data() {
return {
initialdata: null,
isLoading: false,
data2: [],
tags: [],
tagsdata: [
{ id: 1, print_tag_id: '', number_prints: 1, is_deleted: false, is_edited: false, is_new: false},
],
}
},
methods: {
getTags() {
this.$store.dispatch('getTagsList')
.then(response => {
if (response && response.data && response.data.data) {
this.tags = response.data.data;
} else {
console.error('Invalid response structure: ', response);
this.$notify_error('Invalid response structure');
}
})
.catch(error => {
console.error('Error while fetching sampleType: ', error);
this.$notify_error(error);
})
},
}
}
</script>