From 47ad55965903fd96837464b1e73c2dc7cb779823 Mon Sep 17 00:00:00 2001 From: Farhaan4 <127176994+Farhaan4@users.noreply.github.com> Date: Thu, 9 Oct 2025 09:16:27 +0700 Subject: [PATCH] featured templates --- .../database/seeders/TemplateSeeder.php | 17 + .../app/components/forms/KhitanForm.vue | 0 .../app/components/forms/PernikahanForm.vue | 0 .../landing-page/featuredtemplates.vue | 63 +++- proyek-frontend/app/pages/form/[id].vue | 349 ------------------ .../pages/form/{khitan.vue => khitan/a.vue} | 0 proyek-frontend/app/pages/form/khitan/b.vue | 14 + .../form/{pernikahan.vue => pernikahan/a.vue} | 66 ++-- .../app/pages/form/pernikahan/b.vue | 14 + .../app/pages/form/ulang-tahun.vue | 275 -------------- .../form/ulang-tahun/a.vue} | 0 .../app/pages/form/ulang-tahun/b.vue | 14 + 12 files changed, 141 insertions(+), 671 deletions(-) delete mode 100644 proyek-frontend/app/components/forms/KhitanForm.vue delete mode 100644 proyek-frontend/app/components/forms/PernikahanForm.vue delete mode 100644 proyek-frontend/app/pages/form/[id].vue rename proyek-frontend/app/pages/form/{khitan.vue => khitan/a.vue} (100%) create mode 100644 proyek-frontend/app/pages/form/khitan/b.vue rename proyek-frontend/app/pages/form/{pernikahan.vue => pernikahan/a.vue} (85%) create mode 100644 proyek-frontend/app/pages/form/pernikahan/b.vue delete mode 100644 proyek-frontend/app/pages/form/ulang-tahun.vue rename proyek-frontend/app/{components/forms/UlangTahunForm.vue => pages/form/ulang-tahun/a.vue} (100%) create mode 100644 proyek-frontend/app/pages/form/ulang-tahun/b.vue diff --git a/backend-baru/database/seeders/TemplateSeeder.php b/backend-baru/database/seeders/TemplateSeeder.php index 8217745..81d012e 100644 --- a/backend-baru/database/seeders/TemplateSeeder.php +++ b/backend-baru/database/seeders/TemplateSeeder.php @@ -14,6 +14,23 @@ class TemplateSeeder extends Seeder $k2 = Kategori::firstOrCreate(['nama' => 'ulang_tahun']); $k3 = Kategori::firstOrCreate(['nama' => 'khitan']); + +Template::create([ + 'nama_template' => 'Undangan Minimalis', + 'harga' => 100000, + 'paket' => 'starter', + 'form' => [ + 'fields' => [ + ['name' => 'nama_pengantin', 'label' => 'Nama Pengantin', 'type' => 'text', 'required' => true], + ['name' => 'tanggal_acara', 'label' => 'Tanggal Acara', 'type' => 'date', 'required' => true], + ['name' => 'lokasi', 'label' => 'Lokasi', 'type' => 'text'], + ] + ], + 'kategori_id' => $k1->id, + 'foto' => 'templates/Pernikahan.jpg', // taruh di storage/app/public/templates/ + ]); + + // Template Pernikahan Premium Template::create([ 'nama_template' => 'Undangan Pernikahan Premium', diff --git a/proyek-frontend/app/components/forms/KhitanForm.vue b/proyek-frontend/app/components/forms/KhitanForm.vue deleted file mode 100644 index e69de29..0000000 diff --git a/proyek-frontend/app/components/forms/PernikahanForm.vue b/proyek-frontend/app/components/forms/PernikahanForm.vue deleted file mode 100644 index e69de29..0000000 diff --git a/proyek-frontend/app/components/landing-page/featuredtemplates.vue b/proyek-frontend/app/components/landing-page/featuredtemplates.vue index 8f9e90a..7159e59 100644 --- a/proyek-frontend/app/components/landing-page/featuredtemplates.vue +++ b/proyek-frontend/app/components/landing-page/featuredtemplates.vue @@ -2,7 +2,7 @@ import { ref, computed } from 'vue' // ID template yang mau ditampilkan -const selectedIds = [1, 2, 3, 5, 6] +const selectedIds = [3, 4, 5, 6, 7, 8, 9] // State dropdown const openDropdownId = ref(null) @@ -54,6 +54,15 @@ const paketData = [ } ] +// 🔥 Mapping nama_template ke form path (cukup tambah di sini kalau ada form baru) +const formMapping = { + 'Undangan Pernikahan Premium': '/form/pernikahan/b', + 'Undangan Minimalis': '/form/pernikahan/a', + 'Undangan Ulang Tahun Premium': '/form/ulang-tahun/a', + 'Undangan Khitan Premium': '/form/khitan/a', +} + + // Fetch data template dari backend (nama_template, harga, kategori, foto) const { data: templatesData, error } = await useFetch('http://localhost:8000/api/templates') @@ -61,15 +70,18 @@ const { data: templatesData, error } = await useFetch('http://localhost:8000/api const templates = computed(() => (templatesData.value || []) .filter(t => selectedIds.includes(t.id)) - .map((t, index) => ({ - id: t.id, - nama_template: t.nama_template, - harga: t.harga, - foto: t.foto || '/default.jpg', // fallback jika foto kosong - paket: paketData[index % paketData.length].paket, - fiturs: paketData[index % paketData.length].fiturs.map((f, i) => ({ id: i + 1, deskripsi: f })), - kategori: t.kategori - })) + .map((t, index) => { + return { + id: t.id, + nama_template: t.nama_template, + harga: t.harga, + foto: t.foto || '/default.jpg', + paket: paketData[index % paketData.length].paket, + fiturs: paketData[index % paketData.length].fiturs.map((f, i) => ({ id: i + 1, deskripsi: f })), + kategori: t.kategori, + formPath: formMapping[t.nama_template] || '/form/lainny' // 🔥 ambil path dari mapping + } + }) ) @@ -85,7 +97,8 @@ const templates = computed(() =>