[Update] working flow pemesanan

This commit is contained in:
Baghaztra 2025-10-13 10:24:05 +07:00
parent 21afb74337
commit 4ce07faf34
3 changed files with 21 additions and 135 deletions

View File

@ -10,7 +10,7 @@ class PelangganSeeder extends Seeder
{
public function run(): void
{
Pelanggan::factory()->count(100)->create();
Pelanggan::factory(100)->create();
// $pelanggans = [
// [
// 'nama_pemesan' => 'Arief Dwi Wicaksono',

View File

@ -16,6 +16,7 @@ class TemplateSeeder extends Seeder
Template::create([
'nama_template' => 'Undangan Pernikahan Starter',
'slug' => 'undangan-pernikahan-starter',
'harga' => 100000,
'paket' => 'starter',
'form' => [
@ -42,6 +43,7 @@ class TemplateSeeder extends Seeder
Template::create([
'nama_template' => 'Undangan Pernikahan Basic',
'slug' => 'undangan-pernikahan-basic',
'harga' => 175000,
'paket' => 'basic',
'form' => [
@ -79,6 +81,7 @@ class TemplateSeeder extends Seeder
Template::create([
'nama_template' => 'Undangan Pernikahan Premium',
'slug' => 'undangan-pernikahan-premium',
'harga' => 350000,
'paket' => 'premium',
'form' => [
@ -134,60 +137,9 @@ class TemplateSeeder extends Seeder
'foto' => 'templates/Pernikahan.jpg',
]);
// Template Pernikahan Premium
Template::create([
'nama_template' => 'Undangan Pernikahan Premium',
'harga' => 250000,
'paket' => 'premium',
'form' => [
'fields' => [
['name' => 'nama_pemesan', 'label' => 'Nama Pemesan', 'type' => 'text', 'required' => true],
['name' => 'email', 'label' => 'Email', 'type' => 'email', 'required' => true],
['name' => 'no_telepon', 'label' => 'No Telepon', 'type' => 'text'],
['name' => 'nama_lengkap_pria', 'label' => 'Nama Lengkap Pria', 'type' => 'text'],
['name' => 'nama_panggilan_pria', 'label' => 'Nama Panggilan Pria', 'type' => 'text'],
['name' => 'nama_bapak_pria', 'label' => 'Nama Bapak Pria', 'type' => 'text'],
['name' => 'nama_ibu_pria', 'label' => 'Nama Ibu Pria', 'type' => 'text'],
['name' => 'instagram_pria', 'label' => 'Link Instagram Pria', 'type' => 'text'],
['name' => 'facebook_pria', 'label' => 'Link Facebook Pria', 'type' => 'text'],
['name' => 'twitter_pria', 'label' => 'Link Twitter Pria', 'type' => 'text'],
['name' => 'nama_lengkap_wanita', 'label' => 'Nama Lengkap Wanita', 'type' => 'text'],
['name' => 'nama_panggilan_wanita', 'label' => 'Nama Panggilan Wanita', 'type' => 'text'],
['name' => 'nama_bapak_wanita', 'label' => 'Nama Bapak Wanita', 'type' => 'text'],
['name' => 'nama_ibu_wanita', 'label' => 'Nama Ibu Wanita', 'type' => 'text'],
['name' => 'instagram_wanita', 'label' => 'Link Instagram Wanita', 'type' => 'text'],
['name' => 'facebook_wanita', 'label' => 'Link Facebook Wanita', 'type' => 'text'],
['name' => 'twitter_wanita', 'label' => 'Link Twitter Wanita', 'type' => 'text'],
['name' => 'cerita_kita', 'label' => 'Cerita Kita', 'type' => 'textarea'],
['name' => 'hari_tanggal_akad', 'label' => 'Hari & Tanggal Acara (Akad)', 'type' => 'date'],
['name' => 'waktu_akad', 'label' => 'Waktu Akad', 'type' => 'text'],
['name' => 'alamat_akad', 'label' => 'Alamat Akad', 'type' => 'text'],
['name' => 'link_gmaps_akad', 'label' => 'Link Gmaps Akad', 'type' => 'text'],
['name' => 'hari_tanggal_resepsi', 'label' => 'Hari & Tanggal Acara (Resepsi)', 'type' => 'date'],
['name' => 'waktu_resepsi', 'label' => 'Waktu Resepsi', 'type' => 'text'],
['name' => 'alamat_resepsi', 'label' => 'Alamat Resepsi', 'type' => 'text'],
['name' => 'link_gmaps_resepsi', 'label' => 'Link Gmaps Resepsi', 'type' => 'text'],
['name' => 'say_something', 'label' => 'Say Something', 'type' => 'textarea'],
['name' => 'rekening_1', 'label' => 'Rekening 1', 'type' => 'text'],
['name' => 'rekening_2', 'label' => 'Rekening 2', 'type' => 'text'],
['name' => 'rekening_3', 'label' => 'Rekening 3', 'type' => 'text'],
['name' => 'foto_1', 'label' => 'Foto 1', 'type' => 'file'],
['name' => 'foto_2', 'label' => 'Foto 2', 'type' => 'file'],
['name' => 'foto_3', 'label' => 'Foto 3', 'type' => 'file'],
['name' => 'foto_4', 'label' => 'Foto 4', 'type' => 'file'],
['name' => 'foto_5', 'label' => 'Foto 5', 'type' => 'file'],
['name' => 'foto_6', 'label' => 'Foto 6', 'type' => 'file'],
['name' => 'foto_7', 'label' => 'Foto 7', 'type' => 'file'],
['name' => 'foto_8', 'label' => 'Foto 8', 'type' => 'file'],
['name' => 'link_music', 'label' => 'Link Music', 'type' => 'text'],
]
],
'kategori_id' => $k1->id,
'foto' => 'templates/Pernikahan.jpg',
]);
Template::create([
'nama_template' => 'Undangan Ulang Tahun Starter',
'slug' => 'undangan-ulang-tahun-starter',
'harga' => 100000,
'paket' => 'starter',
'form' => [
@ -210,6 +162,7 @@ class TemplateSeeder extends Seeder
Template::create([
'nama_template' => 'Undangan Ulang Tahun Basic',
'slug' => 'undangan-ulang-tahun-basic',
'harga' => 175000,
'paket' => 'basic',
'form' => [
@ -242,6 +195,7 @@ class TemplateSeeder extends Seeder
Template::create([
'nama_template' => 'Undangan Ulang Tahun Premium',
'slug' => 'undangan-ulang-tahun-premium',
'harga' => 250000,
'paket' => 'premium',
'form' => [
@ -283,47 +237,9 @@ class TemplateSeeder extends Seeder
'foto' => 'templates/HBD.jpg',
]);
// Template Ulang Tahun Premium
Template::create([
'nama_template' => 'Undangan Ulang Tahun Premium',
'harga' => 200000,
'paket' => 'premium',
'form' => [
'fields' => [
['name' => 'nama_pemesan', 'label' => 'Nama Pemesan', 'type' => 'text', 'required' => true],
['name' => 'email', 'label' => 'Email', 'type' => 'email', 'required' => true],
['name' => 'no_telepon', 'label' => 'No Telepon', 'type' => 'text'],
['name' => 'nama_lengkap', 'label' => 'Nama Lengkap', 'type' => 'text'],
['name' => 'nama_panggilan', 'label' => 'Nama Panggilan', 'type' => 'text'],
['name' => 'nama_bapak', 'label' => 'Nama Bapak', 'type' => 'text'],
['name' => 'nama_ibu', 'label' => 'Nama Ibu', 'type' => 'text'],
['name' => 'umur_yang_dirayakan', 'label' => 'Umur Yang Dirayakan', 'type' => 'number'],
['name' => 'anak_ke', 'label' => 'Anak Ke', 'type' => 'number'],
['name' => 'instagram', 'label' => 'Link Instagram', 'type' => 'text'],
['name' => 'facebook', 'label' => 'Link Facebook', 'type' => 'text'],
['name' => 'twitter', 'label' => 'Link Twitter', 'type' => 'text'],
['name' => 'hari_tanggal_acara', 'label' => 'Hari & Tanggal Acara', 'type' => 'date'],
['name' => 'waktu', 'label' => 'Waktu', 'type' => 'text'],
['name' => 'alamat', 'label' => 'Alamat', 'type' => 'text'],
['name' => 'link_gmaps', 'label' => 'Link Gmaps', 'type' => 'text'],
['name' => 'say_something', 'label' => 'Say Something', 'type' => 'textarea'],
['name' => 'rekening_1', 'label' => 'Rekening 1', 'type' => 'text'],
['name' => 'rekening_2', 'label' => 'Rekening 2', 'type' => 'text'],
['name' => 'rekening_3', 'label' => 'Rekening 3', 'type' => 'text'],
['name' => 'foto_1', 'label' => 'Foto 1', 'type' => 'file'],
['name' => 'foto_2', 'label' => 'Foto 2', 'type' => 'file'],
['name' => 'foto_3', 'label' => 'Foto 3', 'type' => 'file'],
['name' => 'foto_4', 'label' => 'Foto 4', 'type' => 'file'],
['name' => 'foto_5', 'label' => 'Foto 5', 'type' => 'file'],
['name' => 'link_music', 'label' => 'Link Music', 'type' => 'text'],
]
],
'kategori_id' => $k2->id,
'foto' => 'templates/HBD.jpg',
]);
Template::create([
'nama_template' => 'Undangan Khitan Starter',
'slug' => 'undangan-khitan-starter',
'harga' => 100000,
'paket' => 'starter',
'form' => [
@ -347,6 +263,7 @@ class TemplateSeeder extends Seeder
Template::create([
'nama_template' => 'Undangan Khitan Basic',
'slug' => 'undangan-khitan-basic',
'harga' => 175000,
'paket' => 'basic',
'form' => [
@ -378,6 +295,7 @@ class TemplateSeeder extends Seeder
Template::create([
'nama_template' => 'Undangan Khitan Premium',
'slug' => 'undangan-khitan-premium',
'harga' => 250000,
'paket' => 'premium',
'form' => [
@ -420,43 +338,5 @@ class TemplateSeeder extends Seeder
'kategori_id' => $k3->id,
'foto' => 'templates/Khitan.jpg',
]);
// Template Khitan Premium
Template::create([
'nama_template' => 'Undangan Khitan Premium',
'harga' => 180000,
'paket' => 'premium',
'form' => [
'fields' => [
['name' => 'nama_pemesan', 'label' => 'Nama Pemesan', 'type' => 'text', 'required' => true],
['name' => 'email', 'label' => 'Email', 'type' => 'email', 'required' => true],
['name' => 'no_telepon', 'label' => 'No Telepon', 'type' => 'text'],
['name' => 'nama_lengkap', 'label' => 'Nama Lengkap', 'type' => 'text'],
['name' => 'nama_panggilan', 'label' => 'Nama Panggilan', 'type' => 'text'],
['name' => 'nama_bapak', 'label' => 'Nama Bapak', 'type' => 'text'],
['name' => 'nama_ibu', 'label' => 'Nama Ibu', 'type' => 'text'],
['name' => 'instagram', 'label' => 'Link Instagram', 'type' => 'text'],
['name' => 'facebook', 'label' => 'Link Facebook', 'type' => 'text'],
['name' => 'twitter', 'label' => 'Link Twitter', 'type' => 'text'],
['name' => 'hari_tanggal_acara', 'label' => 'Hari & Tanggal Acara', 'type' => 'date'],
['name' => 'waktu', 'label' => 'Waktu', 'type' => 'text'],
['name' => 'alamat', 'label' => 'Alamat', 'type' => 'text'],
['name' => 'link_gmaps', 'label' => 'Link Gmaps', 'type' => 'text'],
['name' => 'say_something', 'label' => 'Say Something', 'type' => 'textarea'],
['name' => 'rekening_1', 'label' => 'Rekening 1', 'type' => 'text'],
['name' => 'rekening_2', 'label' => 'Rekening 2', 'type' => 'text'],
['name' => 'rekening_3', 'label' => 'Rekening 3', 'type' => 'text'],
['name' => 'foto_1', 'label' => 'Foto 1', 'type' => 'file'],
['name' => 'foto_2', 'label' => 'Foto 2', 'type' => 'file'],
['name' => 'foto_3', 'label' => 'Foto 3', 'type' => 'file'],
['name' => 'foto_4', 'label' => 'Foto 4', 'type' => 'file'],
['name' => 'foto_5', 'label' => 'Foto 5', 'type' => 'file'],
['name' => 'foto_6', 'label' => 'Foto 6', 'type' => 'file'],
['name' => 'link_music', 'label' => 'Link Music', 'type' => 'text'],
]
],
'kategori_id' => $k3->id,
'foto' => 'templates/Khitan.jpg',
]);
}
}

View File

@ -154,11 +154,10 @@
</template>
<script setup>
import { ref, onMounted } from 'vue'
import { ref } from 'vue'
import { useRouter } from 'vue-router'
const router = useRouter()
const templates = ref([])
const form = ref({
nama_pemesan: '',
@ -226,7 +225,7 @@ const konfirmasi = async () => {
try {
// Basic client-side validation
if (!form.value.nama_pemesan || !form.value.email || !form.value.no_tlpn) {
alert('Harap isi semua kolom wajib (Nama Pemesan, Email, No Telepon, Template)!')
alert('Harap isi semua kolom wajib (Nama Pemesan, Email, No Telepon)!')
return
}
@ -234,8 +233,12 @@ const konfirmasi = async () => {
data.append('nama_pemesan', form.value.nama_pemesan)
data.append('email', form.value.email)
data.append('no_tlpn', form.value.no_tlpn)
data.append('template_slug', "undangan-pernikahan-premium")
data.append('form', JSON.stringify(form.value.form))
data.append('template_slug', 'undangan-pernikahan-premium')
// Append form fields individually to ensure Laravel receives them as an array
for (const [key, value] of Object.entries(form.value.form)) {
data.append(`form[${key}]`, value)
}
form.value.foto.forEach((file, index) => {
data.append(`foto[${index}]`, file)
@ -256,6 +259,9 @@ const konfirmasi = async () => {
const errorMessages = Object.values(errors).flat().join('\n')
throw new Error(errorMessages || result.message || 'Validasi gagal')
}
if (res.status === 404) {
throw new Error(result.message || 'Template tidak ditemukan')
}
throw new Error(result.message || 'Gagal mengirim data')
}