Tambahan ambil foto

This commit is contained in:
Muhammad Raihan Surya 2023-12-11 10:53:14 +07:00
parent 7034f1a669
commit e700439ecf
4 changed files with 156 additions and 66 deletions

View File

@ -94,6 +94,7 @@ class LoginController extends Controller
public function register(Request $request)
{
// return response()->json($request->all());
$request->validate(
[
'nama_depan' => ['required'],
@ -159,7 +160,7 @@ class LoginController extends Controller
'nohp.required' => 'No HP harus dimasukan.',
'nohp.min' => 'No HP memiliki minimal 10 angka.',
'verification_status.boolean' => 'Masa berlaku kode verifikasi sudah habis. Silahkan lakukan verifikasi lagi.',
'verification_status.in' => 'Masa berlaku kode verifikasi sudah habis. Silahkan lakukan verifikasi lagi.',
],
);

View File

@ -128,6 +128,8 @@ document.addEventListener("DOMContentLoaded", function () {
const startButtonKtp = document.getElementById("startButtonKtp");
const refreshButtonKtp = document.getElementById("refreshButtonKtp");
const imageHolderKtp = document.getElementById("imageHolderKtp");
const selectImageKtp = document.getElementById("gambarKtp");
const inputImageKtp = document.getElementById("ambilKtp");
const videoElementEkyc = document.getElementById("webcamEkyc");
const captureButtonEkyc = document.getElementById("captureButtonEkyc");
@ -135,6 +137,8 @@ document.addEventListener("DOMContentLoaded", function () {
const startButtonEkyc = document.getElementById("startButtonEkyc");
const refreshButtonEkyc = document.getElementById("refreshButtonEkyc");
const imageHolderEkyc = document.getElementById("imageHolderEkyc");
const selectImageEkyc = document.getElementById("gambarEkyc");
const inputImageEkyc = document.getElementById("ambilEkyc");
// Inisialisasi status kamera
let ktpStream = null;
@ -175,6 +179,8 @@ document.addEventListener("DOMContentLoaded", function () {
}
startButtonKtp.addEventListener("click", function () {
clearPhoto(fotoInputKtp, document.getElementById("foto-preview-ktp"));
if (ktpStream) {
// Matikan kamera jika sudah aktif
turnOffCamera(ktpStream, videoElementKtp, startButtonKtp);
@ -186,6 +192,7 @@ document.addEventListener("DOMContentLoaded", function () {
ktpStream = null;
imageHolderKtp.style.display = "block";
captureButtonKtp.style.display = "none";
selectImageKtp.style.display = "block";
} else {
// Aktifkan kamera jika belum aktif
navigator.mediaDevices
@ -195,6 +202,7 @@ document.addEventListener("DOMContentLoaded", function () {
turnOnCamera(ktpStream, videoElementKtp, startButtonKtp);
imageHolderKtp.style.display = "none";
captureButtonKtp.style.display = "block";
selectImageKtp.style.display = "none";
})
.catch(function (error) {
Swal.fire({
@ -207,6 +215,8 @@ document.addEventListener("DOMContentLoaded", function () {
});
startButtonEkyc.addEventListener("click", function () {
clearPhoto(fotoInputEkyc, document.getElementById("foto-preview-ekyc"));
if (ekycStream) {
// Matikan kamera jika sudah aktif
turnOffCamera(ekycStream, videoElementEkyc, startButtonEkyc);
@ -218,6 +228,7 @@ document.addEventListener("DOMContentLoaded", function () {
ekycStream = null;
imageHolderEkyc.style.display = "block";
captureButtonEkyc.style.display = "none";
selectImageEkyc.style.display = "block";
} else {
// Aktifkan kamera jika belum aktif
navigator.mediaDevices
@ -227,6 +238,7 @@ document.addEventListener("DOMContentLoaded", function () {
turnOnCamera(ekycStream, videoElementEkyc, startButtonEkyc);
imageHolderEkyc.style.display = "none";
captureButtonEkyc.style.display = "block";
selectImageEkyc.style.display = "none";
})
.catch(function (error) {
Swal.fire({
@ -265,6 +277,7 @@ document.addEventListener("DOMContentLoaded", function () {
refreshButtonKtp.style.display = "none";
captureButtonKtp.style.display = "block";
startButtonKtp.style.display = "block";
selectImageKtp.style.display = "none";
});
refreshButtonEkyc.addEventListener("click", function () {
@ -294,8 +307,22 @@ document.addEventListener("DOMContentLoaded", function () {
refreshButtonEkyc.style.display = "none";
captureButtonEkyc.style.display = "block";
startButtonEkyc.style.display = "block";
selectImageEkyc.style.display = "none";
});
function dataURLtoBlob(dataURL) {
const byteString = atob(dataURL.split(",")[1]);
const mimeString = dataURL.split(",")[0].split(":")[1].split(";")[0];
const ab = new ArrayBuffer(byteString.length);
const ia = new Uint8Array(ab);
for (let i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
return new Blob([ab], { type: mimeString });
}
captureButtonKtp.addEventListener("click", function () {
if (ktpStream) {
const canvas = document.createElement("canvas");
@ -323,6 +350,7 @@ document.addEventListener("DOMContentLoaded", function () {
refreshButtonKtp.style.display = "block";
captureButtonKtp.style.display = "none";
startButtonKtp.style.display = "none";
selectImageKtp.style.display = "block";
}
});
@ -353,53 +381,96 @@ document.addEventListener("DOMContentLoaded", function () {
refreshButtonEkyc.style.display = "block";
captureButtonEkyc.style.display = "none";
startButtonEkyc.style.display = "none";
selectImageEkyc.style.display = "block";
}
});
//gambar untuk foto wajah
var uploadInput = document.getElementById('fotoEkyc');
var imageHolder = document.getElementById('imageHolderEkyc');
var gambarButton = document.getElementById('gambarEkyc');
gambarButton.addEventListener('click', function() {
uploadInput.click();
});
uploadInput.addEventListener('change', function(event) {
var file = event.target.files[0];
// gambar untuk foto wajah
inputImageKtp.addEventListener("change", function (event) {
const file = event.target.files[0];
imageHolderKtp.style.display = "none";
if (file) {
var reader = new FileReader();
reader.onload = function() {
imageHolder.src = reader.result; // Mengubah sumber gambar pada elemen img dengan ID imageHolderEkyc
const reader = new FileReader();
reader.onload = function (event) {
const imageDataUrl = event.target.result;
// Buat elemen gambar sementara
const img = new Image();
img.onload = function () {
const canvas = document.createElement("canvas");
const ctx = canvas.getContext("2d");
// Set ukuran canvas sesuai dengan gambar
canvas.width = img.width;
canvas.height = img.height;
// Gambar gambar ke dalam canvas
ctx.drawImage(img, 0, 0);
// Ambil data URL dalam format JPEG dari canvas
const fotoDataUrl = canvas.toDataURL("image/jpeg");
const fotoPreview =
document.getElementById("foto-preview-ktp");
fotoPreview.innerHTML =
'<img src="' + fotoDataUrl + '" alt="Foto">';
fotoInputKtp.value = fotoDataUrl;
};
// Set data URL gambar ke elemen gambar
img.src = imageDataUrl;
};
reader.readAsDataURL(file); // Membaca file gambar sebagai URL data
reader.readAsDataURL(file);
}
});
//gambar foto ktp
var uploadInput = document.getElementById('fotoKtp');
var imageHolder = document.getElementById('imageHolderKtp');
var gambarButton = document.getElementById('gambarKtp');
gambarButton.addEventListener('click', function() {
uploadInput.click();
});
uploadInput.addEventListener('change', function(event) {
var file = event.target.files[0];
inputImageEkyc.addEventListener("change", function (event) {
const file = event.target.files[0];
imageHolderEkyc.style.display = "none";
if (file) {
var reader = new FileReader();
reader.onload = function() {
imageHolder.src = reader.result; // Mengubah sumber gambar pada elemen img dengan ID imageHolderEkyc
const reader = new FileReader();
reader.onload = function (event) {
const imageDataUrl = event.target.result;
// Buat elemen gambar sementara
const img = new Image();
img.onload = function () {
const canvas = document.createElement("canvas");
const ctx = canvas.getContext("2d");
// Set ukuran canvas sesuai dengan gambar
canvas.width = img.width;
canvas.height = img.height;
// Gambar gambar ke dalam canvas
ctx.drawImage(img, 0, 0);
// Ambil data URL dalam format JPEG dari canvas
const fotoDataUrl = canvas.toDataURL("image/jpeg");
const fotoPreview =
document.getElementById("foto-preview-ekyc");
fotoPreview.innerHTML =
'<img src="' + fotoDataUrl + '" alt="Foto">';
fotoInputEkyc.value = fotoDataUrl;
};
// Set data URL gambar ke elemen gambar
img.src = imageDataUrl;
};
reader.readAsDataURL(file); // Membaca file gambar sebagai URL data
reader.readAsDataURL(file);
}
});
});
/******************************************
* END KTP & E-KYC CAMERA

View File

@ -391,7 +391,6 @@
icon: "error",
});
}
console.log(error);
},
});
});

View File

@ -141,26 +141,25 @@
<div class="input-field-signup-flex">
<i class="fas fa-user"></i>
<input type="text" placeholder="Nama Depan" class="first-name-input"
name="nama_depan" required />
name="nama_depan" />
</div>
<div class="input-field-signup-flex" style="margin-left: 3%">
<i class="fas fa-user"></i>
<input type="text" placeholder="Nama Belakang" class="last-name-input"
name="nama_belakang" required />
name="nama_belakang">
</div>
</div>
<div class="input-field up">
<i class="fa fa-id-card" aria-hidden="true"></i>
<input type="text" placeholder="NIK" class="email-input" name="nik"
maxlength="16"
oninput="this.value = this.value.replace(/[^0-9]/g, '').substring(0, 16);"
required />
oninput="this.value = this.value.replace(/[^0-9]/g, '').substring(0, 16);" />
</div>
<div class="flex-input-btn">
<div class="input">
<i class="fa fa-envelope" aria-hidden="true"></i>
<input type="email" placeholder="Email" class="email-input" name="new_email"
id="newEmail" required />
id="newEmail">
</div>
<button id="verifikasiEmail" class="btn-otp" type="button"
disabled=true>Verifikasi</button>
@ -169,20 +168,20 @@
<i class="fa fa-ellipsis-h" aria-hidden="true"></i>
<input type="text" class="telp-input-signup"
oninput="this.value = this.value.replace(/[^0-9]/g, '').substring(0, 6);"
placeholder="Kode Verifikasi Email" name="email_verification" required
placeholder="Kode Verifikasi Email" name="email_verification"
id="emailVerification">
</div>
<div class="input-field up">
<i class="fa fa-phone" aria-hidden="true"></i>
<input type="text" class="telp-input-signup" maxlength="13"
oninput="this.value = this.value.replace(/[^0-9]/g, '').substring(0, 15);"
placeholder="Nomer Telepon. cth: 08xxx" name="nohp" required>
placeholder="Nomer Telepon. cth: 08xxx" name="nohp">
</div>
<div style="display: flex;">
<div class="input-field-signup-flex up gender-select-menu" style="width: 190%">
<div class="gender-select-input" style="width: 100%; padding-left: 1rem;">
<select style="width: 190%;" class="gender-select" id="gender-select"
name="gender" required>
name="gender">
<option value="Laki-laki">Laki-laki</option>
<option value="Perempuan">Perempuan</option>
</select>
@ -190,8 +189,7 @@
</div>
<div class="input-field-signup-flex up" style="margin-left: 3%">
<i class="fa fa-calendar" aria-hidden="true"></i>
<input type="date" placeholder="Tanggal Lahir" name="tanggal_lahir"
required />
<input type="date" placeholder="Tanggal Lahir" name="tanggal_lahir" />
</div>
</div>
@ -230,14 +228,14 @@
<select id="selectVillage"
style="width: 100%; border: 1px solid transparent; margin-top: 0; outline: none;"
class="input-field" aria-label="Default select example"
name="village_code" required>
name="village_code">
</select>
</div>
</div>
<input type="text" class="input-field" id="alamat" name="alamat"
placeholder="Alamat lengkap Anda" cols="50" rows="4"
style="width: 190%; padding: 0rem 1rem;" required>
style="width: 190%; padding: 0rem 1rem;">
</div>
<!-- ======= END FORM ADDRESS ======= -->
@ -246,7 +244,7 @@
<div class="slider-container">
<div class="slider">
<div class="slide fade">
<div style="display: flex; flex-direction: column; align-items: center">
<div style="display: flex; flex-direction: column; align-items: center;">
<h3 style="">Foto KTP Anda</h3>
<div class="image-holder-ktp">
<img src="{{ asset('assets/images/dashboard/Asset 3.png') }}"
@ -254,12 +252,15 @@
</div>
<video id="webcamKtp" autoplay playsinline></video>
<div id="foto-preview-ktp"></div>
<input type="file" id="fotoKtp" name="wajah" accept="image/*" required style="display: none">
<div style="display: flex; margin-top: 1rem; gap:10px">
<input type="hidden" id="fotoKtp" name="ktp"
style="display: none;">
<div style="display: flex; margin-top: 1rem; gap:10px;">
<button type="button" class="btn-foto" id="startButtonKtp"
data-state="off">Mulai Kamera</button>
<button type="button" class="btn-foto" id="gambarKtp"
data-state="off">pilih Gambar</button>
<label for="ambilKtp" class="btn-foto text-center" id="gambarKtp"
data-state="off">Pilih Gambar KTP<input type="file"
id="ambilKtp" accept="image/*"
style="display: none;"></label>
<button type="button" class="btn-foto"
id="captureButtonKtp">Ambil Foto</button>
<button type="button" class="btn-foto"
@ -268,22 +269,23 @@
</div>
</div>
<div class="slide fade">
<div
style="display: flex; flex-direction: column; justify-content: center; align-items: center">
<div style="display: flex; flex-direction: column; align-items: center;">
<h3>Foto Wajah Anda</h3>
<div class="image-holder-ekyc">
<img class="image-holder-ekyc"
src="{{ asset('assets/images/dashboard/Asset 3.png') }}"
<img src="{{ asset('assets/images/dashboard/Asset 3.png') }}"
alt="logo ambil gambar" id="imageHolderEkyc">
</div>
<video id="webcamEkyc" autoplay playsinline></video>
<div id="foto-preview-ekyc"></div>
<input type="file" id="fotoEkyc" name="wajah" accept="image/*" required style="display: none">
<div style="display: flex; margin-top: 1rem gap: 10px">
<input type="hidden" id="fotoEkyc" name="wajah" accept="image/*"
style="display: none;">
<div style="display: flex; margin-top: 1rem; gap: 10px;">
<button type="button" class="btn-foto" id="startButtonEkyc"
data-state="off">Mulai Kamera</button>
<button type="button" class="btn-foto" id="gambarEkyc"
data-state="off">Pilih gambar</button>
<label for="ambilEkyc" class="btn-foto text-center"
id="gambarEkyc" data-state="off">Pilih Foto Wajah<input
type="file" id="ambilEkyc" accept="image/*"
style="display: none;"></label>
<button type="button" class="btn-foto"
id="captureButtonEkyc">Ambil Foto</button>
<button type="button" class="btn-foto"
@ -310,12 +312,12 @@
<div class="input-field-signup-flex">
<i class="fa fa-unlock-alt" aria-hidden="true"></i>
<input type="password" class="pin-input" placeholder="Password"
name="new_password" required>
name="new_password">
</div>
<div class="input-field-signup-flex" style="margin-left: 3%">
<i class="fa fa-unlock-alt" aria-hidden="true"></i>
<input type="password" class="konfir-pin-input"
placeholder="Konfirmasi Password" name="confirm_password" required>
placeholder="Konfirmasi Password" name="confirm_password">
</div>
</div>
@ -665,17 +667,34 @@
confirmButtonText: 'OK',
}).then(function() {
if (response.status) {
console.log(response);
location.reload();
}
});
},
error: function(error) {
Swal.fire({
title: 'Gagal',
text: 'Ada form yang kosong atau kesalahan internet. penyebab ' +
error,
icon: 'error',
});
if (error.responseJSON && error.responseJSON.errors) {
let errorMessage = "Terdapat beberapa kesalahan:<br>";
const errors = error.responseJSON.errors;
for (let key in errors) {
errorMessage += `${errors[key].join(', ')}<br>`;
}
Swal.fire({
title: "Gagal",
html: errorMessage,
icon: "error",
});
} else {
Swal.fire({
title: "Gagal",
text: "Gagal mengirimkan data karena " + error
.statusText,
icon: "error",
});
}
}
});
});