You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
140 lines
3.9 KiB
JavaScript
140 lines
3.9 KiB
JavaScript
import { defineStore } from 'pinia'
|
|
import api from '../axiosPostulante'
|
|
|
|
|
|
export const useExamenStore = defineStore('examenStore', {
|
|
state: () => ({
|
|
procesos: [],
|
|
areas: [],
|
|
examenActual: null,
|
|
preguntas: [],
|
|
cargando: false,
|
|
error: null,
|
|
}),
|
|
actions: {
|
|
// 1. Obtener procesos disponibles para el postulante
|
|
async fetchProcesos() {
|
|
try {
|
|
this.cargando = true
|
|
const { data } = await api.get('/examen/procesos')
|
|
this.procesos = data
|
|
} catch (e) {
|
|
this.error = e.response?.data?.message || e.message
|
|
} finally {
|
|
this.cargando = false
|
|
}
|
|
},
|
|
|
|
// 2. Obtener áreas por proceso
|
|
async fetchAreas(proceso_id) {
|
|
try {
|
|
this.cargando = true
|
|
const { data } = await api.get('/examen/areas', {
|
|
params: { proceso_id }
|
|
})
|
|
this.areas = data
|
|
} catch (e) {
|
|
this.error = e.response?.data?.message || e.message
|
|
} finally {
|
|
this.cargando = false
|
|
}
|
|
},
|
|
|
|
// 3. Crear examen (sin preguntas)
|
|
async crearExamen(area_proceso_id, pago = null) {
|
|
try {
|
|
this.cargando = true
|
|
const payload = { area_proceso_id, ...pago }
|
|
const { data } = await api.post('/examen/crear', payload)
|
|
this.examenActual = { id: data.examen_id }
|
|
return data
|
|
} catch (e) {
|
|
this.error = e.response?.data?.message || e.message
|
|
return { success: false, message: this.error }
|
|
} finally {
|
|
this.cargando = false
|
|
}
|
|
},
|
|
|
|
// 4. Obtener examen actual
|
|
async fetchExamenActual() {
|
|
try {
|
|
this.cargando = true
|
|
const { data } = await api.get('/examen/actual')
|
|
this.examenActual = data.examen
|
|
} catch (e) {
|
|
this.error = e.response?.data?.message || e.message
|
|
} finally {
|
|
this.cargando = false
|
|
}
|
|
},
|
|
|
|
// 5. Generar preguntas para un examen
|
|
async generarPreguntas(examenId) {
|
|
try {
|
|
this.cargando = true
|
|
const { data } = await api.post(`/examen/${examenId}/generar-preguntas`)
|
|
return data
|
|
} catch (e) {
|
|
this.error = e.response?.data?.message || e.message
|
|
return { success: false, message: this.error }
|
|
} finally {
|
|
this.cargando = false
|
|
}
|
|
},
|
|
|
|
// 6. Iniciar examen
|
|
async iniciarExamen(examenId) {
|
|
try {
|
|
this.cargando = true
|
|
const { data } = await api.post('/examen/iniciar', { examen_id: examenId })
|
|
this.examenActual = data.examen
|
|
this.preguntas = data.preguntas
|
|
return data
|
|
} catch (e) {
|
|
this.error = e.response?.data?.message || e.message
|
|
return { success: false, message: this.error }
|
|
} finally {
|
|
this.cargando = false
|
|
}
|
|
},
|
|
|
|
// 7. Responder pregunta
|
|
async responderPregunta(preguntaId, respuesta) {
|
|
try {
|
|
const { data } = await api.post(`/examen/pregunta/${preguntaId}/responder`, { respuesta })
|
|
// Actualizar pregunta local si es necesario
|
|
const index = this.preguntas.findIndex(p => p.id === preguntaId)
|
|
if (index !== -1) this.preguntas[index].respuesta = respuesta
|
|
return data
|
|
} catch (e) {
|
|
this.error = e.response?.data?.message || e.message
|
|
return { success: false, message: this.error }
|
|
}
|
|
},
|
|
|
|
// 8. Finalizar examen
|
|
async finalizarExamen(examenId) {
|
|
try {
|
|
const { data } = await api.post(`/examen/${examenId}/finalizar`)
|
|
this.examenActual = null
|
|
this.preguntas = []
|
|
return data
|
|
} catch (e) {
|
|
this.error = e.response?.data?.message || e.message
|
|
return { success: false, message: this.error }
|
|
}
|
|
},
|
|
|
|
// Limpiar estado
|
|
resetStore() {
|
|
this.procesos = []
|
|
this.areas = []
|
|
this.examenActual = null
|
|
this.preguntas = []
|
|
this.cargando = false
|
|
this.error = null
|
|
}
|
|
}
|
|
})
|