sistem_rekomendasi/resources/views/admin/alumni/alumnicreate.blade.php

166 lines
6.0 KiB
PHP

@extends('admin.layout')
@section('content')
<link rel="stylesheet" href="{{ asset('css/fitur-admin.css') }}">
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<div class="dashboard-section d-flex justify-content-center">
<div style="width: 100%; max-width: 700px;">
<div class="mb-4 text-center">
<h4 class="fw-bold text-dark">Tambah Data Alumni</h4>
<p class="text-muted small">Input data historis untuk memperkuat akurasi algoritma Random Forest.</p>
</div>
<div class="card border-0 shadow-sm rounded-4">
<div class="card-body p-5">
<form id="formCreateAlumni">
<div class="row g-4">
<div class="col-md-12 form-group-custom">
<label>Nama Lengkap Alumni</label>
<input type="text" id="nama_alumni" class="form-control input-custom" placeholder="Contoh: Ahmad Fauzi" required>
</div>
<div class="col-md-12 form-group-custom">
<label>Perguruan Tinggi</label>
<input type="text" id="perguruan_tinggi" class="form-control input-custom" placeholder="Contoh: Universitas Indonesia" required>
</div>
<div class="col-md-12 form-group-custom">
<label>Jurusan Kuliah yang Diambil</label>
<input type="text" id="jurusan_diambil" class="form-control input-custom" placeholder="Contoh: Teknik Informatika" required>
</div>
</div>
<div class="mt-5 d-flex gap-2 justify-content-end">
<button type="submit" id="btnSave" class="btn text-white px-5 shadow-sm" style="background-color: var(--primary-green); border-radius: 10px;">
Simpan Alumni
</button>
<a href="{{ route('admin.alumni') }}" class="btn btn-light px-4" style="border-radius: 10px;">
Batal
</a>
</div>
</form>
</div>
</div>
</div>
</div>
<script>
function getAppBaseUrl() {
const origin = window.location.origin;
const segments = window.location.pathname.split('/').filter(Boolean);
const adminIndex = segments.indexOf('admin');
if (adminIndex > 0) {
return origin + '/' + segments.slice(0, adminIndex).join('/');
}
return origin;
}
const APP_BASE_URL = getAppBaseUrl();
const API_ALUMNI_URL = `${APP_BASE_URL}/api/admin/alumni`;
const LOGIN_URL = `${APP_BASE_URL}/login`;
const ALUMNI_INDEX_URL = `${APP_BASE_URL}/admin/alumni`;
function getToken() {
return localStorage.getItem('access_token') ||
localStorage.getItem('token') ||
sessionStorage.getItem('access_token') ||
sessionStorage.getItem('token') ||
'';
}
function getValue(id) {
return document.getElementById(id).value.trim();
}
async function parseJsonResponse(response) {
const text = await response.text();
try {
return text ? JSON.parse(text) : {};
} catch (error) {
return {
success: false,
message: text || response.statusText || 'Respon server tidak valid.'
};
}
}
function formatErrors(errors) {
if (!errors) return '';
return Object.values(errors)
.flat()
.map(item => String(item))
.join('<br>');
}
document.getElementById('formCreateAlumni').addEventListener('submit', async function (e) {
e.preventDefault();
const token = getToken();
if (!token) {
Swal.fire('Sesi Berakhir', 'Silakan login ulang.', 'warning')
.then(() => window.location.href = LOGIN_URL);
return;
}
const btn = document.getElementById('btnSave');
btn.disabled = true;
btn.innerText = 'Menyimpan...';
const payload = {
nama_alumni: getValue('nama_alumni'),
perguruan_tinggi: getValue('perguruan_tinggi'),
jurusan_diambil: getValue('jurusan_diambil')
};
try {
const response = await fetch(API_ALUMNI_URL, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + token,
'Accept': 'application/json'
},
body: JSON.stringify(payload)
});
const result = await parseJsonResponse(response);
if (response.status === 401 || response.status === 403) {
Swal.fire('Sesi Berakhir', 'Silakan login ulang.', 'warning')
.then(() => window.location.href = LOGIN_URL);
return;
}
if (response.ok && result.success !== false) {
Swal.fire({
icon: 'success',
title: 'Berhasil!',
text: result.message || 'Data alumni berhasil ditambahkan.',
confirmButtonColor: '#2D7A47'
}).then(() => {
window.location.href = ALUMNI_INDEX_URL;
});
} else {
Swal.fire({
icon: 'warning',
title: 'Gagal!',
html: formatErrors(result.errors) || result.message || 'Cek kembali data yang dimasukkan.',
confirmButtonColor: '#2D7A47'
});
}
} catch (error) {
Swal.fire('Error!', error.message || 'Gagal menghubungi server.', 'error');
} finally {
btn.disabled = false;
btn.innerText = 'Simpan Alumni';
}
});
</script>
@endsection