Files
bildirchin/views/admin/products.php
T

178 lines
11 KiB
PHP
Raw 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.
<?php
$pageTitle = 'مدیریت محصولات، قیمت‌ها و سطوح عمده‌فروشی';
require __DIR__ . '/layout_header.php';
?>
<div class="flex justify-between items-center mb-6">
<h3 class="font-extrabold text-stone-900 text-base">لیست محصولات فعال فروشگاه</h3>
<button onclick="document.getElementById('new-product-modal').classList.remove('hidden')" class="px-4 py-2 rounded-xl bg-amber-500 hover:bg-amber-600 text-stone-950 text-xs font-bold transition flex items-center gap-1.5 shadow-sm">
<i class="fas fa-plus"></i> افزودن محصول جدید
</button>
</div>
<div class="bg-white rounded-2xl border border-stone-200 shadow-sm overflow-hidden">
<div class="overflow-x-auto">
<table class="w-full text-right text-xs">
<thead class="bg-stone-50 text-stone-600 border-b">
<tr>
<th class="p-3.5">تصویر و عنوان</th>
<th class="p-3.5">دسته</th>
<th class="p-3.5">قیمت تکی</th>
<th class="p-3.5">قیمت عمده (پله ۱)</th>
<th class="p-3.5">موجودی</th>
<th class="p-3.5 text-center">عملیات</th>
</tr>
</thead>
<tbody class="divide-y divide-stone-100">
<?php foreach ($products as $p): ?>
<tr class="hover:bg-stone-50">
<td class="p-3.5 flex items-center gap-3 font-bold text-stone-900">
<img src="<?= $p['image'] ?>" class="w-10 h-10 object-contain bg-stone-100 rounded-lg p-1">
<div>
<span><?= htmlspecialchars($p['name']) ?></span>
<span class="block text-[10px] text-stone-400 font-normal"><?= htmlspecialchars($p['slug']) ?></span>
</div>
</td>
<td class="p-3.5 text-stone-600"><?= htmlspecialchars($p['category_name']) ?></td>
<td class="p-3.5 font-bold text-stone-900"><?= \Bildirchin\Helpers::formatPrice($p['price']) ?> / <?= $p['unit'] ?></td>
<td class="p-3.5 text-amber-800 font-bold">
<?= $p['wholesale_price'] > 0 ? \Bildirchin\Helpers::formatPrice($p['wholesale_price']) : '-' ?>
</td>
<td class="p-3.5 font-bold text-stone-700"><?= \Bildirchin\Helpers::toPersianDigits($p['stock']) ?> <?= $p['unit'] ?></td>
<td class="p-3.5 text-center">
<div class="flex items-center justify-center gap-2">
<button onclick='editProduct(<?= json_encode($p) ?>)' class="px-2.5 py-1 rounded bg-stone-100 text-stone-700 hover:bg-stone-200 text-xs">ویرایش</button>
<form action="/admin/product/delete" method="POST" onsubmit="return confirm('آیا از حذف این محصول مطمئن هستید؟')">
<input type="hidden" name="id" value="<?= $p['id'] ?>">
<button type="submit" class="px-2.5 py-1 rounded bg-rose-50 text-rose-600 hover:bg-rose-100 text-xs">حذف</button>
</form>
</div>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
<!-- Modal Create / Edit Product -->
<div id="new-product-modal" class="fixed inset-0 bg-black/50 z-50 flex items-center justify-center p-4 hidden">
<div class="bg-white rounded-3xl max-w-2xl w-full max-h-[90vh] overflow-y-auto p-6 sm:p-8 space-y-4">
<div class="flex justify-between items-center border-b pb-3">
<h4 class="font-bold text-base text-stone-900" id="modal-title">افزودن / ویرایش محصول</h4>
<button onclick="document.getElementById('new-product-modal').classList.add('hidden')" class="text-stone-400 hover:text-stone-700"><i class="fas fa-times text-lg"></i></button>
</div>
<form action="/admin/product/save" method="POST" class="space-y-4 text-xs">
<input type="hidden" name="id" id="prod-id" value="0">
<div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
<div>
<label class="block font-bold text-stone-700 mb-1">نام محصول *</label>
<input type="text" name="name" id="prod-name" required class="w-full bg-stone-50 border border-stone-300 rounded-xl p-2.5 text-xs focus:ring-2 focus:ring-amber-500">
</div>
<div>
<label class="block font-bold text-stone-700 mb-1">دسته‌بندی *</label>
<select name="category_id" id="prod-cat" class="w-full bg-stone-50 border border-stone-300 rounded-xl p-2.5 text-xs">
<?php foreach ($categories as $c): ?>
<option value="<?= $c['id'] ?>"><?= htmlspecialchars($c['name']) ?></option>
<?php endforeach; ?>
</select>
</div>
</div>
<div class="grid grid-cols-1 sm:grid-cols-3 gap-4">
<div>
<label class="block font-bold text-stone-700 mb-1">قیمت مصرف‌کننده (تومان) *</label>
<input type="number" name="price" id="prod-price" required class="w-full bg-stone-50 border border-stone-300 rounded-xl p-2.5 text-xs">
</div>
<div>
<label class="block font-bold text-stone-700 mb-1">واحد اندازه‌گیری</label>
<input type="text" name="unit" id="prod-unit" value="عدد" class="w-full bg-stone-50 border border-stone-300 rounded-xl p-2.5 text-xs">
</div>
<div>
<label class="block font-bold text-stone-700 mb-1">موجودی انبار</label>
<input type="number" name="stock" id="prod-stock" value="100" class="w-full bg-stone-50 border border-stone-300 rounded-xl p-2.5 text-xs">
</div>
</div>
<div class="bg-amber-50/60 p-4 rounded-2xl border border-amber-200 space-y-3">
<span class="font-bold text-amber-900 block">تنظیمات سطوح عمده‌فروشی</span>
<div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
<div>
<label class="block text-stone-600 mb-1">حداقل تعداد پله ۱ عمده:</label>
<input type="number" name="wholesale_min_qty" id="prod-wmin" value="50" class="w-full bg-white border border-stone-300 rounded-xl p-2 text-xs">
</div>
<div>
<label class="block text-stone-600 mb-1">قیمت عمده پله ۱ (تومان):</label>
<input type="number" name="wholesale_price" id="prod-wprice" value="0" class="w-full bg-white border border-stone-300 rounded-xl p-2 text-xs">
</div>
</div>
<div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
<div>
<label class="block text-stone-600 mb-1">حداقل تعداد پله ۲ (تیراژ بالا):</label>
<input type="number" name="wholesale_tier2_qty" id="prod-t2qty" value="200" class="w-full bg-white border border-stone-300 rounded-xl p-2 text-xs">
</div>
<div>
<label class="block text-stone-600 mb-1">قیمت عمده پله ۲ (تومان):</label>
<input type="number" name="wholesale_tier2_price" id="prod-t2price" value="0" class="w-full bg-white border border-stone-300 rounded-xl p-2 text-xs">
</div>
</div>
</div>
<div>
<label class="block font-bold text-stone-700 mb-1">توضیح کوتاه</label>
<input type="text" name="short_desc" id="prod-short" class="w-full bg-stone-50 border border-stone-300 rounded-xl p-2.5 text-xs">
</div>
<div>
<label class="block font-bold text-stone-700 mb-1">توضیحات کامل محصول</label>
<textarea name="full_desc" id="prod-full" rows="3" class="w-full bg-stone-50 border border-stone-300 rounded-xl p-2.5 text-xs"></textarea>
</div>
<div class="flex items-center gap-6 pt-2">
<label class="flex items-center gap-2 cursor-pointer">
<input type="checkbox" name="is_wholesale_available" id="prod-is-w" checked class="text-amber-600">
<span class="font-bold">فروش عمده فعال باشد</span>
</label>
<label class="flex items-center gap-2 cursor-pointer">
<input type="checkbox" name="is_featured" id="prod-featured" checked class="text-amber-600">
<span class="font-bold">نمایش در صفحه اول</span>
</label>
</div>
<div class="pt-4 border-t flex justify-end gap-3">
<button type="button" onclick="document.getElementById('new-product-modal').classList.add('hidden')" class="px-4 py-2 rounded-xl bg-stone-200 text-stone-800 font-bold">انصراف</button>
<button type="submit" class="px-6 py-2 rounded-xl bg-amber-500 hover:bg-amber-600 text-stone-950 font-bold">ذخیره اطلاعات</button>
</div>
</form>
</div>
</div>
<script>
function editProduct(p) {
document.getElementById('prod-id').value = p.id;
document.getElementById('prod-name').value = p.name;
document.getElementById('prod-cat').value = p.category_id;
document.getElementById('prod-price').value = p.price;
document.getElementById('prod-unit').value = p.unit;
document.getElementById('prod-stock').value = p.stock;
document.getElementById('prod-wmin').value = p.wholesale_min_qty;
document.getElementById('prod-wprice').value = p.wholesale_price;
document.getElementById('prod-t2qty').value = p.wholesale_tier2_qty;
document.getElementById('prod-t2price').value = p.wholesale_tier2_price;
document.getElementById('prod-short').value = p.short_desc;
document.getElementById('prod-full').value = p.full_desc;
document.getElementById('prod-is-w').checked = parseInt(p.is_wholesale_available) === 1;
document.getElementById('prod-featured').checked = parseInt(p.is_featured) === 1;
document.getElementById('modal-title').innerText = 'ویرایش محصول: ' + p.name;
document.getElementById('new-product-modal').classList.remove('hidden');
}
</script>
<?php
require __DIR__ . '/layout_footer.php';
?>