From 23c8e909ca81591342e1a368fc06fdfadebfb26c Mon Sep 17 00:00:00 2001 From: Farhaan4 <127176994+Farhaan4@users.noreply.github.com> Date: Thu, 9 Oct 2025 15:02:52 +0700 Subject: [PATCH] kategori templat --- .../landing-page/featuredtemplates.vue | 77 ++++++--- .../template-page/CategorySelection.vue | 77 +++++---- .../components/template-page/TemplateGrid.vue | 156 +++++++++++++----- 3 files changed, 212 insertions(+), 98 deletions(-) diff --git a/proyek-frontend/app/components/landing-page/featuredtemplates.vue b/proyek-frontend/app/components/landing-page/featuredtemplates.vue index ef4529a..0a5300a 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, 3, 4, 5, 2, 7, 8, 9] +const selectedIds = [1, 3, 4, 5, 6, 7, 8, 9] // State dropdown const openDropdownId = ref(null) @@ -10,10 +10,10 @@ const toggleDropdown = (templateId) => { openDropdownId.value = openDropdownId.value === templateId ? null : templateId } -// Paket & fitur hardcode const paketData = [ + // Paket Starter (Undangan Minimalis / Pernikahan Starter) { - paket: 'Starter', + paket: 'starter', fiturs: [ '1x Acara', 'Masa Aktif 3 Bulan', @@ -22,21 +22,10 @@ const paketData = [ 'Request Musik' ] }, + + // Paket Premium Pernikahan { - paket: 'Basic', - fiturs: [ - '1x Acara', - '6 Galeri Foto', - 'Hitung Mundur Waktu Acara', - 'Buku Tamu + Data Kehadiran', - 'Masa Aktif 6 Bulan', - 'Nama Tamu Personal', - 'Maks. 200 Tamu', - 'Request Musik' - ] - }, - { - paket: 'Premium', + paket: 'premium', fiturs: [ 'Maksimal 3x Acara (Akad, Resepsi, Syukuran)', 'Unlimited Galeri Foto', @@ -51,6 +40,40 @@ const paketData = [ 'Nama Tamu Personal Unlimited Tamu', 'Request Musik' ] + }, + + // Paket Premium Ulang Tahun + { + paket: 'premium', + fiturs: [ + '1x Acara', + 'Unlimited Galeri Foto', + 'Timeline Story', + 'Google Maps', + 'Reminder Google Calendar', + 'Amplop Digital', + 'Placement Video Cinematic', + 'Masa Aktif 12 Bulan', + 'Nama Tamu Personal Unlimited Tamu', + 'Request Musik' + ] + }, + + // Paket Premium Khitan + { + paket: 'premium', + fiturs: [ + '1x Acara', + 'Unlimited Galeri Foto', + 'Timeline Story', + 'Google Maps', + 'Reminder Google Calendar', + 'Amplop Digital', + 'Placement Video Cinematic', + 'Masa Aktif 12 Bulan', + 'Nama Tamu Personal Unlimited Tamu', + 'Request Musik' + ] } ] @@ -67,17 +90,27 @@ const formMapping = { const { data: templatesData, error } = await useFetch('http://localhost:8000/api/templates') // Mapping template: gabungkan backend + paket & fitur hardcode +const paketMapping = { + 'Undangan Minimalis': 'starter', + 'Undangan Pernikahan Premium': 'premium', + 'Undangan Ulang Tahun Premium': 'premium', + 'Undangan Khitan Premium': 'premium' +} + const templates = computed(() => (templatesData.value || []) .filter(t => selectedIds.includes(t.id)) - .map((t, index) => { + .map((t) => { + const paketKey = paketMapping[t.nama_template] || 'starter'; + const paketInfo = paketData.find(p => p.paket.toLowerCase() === paketKey.toLowerCase()) || paketData[0]; + 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 })), + paket: paketInfo.paket, + fiturs: paketInfo.fiturs.map((f, i) => ({ id: i + 1, deskripsi: f })), kategori: t.kategori, formPath: t.slug } @@ -149,7 +182,7 @@ const templates = computed(() => Order - 1 + @@ -166,7 +199,7 @@ const templates = computed(() =>