From 014439d5652d7d32f481f80e06f17494f45e2332 Mon Sep 17 00:00:00 2001 From: Web-serfer Date: Wed, 15 Apr 2026 01:31:23 +0500 Subject: [PATCH] =?UTF-8?q?=D0=9C=D0=B5=D0=BB=D0=BA=D0=B8=D0=B5=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20=D0=BA=D0=BE=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/data/casesData.ts | 260 +++++++++++++++++-------------- frontend/src/data/reviewsData.ts | 77 +++++---- 2 files changed, 183 insertions(+), 154 deletions(-) diff --git a/frontend/src/data/casesData.ts b/frontend/src/data/casesData.ts index bcf3a87..14f2499 100644 --- a/frontend/src/data/casesData.ts +++ b/frontend/src/data/casesData.ts @@ -12,171 +12,191 @@ export interface Case { featured?: boolean; } -export type CaseCategory = - | 'insurance' - | 'rights' - | 'accident' - | 'court' - | 'consultation'; +export type CaseCategory = + | "insurance" + | "rights" + | "accident" + | "court" + | "consultation"; export const categories = [ - { - id: 'all', - label: 'Все кейсы', - icon: '📋' + { + id: "all", + label: "Все кейсы", + icon: "📋", }, - { - id: 'insurance', - label: 'Споры со страховыми', - icon: '🛡️' + { + id: "insurance", + label: "Споры со страховыми", + icon: "🛡️", }, - { - id: 'rights', - label: 'Возврат прав', - icon: '🚗' + { + id: "rights", + label: "Возврат прав", + icon: "🚗", }, - { - id: 'accident', - label: 'ДТП и возмещение', - icon: '💥' + { + id: "accident", + label: "ДТП и возмещение", + icon: "💥", }, - { - id: 'court', - label: 'Судебные дела', - icon: '⚖️' + { + id: "court", + label: "Судебные дела", + icon: "⚖️", }, ] as const; export const casesData: Case[] = [ { id: 1, - title: 'Взыскание 450 000 ₽ со страховой компании', - category: 'insurance', - description: 'Клиент обратился после ДТП — страховая выплатила только 50 000 ₽ вместо положенных 500 000 ₽', - result: 'Выплачено 500 000 ₽ + неустойка 50 000 ₽', - clientStory: 'Попал в ДТП по вине другого водителя. Страховая насчитала смешную сумму. Ребята из Автоюриста 086 сделали независимую экспертизу и выиграли суд.', - amount: '500 000 ₽', - duration: '3 месяца', - image: '/images/cases/case-insurance-1.jpg', - tags: ['ОСАГО', 'Независимая экспертиза', 'Суд'], + title: "Взыскание 450 000 ₽ со страховой компании", + category: "insurance", + description: + "Клиент обратился после ДТП — страховая выплатила только 50 000 ₽ вместо положенных 500 000 ₽", + result: "Выплачено 500 000 ₽ + неустойка 50 000 ₽", + clientStory: + "Попал в ДТП по вине другого водителя. Страховая насчитала смешную сумму. Ребята из Автоюриста 086 сделали независимую экспертизу и выиграли суд.", + amount: "500 000 ₽", + duration: "3 месяца", + image: "/images/cases/case-insurance-1.jpg", + tags: ["ОСАГО", "Независимая экспертиза", "Суд"], featured: true, }, { id: 2, - title: 'Возврат водительских прав после лишения', - category: 'rights', - description: 'Клиент был лишён прав на 1,5 года за отказ от медосвидетельствования. Нашли procedural violations.', - result: 'Права возвращены через 4 месяца', - clientStory: 'Остановили ночью, сказали пройти освидетельствование. Я попросил показать документы врача — отказали. Лишили прав. Юристы нашли нарушения в процедуре.', - amount: 'Сохранены права', - duration: '4 месяца', - image: '/images/cases/case-rights-1.jpg', - tags: ['Лишение прав', 'Медосвидетельствование', 'Апелляция'], + title: "Возврат водительских прав после лишения", + category: "rights", + description: + "Клиент был лишён прав на 1,5 года за отказ от медосвидетельствования. Нашли процедурные нарушения.", + result: "Права возвращены через 4 месяца", + clientStory: + "Остановили ночью, сказали пройти освидетельствование. Я попросил показать документы врача — отказали. Лишили прав. Юристы нашли нарушения в процедуре.", + amount: "Сохранены права", + duration: "4 месяца", + image: "/images/cases/case-rights-1.jpg", + tags: ["Лишение прав", "Медосвидетельствование", "Апелляция"], featured: true, }, { id: 3, - title: 'Оспаривание вины в ДТП на перекрёстке', - category: 'accident', - description: 'Сложное ДТП на регулируемом перекрёстке. ГИБДД признала виновным нашего клиента.', - result: 'Виность пересмотрена, выплата 320 000 ₽', - clientStory: 'Ехал на зелёный, а мне врезались сбоку. Инспектор составил протокол против меня. Адвокаты собрали видеозаписи и доказали мою невиновность.', - amount: '320 000 ₽', - duration: '5 месяцев', - image: '/images/cases/case-accident-1.jpg', - tags: ['ДТП', 'Видеозапись', 'Перекрёсток'], + title: "Оспаривание вины в ДТП на перекрёстке", + category: "accident", + description: + "Сложное ДТП на регулируемом перекрёстке. ГИБДД признала виновным нашего клиента.", + result: "Виность пересмотрена, выплата 320 000 ₽", + clientStory: + "Ехал на зелёный, а мне врезались сбоку. Инспектор составил протокол против меня. Адвокаты собрали видеозаписи и доказали мою невиновность.", + amount: "320 000 ₽", + duration: "5 месяцев", + image: "/images/cases/case-accident-1.jpg", + tags: ["ДТП", "Видеозапись", "Перекрёсток"], }, { id: 4, - title: 'Защита от необоснованного штрафа с камеры', - category: 'court', - description: 'Клиент получил штраф 5000 ₽ с камеры фотовидеофиксации за нарушение, которого не совершал.', - result: 'Штраф отменён полностью', - clientStory: 'Пришел штраф за проезд на красный. Но я там не был! Оказалось, камера ошиблась. Юристы помогли оспорить.', - amount: 'Экономия 5 000 ₽', - duration: '1 месяц', - image: '/images/cases/case-court-1.jpg', - tags: ['Штрафы', 'Камеры', 'Обжалование'], + title: "Защита от необоснованного штрафа с камеры", + category: "court", + description: + "Клиент получил штраф 5000 ₽ с камеры фотовидеофиксации за нарушение, которого не совершал.", + result: "Штраф отменён полностью", + clientStory: + "Пришел штраф за проезд на красный. Но я там не был! Оказалось, камера ошиблась. Юристы помогли оспорить.", + amount: "Экономия 5 000 ₽", + duration: "1 месяц", + image: "/images/cases/case-court-1.jpg", + tags: ["Штрафы", "Камеры", "Обжалование"], }, { id: 5, - title: 'Возмещение ущерба от града по КАСКО', - category: 'insurance', - description: 'После сильного града автомобиль получил серьёзные повреждения. Страховая отказала в выплате.', - result: 'Выплачено 680 000 ₽ по КАСКО', - clientStory: 'Градом побило стёкла и крышу. Страховая сказала, что это не страховой случай. Обратился сюда — выплатили всё до копейки.', - amount: '680 000 ₽', - duration: '2 месяца', - image: '/images/cases/case-insurance-2.jpg', - tags: ['КАСКО', 'Град', 'Отказ страховой'], + title: "Возмещение ущерба от града по КАСКО", + category: "insurance", + description: + "После сильного града автомобиль получил серьёзные повреждения. Страховая отказала в выплате.", + result: "Выплачено 680 000 ₽ по КАСКО", + clientStory: + "Градом побило стёкла и крышу. Страховая сказала, что это не страховой случай. Обратился сюда — выплатили всё до копейки.", + amount: "680 000 ₽", + duration: "2 месяца", + image: "/images/cases/case-insurance-2.jpg", + tags: ["КАСКО", "Град", "Отказ страховой"], }, { id: 6, - title: 'Возврат прав после лишения за алкоголь', - category: 'rights', - description: 'Клиента лишили прав на 2 года за управление в состоянии опьянения. Нашли ошибки в протоколе.', - result: 'Дело прекращено, права возвращены', - clientStory: 'Остановили, заподозрили опьянение. Составили протокол с ошибками. Благодаря юристам удалось доказать невиновность.', - amount: 'Сохранены права', - duration: '6 месяцев', - image: '/images/cases/case-rights-2.jpg', - tags: ['Лишение прав', 'Алкоголь', 'Протокол'], + title: "Возврат прав после лишения за алкоголь", + category: "rights", + description: + "Клиента лишили прав на 2 года за управление в состоянии опьянения. Нашли ошибки в протоколе.", + result: "Дело прекращено, права возвращены", + clientStory: + "Остановили, заподозрили опьянение. Составили протокол с ошибками. Благодаря юристам удалось доказать невиновность.", + amount: "Сохранены права", + duration: "6 месяцев", + image: "/images/cases/case-rights-2.jpg", + tags: ["Лишение прав", "Алкоголь", "Протокол"], featured: true, }, { id: 7, - title: 'Спор о виновности при столкновении на парковке', - category: 'accident', - description: 'На подземной парковке произошло столкновение. Владелец соседнего авто обвинил нашего клиента.', - result: 'Доказана невиновность клиента', - clientStory: 'Парковался, задел чужую машину. Но оказалось, что тот автомобиль стоял в неположенном месте. Юристы разобрались.', - amount: '0 ₽ (виность не доказана)', - duration: '2 месяца', - image: '/images/cases/case-accident-2.jpg', - tags: ['Парковка', 'Столкновение', 'Защита'], + title: "Спор о виновности при столкновении на парковке", + category: "accident", + description: + "На подземной парковке произошло столкновение. Владелец соседнего авто обвинил нашего клиента.", + result: "Доказана невиновность клиента", + clientStory: + "Парковался, задел чужую машину. Но оказалось, что тот автомобиль стоял в неположенном месте. Юристы разобрались.", + amount: "0 ₽ (виность не доказана)", + duration: "2 месяца", + image: "/images/cases/case-accident-2.jpg", + tags: ["Парковка", "Столкновение", "Защита"], }, { id: 8, - title: 'Консультация по покупке автомобиля с пробегом', - category: 'consultation', - description: 'Клиент хотел купить б/у авто, но боялся нарваться на проблемы с документами или скрытыми дефектами.', - result: 'Безопасная покупка автомобиля', - clientStory: 'Хотел купить машину с рук. Юристы проверили все документы, историю, залоги. Всё оказалось чисто — купил без проблем.', - amount: 'Предотвращены риски', - duration: '1 неделя', - image: '/images/cases/case-consultation-1.jpg', - tags: ['Покупка авто', 'Проверка документов', 'Консультация'], + title: "Консультация по покупке автомобиля с пробегом", + category: "consultation", + description: + "Клиент хотел купить б/у авто, но боялся нарваться на проблемы с документами или скрытыми дефектами.", + result: "Безопасная покупка автомобиля", + clientStory: + "Хотел купить машину с рук. Юристы проверили все документы, историю, залоги. Всё оказалось чисто — купил без проблем.", + amount: "Предотвращены риски", + duration: "1 неделя", + image: "/images/cases/case-consultation-1.jpg", + tags: ["Покупка авто", "Проверка документов", "Консультация"], }, { id: 9, - title: 'Судебный иск к автосалону за скрытые дефекты', - category: 'court', - description: 'Клиент купил автомобиль в салоне, но обнаружил скрытые дефекты, о которых не предупредили.', - result: 'Возврат 1 200 000 ₽ за автомобиль', - clientStory: 'Купил машину в салоне. Через месяц посыпались проблемы. Оказалось, defects были скрыты. Выиграли суд и вернули деньги.', - amount: '1 200 000 ₽', - duration: '7 месяцев', - image: '/images/cases/case-court-2.jpg', - tags: ['Автосалон', 'Скрытые дефекты', 'Возврат денег'], + title: "Судебный иск к автосалону за скрытые дефекты", + category: "court", + description: + "Клиент купил автомобиль в салоне, но обнаружил скрытые дефекты, о которых не предупредили.", + result: "Возврат 1 200 000 ₽ за автомобиль", + clientStory: + "Купил машину в салоне. Через месяц посыпались проблемы. Оказалось, дефекты были скрыты. Выиграли суд и вернули деньги.", + amount: "1 200 000 ₽", + duration: "7 месяцев", + image: "/images/cases/case-court-2.jpg", + tags: ["Автосалон", "Скрытые дефекты", "Возврат денег"], featured: true, }, { id: 10, - title: 'Компенсация морального вреда после ДТП', - category: 'accident', - description: 'После серьёзного ДТП клиент получил травмы и моральный вред. Нужно было взыскать компенсацию.', - result: 'Компенсация 250 000 ₽ морального вреда', - clientStory: 'Попал в аварию, получил травмы. Страховая покрыла только лечение. Юристы помогли получить компенсацию за моральный вред.', - amount: '250 000 ₽', - duration: '4 месяца', - image: '/images/cases/case-accident-3.jpg', - tags: ['Моральный вред', 'Травмы', 'Компенсация'], + title: "Компенсация морального вреда после ДТП", + category: "accident", + description: + "После серьёзного ДТП клиент получил травмы и моральный вред. Нужно было взыскать компенсацию.", + result: "Компенсация 250 000 ₽ морального вреда", + clientStory: + "Попал в аварию, получил травмы. Страховая покрыла только лечение. Юристы помогли получить компенсацию за моральный вред.", + amount: "250 000 ₽", + duration: "4 месяца", + image: "/images/cases/case-accident-3.jpg", + tags: ["Моральный вред", "Травмы", "Компенсация"], }, ]; export const statsData = { - totalCases: '500+', - successRate: '98%', - totalRecovered: '50+ млн ₽', - averageDuration: '3-4 месяца', + totalCases: "500+", + successRate: "98%", + totalRecovered: "50+ млн ₽", + averageDuration: "3-4 месяца", } as const; diff --git a/frontend/src/data/reviewsData.ts b/frontend/src/data/reviewsData.ts index 1085f36..746f2f6 100644 --- a/frontend/src/data/reviewsData.ts +++ b/frontend/src/data/reviewsData.ts @@ -1,127 +1,136 @@ export interface Review { + id: number; name: string; car: string; text: string; rating: number; - initial: string; - color: string; + avatar: { initial: string; color: string; }; date: string; votesCount: number; isHelpful: boolean; } -export const reviewsData: Review[] = [ +const reviewsRaw = [ { + id: 1, name: "Алексей М.", car: "Toyota Camry", text: "Помогли вернуть права после того, как инспектор незаконно составил протокол за встречку. Юрист нашел кучу ошибок в схеме ДТП. Огромное спасибо!", rating: 5, - initial: "А", - color: "bg-blue-100 text-blue-600", date: "2024-03-15", votesCount: 24, isHelpful: true }, { + id: 2, name: "Екатерина П.", car: "Hyundai Solaris", text: "Страховая выплатила копейки по ОСАГО. Обратилась сюда, сделали независимую экспертизу и через суд взыскали еще 120 тысяч. Профессионалы!", rating: 5, - initial: "Е", - color: "bg-teal-100 text-teal-600", date: "2024-03-10", votesCount: 18, isHelpful: true }, { + id: 3, name: "Игорь С.", car: "Lexus RX", text: "Грамотно разобрали сложное ДТП на перекрестке. Доказали, что я не виноват, хотя ГИБДД изначально решило иначе. Лучшие в Сургуте.", rating: 5, - initial: "И", - color: "bg-orange-100 text-orange-600", date: "2024-03-05", votesCount: 31, isHelpful: true }, { + id: 4, name: "Марина К.", car: "Kia Rio", text: "Обратилась по вопросу возврата прав после лишения. Всё сделали быстро и профессионально. Через 2 месяца права уже были у меня. Рекомендую!", rating: 4, - initial: "М", - color: "bg-pink-100 text-pink-600", date: "2024-02-28", votesCount: 15, isHelpful: true }, { + id: 5, name: "Дмитрий В.", car: "Volkswagen Tiguan", text: "Были проблемы со страховой после ДТП. Юристы помогли составить претензию, потом представляли интересы в суде. Выиграли дело полностью.", rating: 5, - initial: "Д", - color: "bg-purple-100 text-purple-600", date: "2024-02-20", votesCount: 22, isHelpful: true }, { + id: 6, name: "Ольга Н.", car: "Mazda CX-5", text: "Купила б/у авто с проблемами, которые не были указаны при продаже. Юристы помогли вернуть деньги через суд. Очень благодарна за помощь!", rating: 5, - initial: "О", - color: "bg-indigo-100 text-indigo-600", date: "2024-02-15", votesCount: 27, isHelpful: true }, { + id: 7, name: "Сергей Т.", car: "Nissan Qashqai", text: "Спор со страховой длился полгода. Сам не мог ничего добиться. Обратился сюда - ребята за 2 месяца решили вопрос в мою пользу. Супер!", rating: 4, - initial: "С", - color: "bg-green-100 text-green-600", date: "2024-02-08", votesCount: 19, isHelpful: true }, { + id: 8, name: "Анна Р.", car: "Skoda Octavia", text: "Помогли оспорить штраф с камеры, который пришел ошибочно. Юрист быстро разобрался в ситуации и подготовил все документы. Спасибо!", rating: 5, - initial: "А", - color: "bg-yellow-100 text-yellow-600", date: "2024-02-01", votesCount: 12, isHelpful: false }, { + id: 9, name: "Виктор Л.", car: "Honda CR-V", text: "Обратился по вопросу компенсации после ДТП. Страховая занижала выплату в 3 раза. Сделали экспертизу и через суд добились справедливой суммы.", rating: 5, - initial: "В", - color: "bg-red-100 text-red-600", date: "2024-01-25", votesCount: 35, isHelpful: true } ]; -// Агрегированные данные для голосования -export const votingSummary = { - averageRating: 4.8, - totalVotes: 203, - totalReviews: reviewsData.length, - ratingDistribution: { - 5: 7, - 4: 2, - 3: 0, - 2: 0, - 1: 0 - } -}; +const colors = [ + "bg-blue-100 text-blue-600", "bg-teal-100 text-teal-600", "bg-orange-100 text-orange-600", + "bg-pink-100 text-pink-600", "bg-purple-100 text-purple-600", "bg-indigo-100 text-indigo-600", + "bg-green-100 text-green-600", "bg-yellow-100 text-yellow-600", "bg-red-100 text-red-600" +]; + +export const reviewsData: Review[] = reviewsRaw.map(review => { + const initial = review.name.charAt(0).toUpperCase(); + const color = colors[initial.charCodeAt(0) % colors.length]; + return { ...review, avatar: { initial, color } }; +}); + +export const votingSummary = (() => { + const totalReviews = reviewsData.length; + const totalVotes = reviewsData.reduce((sum, review) => sum + review.votesCount, 0); + const totalRating = reviewsData.reduce((sum, review) => sum + review.rating, 0); + const averageRating = totalReviews > 0 ? parseFloat((totalRating / totalReviews).toFixed(1)) : 0; + const ratingDistribution = reviewsData.reduce((acc, review) => { + acc[review.rating] = (acc[review.rating] || 0) + 1; + return acc; + }, {} as Record); + + return { + averageRating, + totalVotes, + totalReviews, + ratingDistribution + }; +})(); + +