"use client"; import React, { useState, useEffect } from "react"; import { Product } from "../lib/data/products"; import { useCartStore } from "../lib/store/cartStore"; import { useUserStore } from "../lib/store/userStore"; import { useSettingsStore } from "../lib/store/settingsStore"; import { productService } from "../lib/services/productService"; import { motion, AnimatePresence } from "motion/react"; import { Building2, ShoppingCart, Search, CheckCircle2, Lock, Percent, X, Download } from "lucide-react"; import SafeImage from "./SafeImage"; import { toPersian } from "../lib/utils"; export default function B2BPortal({ onClose }: { onClose: () => void }) { const [products, setProducts] = useState([]); const [quantities, setQuantities] = useState>({}); const [searchQuery, setSearchQuery] = useState(""); const { addItem } = useCartStore(); const { role } = useUserStore(); const [showSuccess, setShowSuccess] = useState(false); const isWholesaleVerified = (role as string) === "User_Wholesale" || (role as string) === "ADMIN" || (role as string) === "User_Partner"; useEffect(() => { productService.getProducts({ limit: 999 }).then(res => setProducts(res.data)); }, []); const filteredProducts = products.filter(p => p.name.toLowerCase().includes(searchQuery.toLowerCase()) || p.artNo.includes(searchQuery) ); const handleQuantityChange = (id: string, val: string) => { const num = parseInt(val) || 0; setQuantities(prev => ({ ...prev, [id]: Math.max(0, num) })); }; const handleAddAll = () => { Object.entries(quantities).forEach(([id, qty]) => { const numQty = qty as number; if (numQty > 0) { const product = products.find(p => p.id === id); if (product) { addItem(product, numQty); } } }); setShowSuccess(true); setTimeout(() => setShowSuccess(false), 3000); }; const totalItems = Object.values(quantities).reduce((acc: number, val) => acc + Number(val || 0), 0); const exportToCSV = () => { const headers = ["کد کالا", "نام محصول", "دسته‌بندی", "قیمت تک‌فروشی (تومان)", "قیمت عمده (تومان)"]; const rows = products.map(p => { const base = p.priceValue || 0; const wholesale = Math.round(base * 0.7); return [`"${p.artNo}"`, `"${p.name}"`, `"${p.category}"`, base, wholesale]; }); const csvContent = "\uFEFF" + [headers.join(","), ...rows.map(e => e.join(","))].join("\n"); const blob = new Blob([csvContent], { type: "text/csv;charset=utf-8;" }); const url = URL.createObjectURL(blob); const link = document.createElement("a"); link.setAttribute("href", url); link.setAttribute("download", `Canina_B2B_PriceList_${new Date().toISOString().slice(0, 10)}.csv`); document.body.appendChild(link); link.click(); document.body.removeChild(link); }; return ( {/* Sidebar Info */}

پنل کلینیک‌ها
و داروخانه‌ها

ثبت سفارشات حجیم با قیمت همکار. کالاها مستقیماً با لایسنس آلمان ارسال می‌شوند.

{!isWholesaleVerified && (

درخواست مشاوره و عضویت همکار B2B

جهت دریافت شرایط همکاری و فعال‌سازی دسترسی خرید عمده، شماره تماس خود را وارد کنید تا کارشناسان فروش با شما تماس بگیرند.

{ e.preventDefault(); const form = e.target as HTMLFormElement; const bName = (form.elements.namedItem('bName') as HTMLInputElement).value; const phone = (form.elements.namedItem('phone') as HTMLInputElement).value; try { const api = (await import('../lib/services/api')).default; await api.post('/wholesale/apply', { businessName: bName, licenseNumber: phone }); alert('درخواست شما با موفقیت ثبت شد. کارشناسان پشتیبانی B2B کانینا به زودی جهت تایید تلفنی با شما تماس خواهند گرفت.'); form.reset(); } catch { alert('خطا در ثبت درخواست. لطفاً دوباره تلاش کنید.'); } }} className="space-y-2">
)}
{/* Main Grid Area */}
{/* Header & Search */}
setSearchQuery(e.target.value)} className="w-full bg-medical-gray-50 border border-medical-gray-200 rounded-2xl py-3 pr-11 pl-4 text-sm focus:outline-none focus:ring-2 focus:ring-canina-blue/20" />
{/* Table */}
{filteredProducts.map(product => { const basePrice = product.priceValue || 0; // Priority 1: Specific product wholesalePrice, Priority 2: General settings percentage discount (default 30%) const wholesaleDiscountPercent = Number(useSettingsStore.getState().getText('B2B_DISCOUNT_PERCENT', '30')) || 30; const prodWholesale = (product as unknown as { wholesalePrice?: number }).wholesalePrice; const wholesalePrice = prodWholesale ? Number(prodWholesale) : Math.round(basePrice * (1 - wholesaleDiscountPercent / 100)); return ( ); })}
تصویر نام و کد کالا قیمت تک‌فروشی قیمت عمده (همکار) تعداد سفارش
{product.name}
شناسه کالا: {product.artNo}
{toPersian(basePrice.toLocaleString())} تومان {isWholesaleVerified ? ( {toPersian(wholesalePrice.toLocaleString())} تومان ) : ( نیازمند تایید ادمین )} handleQuantityChange(product.id, e.target.value)} placeholder="0" className="w-20 bg-medical-gray-50 border border-medical-gray-200 rounded-xl py-2 px-3 text-center font-mono font-bold focus:ring-2 focus:ring-canina-blue/20 outline-none" />
{showSuccess && ( سفارشات با موفقیت به سبد خرید اضافه شدند. )}
); }