Files

244 lines
6.4 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* =========================================================
NumexShop — Ürün verisi (sahte "backend")
Saf JS: bu dosya tek gerçek veri kaynağıdır.
========================================================= */
(function (global) {
"use strict";
var KATEGORILER = [
{ id: "tumu", ad: "Tümü" },
{ id: "elektronik", ad: "Elektronik" },
{ id: "ev", ad: "Ev & Yaşam" },
{ id: "spor", ad: "Spor" },
{ id: "kitap", ad: "Kitap" },
{ id: "kozmetik", ad: "Kozmetik" }
];
var URUNLER = [
{
id: "p-001",
ad: "Kablosuz Kulaklık Pro",
kategori: "elektronik",
ikon: "🎧",
aciklama: "Aktif gürültü engelleme, 36 saat pil ömrü, şarj kutusu dahil.",
fiyat: 2499,
eskiFiyat: 3199,
stok: 14,
puan: 4.8,
yorum: 214,
etiket: "Çok Satan"
},
{
id: "p-002",
ad: "Mekanik Klavye TKL",
kategori: "elektronik",
ikon: "⌨️",
aciklama: "Hot-swap switch, RGB aydınlatma, alüminyum gövde, Türkçe Q dizilim.",
fiyat: 1875,
eskiFiyat: 0,
stok: 7,
puan: 4.6,
yorum: 98,
etiket: ""
},
{
id: "p-003",
ad: "Taşınabilir Şarj 20.000 mAh",
kategori: "elektronik",
ikon: "🔋",
aciklama: "65W hızlı şarj, 3 çıkış, dizüstü bilgisayarı da besler.",
fiyat: 1149,
eskiFiyat: 1399,
stok: 0,
puan: 4.4,
yorum: 65,
etiket: ""
},
{
id: "p-004",
ad: "Akıllı Saat Fit 3",
kategori: "elektronik",
ikon: "⌚",
aciklama: "AMOLED ekran, SpO2 ve uyku takibi, 5 ATM su direnci.",
fiyat: 3299,
eskiFiyat: 0,
stok: 21,
puan: 4.7,
yorum: 312,
etiket: "Yeni"
},
{
id: "p-005",
ad: "Zeytinyağı Sabunu (4'lü)",
kategori: "kozmetik",
ikon: "🧼",
aciklama: "Soğuk sıkım zeytinyağı, paraben ve sülfat içermez.",
fiyat: 289,
eskiFiyat: 0,
stok: 120,
puan: 4.9,
yorum: 187,
etiket: ""
},
{
id: "p-006",
ad: "Cilt Bakım Seti",
kategori: "kozmetik",
ikon: "🧴",
aciklama: "Temizleyici, tonik ve nemlendirici — karma cilt için.",
fiyat: 749,
eskiFiyat: 999,
stok: 34,
puan: 4.3,
yorum: 142,
etiket: "İndirim"
},
{
id: "p-007",
ad: "El Yapımı Seramik Kupa",
kategori: "ev",
ikon: "☕",
aciklama: "350 ml, bulaşık makinesinde yıkanabilir, kurşunsuz sır.",
fiyat: 349,
eskiFiyat: 0,
stok: 46,
puan: 4.5,
yorum: 88,
etiket: ""
},
{
id: "p-008",
ad: "Yoga Matı 8 mm",
kategori: "spor",
ikon: "🧘",
aciklama: "Kaymaz yüzey, taşıma kayışı dahil, TPE malzeme.",
fiyat: 699,
eskiFiyat: 899,
stok: 3,
puan: 4.4,
yorum: 156,
etiket: ""
},
{
id: "p-009",
ad: "Dambıl Seti 20 kg",
kategori: "spor",
ikon: "🏋️",
aciklama: "Kaplamalı plakalar, kilitli ağırlık barı, krom kaplama.",
fiyat: 4599,
eskiFiyat: 5299,
stok: 5,
puan: 4.6,
yorum: 41,
etiket: "İndirim"
},
{
id: "p-010",
ad: "Numex'e Göre Yazılım",
kategori: "kitap",
ikon: "📕",
aciklama: "Saf mantıkla yazılım tasarımı: 320 sayfa, 2. baskı.",
fiyat: 429,
eskiFiyat: 0,
stok: 62,
puan: 4.8,
yorum: 203,
etiket: ""
},
{
id: "p-011",
ad: "Masa Lambası LED",
kategori: "ev",
ikon: "💡",
aciklama: "Kademeli parlaklık, USB çıkışlı, göz yormayan ışık.",
fiyat: 849,
eskiFiyat: 1099,
stok: 18,
puan: 4.2,
yorum: 74,
etiket: ""
},
{
id: "p-012",
ad: "Koşu Ayakkabısı Air",
kategori: "spor",
ikon: "👟",
aciklama: "Nefes alan file üst, jel destekli taban, 285 g (42 numara).",
fiyat: 2149,
eskiFiyat: 2799,
stok: 9,
puan: 4.7,
yorum: 265,
etiket: "Çok Satan"
}
];
/* KDV oranı (%) */
var KDV_ORANI = 20;
/* Kargo ücreti (₺) — 750 TL üzeri bedava */
var KARGO_UCRETI = 79;
var KARGO_ESIK = 750;
/* ---------------- Kupon motoru ---------------- */
var KUPONLAR = {
NUMEX10: { tip: "yuzde", deger: 10, minSepet: 500, aciklama: "Sepette %10 indirim (min. 500 TL)" },
HOSGELDIN15: { tip: "yuzde", deger: 15, minSepet: 1500, aciklama: "Sepette %15 indirim (min. 1500 TL)" },
KARGOBEDAVA: { tip: "kargo", deger: 0, minSepet: 0, aciklama: "Kargo ücretsiz" },
ELLI: { tip: "sabit", deger: 50, minSepet: 300, aciklama: "300 TL üzeri 50 TL indirim" }
};
/* Uygulanan kuponu sepet toplamlarına göre hesaplar. */
function kuponHesapla(kod, araToplam) {
var anahtar = String(kod || "").trim().toUpperCase();
if (!anahtar) return { gecerli: false, mesaj: "Kupon kodu gir." };
var kupon = KUPONLAR[anahtar];
if (!kupon) return { gecerli: false, mesaj: "\"" + anahtar + "\" diye bir kupon yok." };
if (araToplam < kupon.minSepet) {
return {
gecerli: false,
mesaj: "Bu kupon için en az " + paraBicim(kupon.minSepet) + " sepet gerekiyor."
};
}
var indirim = 0;
var kargoBedava = false;
if (kupon.tip === "yuzde") indirim = araToplam * (kupon.deger / 100);
else if (kupon.tip === "sabit") indirim = Math.min(kupon.deger, araToplam);
else if (kupon.tip === "kargo") kargoBedava = true;
indirim = Math.round(indirim * 100) / 100;
return {
gecerli: true,
kod: anahtar,
tip: kupon.tip,
aciklama: kupon.aciklama,
indirim: indirim,
kargoBedava: kargoBedava,
mesaj: "Kupon uygulandı: " + kupon.aciklama
};
}
function paraBicim(sayi) {
var n = Number(sayi) || 0;
return "₺" + n.toLocaleString("tr-TR", { minimumFractionDigits: 2, maximumFractionDigits: 2 });
}
function urunBul(id) {
for (var i = 0; i < URUNLER.length; i++) {
if (URUNLER[i].id === id) return URUNLER[i];
}
return null;
}
global.NumexVeri = {
KATEGORILER: KATEGORILER,
URUNLER: URUNLER,
KUPONLAR: KUPONLAR,
KDV_ORANI: KDV_ORANI,
KARGO_UCRETI: KARGO_UCRETI,
KARGO_ESIK: KARGO_ESIK,
kuponHesapla: kuponHesapla,
paraBicim: paraBicim,
urunBul: urunBul
};
})(window);