Untitled

 avatar
unknown
plain_text
10 months ago
3.5 kB
14
Indexable
<template>
  <div class="d-flex pa-5 ga-5">

    <v-sheet class="border-sm rounded-lg elevation-3" width="30%">
      <v-toolbar density="compact" title="Employee Form"></v-toolbar>

      <v-form ref="myForm" class="pa-5">
        <v-text-field v-model="formData.id" label="ID" />

        <v-text-field
          v-model="formData.name"
          label="Name"
          :rules="[rules.required]"
        />

        <v-text-field
          v-model="formData.age"
          label="Age"
          :rules="[rules.required]"
        />

        <v-text-field
          v-model="formData.department_id"
          label="Department ID"
          :rules="[rules.required]"
        />

        <v-text-field
          v-model="formData.section_id"
          label="Section ID"
          :rules="[rules.required]"
        />

        <v-text-field
          v-model="formData.team_id"
          label="Team ID"
          :rules="[rules.required]"
        />

        <v-text-field v-model="formData.created_at" label="Created Date" />
        <v-text-field v-model="formData.updated_at" label="Updated Date" />
        <v-text-field v-model="formData.deleted_at" label="Deleted Date" />

        <v-btn color="primary" class="mr-3" @click="insertData">
          Confirm
        </v-btn>
        <v-btn color="warning" variant="outlined" @click="clear">
          Cancel
        </v-btn>
      </v-form>
    </v-sheet>


    <v-sheet class="border-sm rounded-lg elevation-3" width="70%">
      <v-toolbar density="compact" title="Employee List">
        <v-btn icon="mdi-autorenew" @click="fetchData"></v-btn>
      </v-toolbar>

      <v-data-table
        :headers="headers"
        :items="tableData"
        :loading="isLoading"
        class="pa-5"
      />
    </v-sheet>
  </div>
</template>

<script setup>
import axios from 'axios';
import { ref, onMounted } from 'vue';

const formData = ref({
  id: null,
  name: null,
  age: null,
  department_id: null,
  section_id: null,
  team_id: null,
  created_at: null,
  updated_at: null,
  deleted_at: null,
});

const tableData = ref([]);
const isLoading = ref(true);
const myForm = ref(null);

const rules = {
  required: (val) => !!val || 'Required (empty not allowed)',
};

const headers = ref([
  { text: 'ID', value: 'id' },
  { text: 'Name', value: 'name' },
  { text: 'Age', value: 'age' },
  { text: 'Department ID', value: 'department_id' },
  { text: 'Section ID', value: 'section_id' },
  { text: 'Team ID', value: 'team_id' },
  { text: 'Created At', value: 'created_at' },
  { text: 'Updated At', value: 'updated_at' },
  { text: 'Deleted At', value: 'deleted_at' },
]);

function clear() {
  myForm.value.reset();
}

function insertData() {
  const isComplete = myForm.value.validate();
  if (!isComplete) return;

  isLoading.value = true;
  axios
    .put('api/training/insert', formData.value)
    .then(() => {
      fetchData();
    })
    .catch((err) => {
      console.error('Error in insertData():', err);
      isLoading.value = false;
    });
}

function fetchData() {
  isLoading.value = true;
  axios
    .get('api/training/fetch')
    .then((response) => {

      tableData.value = response.data.data || response.data || [];
      isLoading.value = false;
    })
    .catch((error) => {
      console.error('Error in fetchData():', error);
      isLoading.value = false;
    });
}

onMounted(() => {
  fetchData();
});
</script>
Editor is loading...
Leave a Comment