"use client"; import { useState } from "react"; import { TimesheetDemo } from "./timesheet-demo"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; import { Progress } from "@/components/ui/progress"; import { Input } from "@/components/ui/input"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Calendar, Check, X, Clock, User, Package, Star, Heart, ShoppingCart, Edit, Trash2, Phone, Mail, MapPin, Building, TrendingUp, Award, Users, Briefcase, Eye, Plus, Minus, Store, Boxes, ChevronDown, ChevronRight, Hash, Package2, Truck, } from "lucide-react"; export function BusinessDemo() { const [selectedProduct] = useState(null); const [cartQuantity, setCartQuantity] = useState(1); const [expandedSeller, setExpandedSeller] = useState(false); // Данные для демонстрации const scheduleData = Array.from({ length: 30 }, (_, i) => ({ day: i + 1, status: ["work", "work", "work", "work", "work", "weekend", "weekend"][ i % 7 ], hours: [8, 8, 8, 8, 8, 0, 0][i % 7], })); const products = [ { id: "1", name: "iPhone 15 Pro Max 256GB", article: "APL-IP15PM-256", price: 89990, oldPrice: 99990, quantity: 45, category: "Электроника", brand: "Apple", rating: 4.8, reviews: 1234, image: "/placeholder-phone.jpg", seller: "TechStore Moscow", isNew: true, inStock: true, }, { id: "2", name: "Беспроводные наушники AirPods Pro", article: "APL-APP-PRO", price: 24990, quantity: 23, category: "Аксессуары", brand: "Apple", rating: 4.6, reviews: 856, image: "/placeholder-headphones.jpg", seller: "Audio Expert", isNew: false, inStock: true, }, { id: "3", name: "Ноутбук MacBook Air M2", article: "APL-MBA-M2", price: 0, quantity: 0, category: "Компьютеры", brand: "Apple", rating: 4.9, reviews: 445, image: "/placeholder-laptop.jpg", seller: "Digital World", isNew: false, inStock: false, }, ]; // Данные для поставки фулфилмента const fulfillmentSupply = { id: "1", supplyNumber: "ФФ-2024-001", supplyDate: "2024-01-15", seller: { id: "seller1", name: "TechStore LLC", storeName: "ТехноМагазин", managerName: "Иванов Иван Иванович", phone: "+7 (495) 123-45-67", email: "contact@techstore.ru", inn: "7701234567", }, itemsQuantity: 150, cargoPlaces: 5, volume: 12.5, responsibleEmployeeId: "emp1", logisticsPartnerId: "log1", status: "planned", totalValue: 2500000, }; const employees = [ { id: "emp1", firstName: "Иван", lastName: "Петров", position: "Менеджер склада", }, { id: "emp2", firstName: "Мария", lastName: "Сидорова", position: "Логист", }, ]; const logisticsPartners = [ { id: "log1", name: "ТК Энергия", fullName: "ООО ТК Энергия" }, { id: "log2", name: "СДЭК", fullName: "ООО СДЭК" }, ]; const wholesalers = [ { id: "1", name: "ТехноОпт Москва", fullName: 'ООО "Технологии Оптом"', inn: "7735123456", type: "WHOLESALE", avatar: "/placeholder-company.jpg", rating: 4.8, reviewsCount: 2345, productsCount: 15670, completedOrders: 8934, responseTime: "2 часа", categories: ["Электроника", "Компьютеры", "Аксессуары"], location: "Москва, Россия", workingSince: "2018", verifiedBadges: ["verified", "premium", "fast-delivery"], description: "Крупнейший поставщик электроники и компьютерной техники в России", specialOffers: 3, minOrder: 50000, }, { id: "2", name: "СтройБаза Регион", fullName: "ИП Строительные материалы", inn: "7735987654", type: "WHOLESALE", avatar: "/placeholder-construction.jpg", rating: 4.5, reviewsCount: 1876, productsCount: 8430, completedOrders: 5621, responseTime: "4 часа", categories: ["Стройматериалы", "Инструменты", "Сантехника"], location: "Екатеринбург, Россия", workingSince: "2015", verifiedBadges: ["verified", "eco-friendly"], description: "Надежный поставщик строительных материалов по всей России", specialOffers: 1, minOrder: 30000, }, ]; const getStatusColor = (status: string) => { switch (status) { case "work": return "bg-green-500"; case "weekend": return "bg-gray-400"; case "vacation": return "bg-blue-500"; case "sick": return "bg-yellow-500"; case "absent": return "bg-red-500"; default: return "bg-gray-400"; } }; const getStatusText = (status: string) => { switch (status) { case "work": return "Работа"; case "weekend": return "Выходной"; case "vacation": return "Отпуск"; case "sick": return "Больничный"; case "absent": return "Прогул"; default: return "Неизвестно"; } }; const formatPrice = (price: number) => { return new Intl.NumberFormat("ru-RU", { style: "currency", currency: "RUB", minimumFractionDigits: 0, }).format(price); }; const formatCurrency = (amount: number) => { return new Intl.NumberFormat("ru-RU", { style: "currency", currency: "RUB", minimumFractionDigits: 0, }).format(amount); }; const formatDate = (dateString: string) => { return new Date(dateString).toLocaleDateString("ru-RU", { day: "2-digit", month: "2-digit", year: "numeric", }); }; const getStatusBadge = (status: string) => { const statusConfig = { planned: { color: "text-blue-300 border-blue-400/30", label: "Запланировано", }, "in-transit": { color: "text-yellow-300 border-yellow-400/30", label: "В пути", }, delivered: { color: "text-green-300 border-green-400/30", label: "Доставлено", }, "in-processing": { color: "text-purple-300 border-purple-400/30", label: "Обрабатывается", }, }; const config = statusConfig[status as keyof typeof statusConfig] || statusConfig.planned; return ( {config.label} ); }; return (
{/* Табель рабочего времени */} Табель рабочего времени {/* Заголовок табеля */}
ИИ

Иванов Иван Иванович

Менеджер по продажам • Март 2024

176 часов

Отработано в месяце

{/* Календарь */}
Пн
Вт
Ср
Чт
Пт
Сб
Вс
{scheduleData.map((day, index) => (
{day.day}
{day.hours > 0 && (
{day.hours}ч
)}
))}
{/* Легенда */}
Работа
Выходной
Отпуск
Больничный
Прогул
{/* Статистика */}
Рабочие дни
22
Выходные
8
Отпуск
0
Опозданий
2
{/* Карточки товаров */} Карточки товаров
{products.map((product) => (
{/* Изображение товара */}
{/* Бейджи */}
{product.isNew && ( Новинка )} {product.oldPrice && ( Скидка )}
{/* Кнопки действий */}
{/* Информация о товаре */}

{product.name}

Артикул: {product.article}

{/* Рейтинг и отзывы */}
{product.rating}
({product.reviews} отзывов)
{/* Категория и бренд */}
{product.category} {product.brand}
{/* Цена */}
{product.price > 0 ? (
{formatPrice(product.price)} {product.oldPrice && ( {formatPrice(product.oldPrice)} )}
) : ( Нет в наличии )} {product.inStock && product.quantity > 0 && (

В наличии: {product.quantity} шт.

)}
{/* Продавец */}
Продавец: {product.seller}
{/* Кнопки */}
{product.inStock && product.price > 0 ? ( <>
{cartQuantity}
) : ( )}
))}
{/* Карточка поставки фулфилмента */} Карточка поставки фулфилмента
{/* Компактный блок с названием магазина */}
{fulfillmentSupply.seller.storeName} {fulfillmentSupply.seller.managerName} {fulfillmentSupply.seller.phone}
{/* Скрытая детальная информация о магазине */} {expandedSeller && (

Юридическое название

{fulfillmentSupply.seller.name}

ИНН

{fulfillmentSupply.seller.inn}

Email

{fulfillmentSupply.seller.email}

)} {/* Единый блок со всеми параметрами в одной строке */}
{/* Номер поставки */}

Номер

{fulfillmentSupply.supplyNumber}

{/* Дата поставки */}

Дата

{formatDate(fulfillmentSupply.supplyDate)}

{/* Количество товаров */}

Товаров

{fulfillmentSupply.itemsQuantity}

{/* Количество мест */}

Мест

{fulfillmentSupply.cargoPlaces}

{/* Объём */}

Объём

{fulfillmentSupply.volume} м³

{/* Стоимость */}

Стоимость

{formatCurrency(fulfillmentSupply.totalValue)}

{/* Ответственный сотрудник */}

Ответственный

{/* Логистический партнер */}

Логистика

{/* Статус */}

Статус

{getStatusBadge(fulfillmentSupply.status)}
{/* Карточки поставщиков */} Карточки поставщиков
{wholesalers.map((wholesaler) => (
{/* Заголовок карточки */}
{wholesaler.name.charAt(0)}

{wholesaler.name}

{wholesaler.verifiedBadges.includes("verified") && ( Проверен )} {wholesaler.verifiedBadges.includes("premium") && ( Premium )}

{wholesaler.fullName}

ИНН: {wholesaler.inn}

{/* Рейтинг и статистика */}
{wholesaler.rating} ({wholesaler.reviewsCount})
{wholesaler.completedOrders} заказов
{/* Описание */}

{wholesaler.description}

{/* Статистика */}
Товаров
{wholesaler.productsCount.toLocaleString()}
Ответ
{wholesaler.responseTime}
{/* Категории */}

Категории:

{wholesaler.categories.map((category, index) => ( {category} ))}
{/* Дополнительная информация */}
{wholesaler.location}
Работает с {wholesaler.workingSince} года
Мин. заказ: {formatPrice(wholesaler.minOrder)}
{/* Специальные предложения */} {wholesaler.specialOffers > 0 && (
{wholesaler.specialOffers} специальных предложения
)} {/* Кнопки действий */}
))}
{/* Космически-галактические табели рабочего времени */}
); }