From 02fdad7ff593342f9b0722ebc5dacfdfbb52218e Mon Sep 17 00:00:00 2001 From: adityaalfarison Date: Thu, 11 Sep 2025 15:15:47 +0700 Subject: [PATCH] validasi create akun dan edit akun --- resources/js/components/CreateAkun.vue | 102 ++++++++--- resources/js/components/EditAkun.vue | 244 +++++++++++++++---------- 2 files changed, 227 insertions(+), 119 deletions(-) diff --git a/resources/js/components/CreateAkun.vue b/resources/js/components/CreateAkun.vue index 3876180..0cd144b 100644 --- a/resources/js/components/CreateAkun.vue +++ b/resources/js/components/CreateAkun.vue @@ -7,33 +7,45 @@
- - -
- + + +

{{ errors.nama }}

+
+ + +
+ +

{{ errors.password }}

- - + +
+ + +

{{ errors.role }}

+
@@ -53,7 +65,7 @@
- +

{{ errorMessage }}

@@ -72,25 +84,65 @@ export default { data() { return { form: { nama: "", password: "", role: "" }, + errors: { nama: "", password: "", role: "" }, errorMessage: "", }; }, methods: { + clearError(field) { + this.errors[field] = ""; + this.errorMessage = ""; + }, + validateForm() { + let valid = true; + this.errors = { nama: "", password: "", role: "" }; + + if (!this.form.nama) { + this.errors.nama = "Nama wajib diisi"; + valid = false; + } + if (!this.form.password) { + this.errors.password = "Password wajib diisi"; + valid = false; + } else if (this.form.password.length < 6) { + this.errors.password = "Password minimal 6 karakter"; + valid = false; + } + if (!this.form.role) { + this.errors.role = "Role wajib dipilih"; + valid = false; + } else if (!["owner", "kasir"].includes(this.form.role)) { + this.errors.role = "Role harus owner atau kasir"; + valid = false; + } + + return valid; + }, async createAkun() { + if (!this.validateForm()) return; + try { - await axios.post("api/user", this.form, { + await axios.post("/api/user", this.form, { headers: { - Authorization: `Bearer ${localStorage.getItem( - "token" - )}`, + Authorization: `Bearer ${localStorage.getItem("token")}`, }, }); + + // reset form this.form = { nama: "", password: "", role: "" }; this.$emit("refresh"); this.$emit("close"); } catch (err) { - this.errorMessage = - err.response?.data?.message || "Gagal menambah akun."; + if (err.response?.status === 422 && err.response.data.errors) { + // tampilkan error validasi backend + const backendErrors = err.response.data.errors; + Object.keys(backendErrors).forEach((key) => { + this.errors[key] = backendErrors[key][0]; + }); + } else { + this.errorMessage = + err.response?.data?.message || "Gagal menambah akun."; + } console.error("Gagal tambah akun:", err); } }, diff --git a/resources/js/components/EditAkun.vue b/resources/js/components/EditAkun.vue index 3007cd0..9730213 100644 --- a/resources/js/components/EditAkun.vue +++ b/resources/js/components/EditAkun.vue @@ -1,118 +1,174 @@ + + - + }, + methods: { + clearError(field) { + this.errors[field] = ""; + this.errorMessage = ""; + }, + validateForm() { + let valid = true; + this.errors = { nama: "", password: "", role: "" }; + + if (!this.form.nama) { + this.errors.nama = "Nama wajib diisi"; + valid = false; + } + if (this.form.password && this.form.password.length < 6) { + this.errors.password = "Password minimal 6 karakter"; + valid = false; + } + if (!this.form.role) { + this.errors.role = "Role wajib dipilih"; + valid = false; + } else if (!["owner", "kasir"].includes(this.form.role)) { + this.errors.role = "Role harus owner atau kasir"; + valid = false; + } + + return valid; + }, + async updateAkun() { + if (!this.validateForm()) return; + + try { + const payload = { ...this.form }; + if (!payload.password) delete payload.password; + + await axios.put(`/api/user/${this.akun.id}`, payload, { + headers: { + Authorization: `Bearer ${localStorage.getItem("token")}`, + }, + }); + + this.$emit("refresh"); + this.$emit("close"); + } catch (err) { + if (err.response?.status === 422 && err.response.data.errors) { + const backendErrors = err.response.data.errors; + Object.keys(backendErrors).forEach((key) => { + this.errors[key] = backendErrors[key][0]; + }); + } else { + this.errorMessage = + err.response?.data?.message || "Gagal update akun."; + } + console.error("Gagal update akun:", err); + } + }, + }, +}; +