edit(update) working

This commit is contained in:
ATUL GUNJAL 2025-04-21 14:34:04 +05:30
parent 32830a9dd2
commit 7822f0938e

View File

@ -1,113 +1,114 @@
<template> <template>
<div class="p-6 max-w-2xl mx-auto"> <div class="p-6 max-w-2xl mx-auto">
<h2 class="text-2xl font-bold mb-6"> Edit Student</h2> <h2 class="text-2xl font-bold mb-6"> Edit Student</h2>
<form @submit.prevent="submitForm" class="space-y-4" v-if="form"> <form @submit.prevent="submitForm" class="space-y-4" v-if="form">
<div> <div>
<label class="block font-medium">Name</label> <label class="block font-medium">Name</label>
<input v-model="form.name" type="text" required class="input" /> <input v-model="form.name" type="text" required class="input" />
</div> </div>
<div> <div>
<label class="block font-medium">Email</label> <label class="block font-medium">Email</label>
<input v-model="form.email" type="email" required class="input" /> <input v-model="form.email" type="email" required class="input" />
</div> </div>
<div> <div>
<label class="block font-medium">Phone</label> <label class="block font-medium">Phone</label>
<input v-model="form.phone" type="text" required class="input" /> <input v-model="form.phone" type="text" required class="input" />
</div> </div>
<div> <div>
<label class="block font-medium">Date of Birth</label> <label class="block font-medium">Date of Birth</label>
<input v-model="form.dob" type="date" required class="input" /> <input v-model="form.dob" type="date" required class="input" />
</div> </div>
<div> <div>
<label class="block font-medium">Gender</label> <label class="block font-medium">Gender</label>
<select v-model="form.gender" required class="input"> <select v-model="form.gender" required class="input">
<option value="">Select Gender</option> <option value="">Select Gender</option>
<option value="male">Male</option> <option value="male">Male</option>
<option value="female">Female</option> <option value="female">Female</option>
</select> </select>
</div> </div>
<div> <div>
<label class="block font-medium">Class</label> <label class="block font-medium">Class</label>
<select v-model="form.class_id" required class="input"> <select v-model="form.class_id" required class="input">
<option value="">Select Class</option> <option value="">Select Class</option>
<option v-for="cls in classes" :key="cls.id" :value="cls.id"> <option v-for="cls in classes" :key="cls.id" :value="cls.id">
{{ cls.name }} - {{ cls.section }} {{ cls.name }} - {{ cls.section }}
</option> </option>
</select> </select>
</div> </div>
<button type="submit" class="bg-green-600 text-white px-4 py-2 rounded hover:bg-green-700"> <button type="submit" class="bg-green-600 text-white px-4 py-2 rounded hover:bg-green-700">
Update Student Update Student
</button> </button>
</form> </form>
<div v-else class="text-gray-500">Loading student info...</div> <div v-else class="text-gray-500">Loading student info...</div>
</div> </div>
</template> </template>
<script setup> <script setup>
import { ref, onMounted } from 'vue' import { ref, onMounted } from 'vue'
import { useRoute, useRouter } from 'vue-router' import { useRoute, useRouter } from 'vue-router'
import { useDirectus } from '../../app/composables/useDirectus' import { useDirectus } from '../../app/composables/useDirectus'
const directus = useDirectus() const { fetchCollection, updateItem } = useDirectus()
const route = useRoute() const route = useRoute()
const router = useRouter() const router = useRouter()
const studentId = route.query.id const studentId = route.query.id
const form = ref(null) const form = ref(null)
const classes = ref([]) const classes = ref([])
const fetchClasses = async () => { const fetchClasses = async () => {
try { try {
const { data } = await directus.items('classes').readByQuery({ classes.value = await fetchCollection('classes', {
fields: ['id', 'name', 'section'], fields: ['id', 'name', 'section'],
sort: ['name'] sort: ['name']
}) })
classes.value = data } catch (err) {
} catch (err) { console.error('Error loading classes:', err)
console.error('Error loading classes:', err)
}
} }
}
const fetchStudent = async () => { const fetchStudent = async () => {
try { try {
const student = await directus.items('students').readOne(studentId) const studentData = await fetchCollection('students', {
form.value = student filter: { id: { _eq: studentId } },
} catch (err) { limit: 1
console.error('Error loading student:', err) })
} form.value = studentData[0] // Get first item from array
} catch (err) {
console.error('Error loading student:', err)
} }
}
onMounted(async () => { onMounted(async () => {
await fetchClasses() await fetchClasses()
await fetchStudent() await fetchStudent()
}) })
const submitForm = async () => { const submitForm = async () => {
try { try {
await directus.items('students').updateOne(studentId, form.value) await updateItem('students', studentId, form.value)
alert('Student updated successfully!') alert('Student updated successfully!')
router.push('/students') router.push('/students')
} catch (err) { } catch (err) {
console.error('Error updating student:', err) console.error('Error updating student:', err)
alert('Failed to update student.') alert('Failed to update student.')
}
} }
</script> }
</script>
<style scoped>
.input {
width: 100%;
padding: 0.5rem;
border: 1px solid #ccc;
border-radius: 0.375rem;
}
</style>
<style scoped>
.input {
width: 100%;
padding: 0.5rem;
border: 1px solid #ccc;
border-radius: 0.375rem;
}
</style>