From 359f3a32c43b0d8ebdf447d79e40fb159316db0b Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Tue, 1 Jul 2025 11:10:38 +0300 Subject: [PATCH] fix: update base menu --- src/core/constants/menu.ts | 712 ++++++++++------------ src/entities/base-menu/styles.module.scss | 62 +- src/entities/base-menu/ui.tsx | 150 +---- src/shared/ui/icon/ui.tsx | 21 +- 4 files changed, 407 insertions(+), 538 deletions(-) diff --git a/src/core/constants/menu.ts b/src/core/constants/menu.ts index 8ee257f..20893b1 100644 --- a/src/core/constants/menu.ts +++ b/src/core/constants/menu.ts @@ -1,406 +1,336 @@ import { ROUTES } from '@core/constants/route'; -export const Menu = [ +export type TMenu = { + name: string; + link?: string; + children?: TMenu; +}[]; + +export const baseMenu: TMenu = [ { - menuItem: { - name: 'Экспертиза', - children: [ - { - menuItem: { - name: 'Автотехническая', - link: ROUTES.EXPERTIZA_AUTOTECH, - }, - }, - { - menuItem: { - name: 'Трасологическая', - link: ROUTES.EXPERTIZA_TRASOLOGIA, - }, - }, - { - menuItem: { - name: 'Пожарно-техническая', - link: ROUTES.EXPERTIZA_POZHAR, - }, - }, - { - menuItem: { - name: 'Товароведческая', - link: ROUTES.EXPERTIZA_TOVAR, - }, - }, - { - menuItem: { - name: 'Рецензирование и проверка экспертизы', - link: ROUTES.EXPERTIZA_RECENZII, - }, - }, - { - menuItem: { - name: 'Документарная', - link: ROUTES.EXPERTIZA_DOCUMENT, - }, - }, - { - menuItem: { - name: 'Бухгалтерская', - link: ROUTES.EXPERTIZA_BUHGALTER, - }, - }, - { - menuItem: { - name: 'Финансово-экономическая', - link: ROUTES.EXPERTIZA_FINANS, - }, - }, - { - menuItem: { - name: 'Земле-устроительная', - link: ROUTES.EXPERTIZA_ZEM_STROY, - }, - }, - { - menuItem: { - name: 'Кадастровая', - link: ROUTES.EXPERTIZA_KADASTR, - }, - }, - { - menuItem: { - name: 'Строительно-техническая', - link: ROUTES.EXPERTIZA_STROIT, - }, - }, - { - menuItem: { - name: 'Компьютерно-техническая', - link: ROUTES.EXPERTIZA_COPMPUTER, - }, - }, - { - menuItem: { - name: 'Почерковедческая', - link: ROUTES.EXPERTIZA_POCHERK, - }, - }, - { - menuItem: { - name: 'Технико-криминалистическая', - link: ROUTES.EXPERTIZA_TECH_CRIM, - }, - }, - ], - }, + name: 'Экспертиза', + children: [ + { + name: 'Автотехническая', + link: ROUTES.EXPERTIZA_AUTOTECH, + }, + { + name: 'Трасологическая', + link: ROUTES.EXPERTIZA_TRASOLOGIA, + }, + { + name: 'Пожарно-техническая', + link: ROUTES.EXPERTIZA_POZHAR, + }, + { + name: 'Товароведческая', + link: ROUTES.EXPERTIZA_TOVAR, + }, + { + name: 'Рецензирование и проверка экспертизы', + link: ROUTES.EXPERTIZA_RECENZII, + }, + { + name: 'Документарная', + link: ROUTES.EXPERTIZA_DOCUMENT, + }, + { + name: 'Бухгалтерская', + link: ROUTES.EXPERTIZA_BUHGALTER, + }, + { + name: 'Финансово-экономическая', + link: ROUTES.EXPERTIZA_FINANS, + }, + { + name: 'Земле-устроительная', + link: ROUTES.EXPERTIZA_ZEM_STROY, + }, + { + name: 'Кадастровая', + link: ROUTES.EXPERTIZA_KADASTR, + }, + { + name: 'Строительно-техническая', + link: ROUTES.EXPERTIZA_STROIT, + }, + { + name: 'Компьютерно-техническая', + link: ROUTES.EXPERTIZA_COPMPUTER, + }, + { + name: 'Почерковедческая', + link: ROUTES.EXPERTIZA_POCHERK, + }, + { + name: 'Технико-криминалистическая', + link: ROUTES.EXPERTIZA_TECH_CRIM, + }, + ], }, { - menuItem: { - name: 'Оценка', - children: [ - { - menuItem: { - name: 'По ситуации', - children: [ - { - menuItem: { - name: 'Независимая оценка', - link: ROUTES.OCENKA_NEZAVISIM, - }, - }, - { - menuItem: { - name: 'Оценка для опеки', - link: ROUTES.OCENKA_OPEKA, - }, - }, - { - menuItem: { - name: 'Оценка для нотариуса', - link: ROUTES.OCENKA_NOTARIUS, - }, - }, - { - menuItem: { - name: 'Оценка для вступления в наследство', - link: ROUTES.OCENKA_NASLEDSTVO, - }, - }, - { - menuItem: { - name: 'Оценка для страхования', - link: ROUTES.OCENKA_STRAHOVANIE, - }, - }, - { - menuItem: { - name: 'Оценка для определения стоимости ущерба', - link: ROUTES.OCENKA_USCHERB, - }, - }, - { - menuItem: { - name: 'Оценка имущества при разводе', - link: ROUTES.OCENKA_RAZVOD, - }, - }, - { - menuItem: { - name: 'Оценка недвижимости для суда', - link: ROUTES.OCENKA_SUD, - }, - }, - { - menuItem: { - name: 'Оценка для внесения в уставный капитал', - link: ROUTES.OCENKA_USTAV_KAPITAL, - }, - }, - { - menuItem: { - name: 'Оценка для ипотеки', - link: ROUTES.OCENKA_IPOTEKA, - }, - }, - { - menuItem: { - name: 'Оценка для банка', - link: ROUTES.OCENKA_BANK, - }, - }, - { - menuItem: { - name: 'Оценка имущества для банкротства', - link: ROUTES.OCENKA_BANKROTSTV, - }, - }, - ], + name: 'Оценка', + children: [ + { + name: 'По ситуации', + children: [ + { + name: 'Независимая оценка', + link: ROUTES.OCENKA_NEZAVISIM, }, - }, - { - menuItem: { - name: 'Жилая недвижимость', - children: [ - { - menuItem: { - name: 'Оценка квартиры', - link: ROUTES.OCENKA_KVARTIRA, - }, - }, - { - menuItem: { - name: 'Оценка жилого дома', - link: ROUTES.OCENKA_DOM, - }, - }, - { - menuItem: { - name: 'Оценка земельного участка', - link: ROUTES.OCENKA_UCHASTOK, - }, - }, - { - menuItem: { - name: 'Оценка гаража', - link: ROUTES.OCENKA_GARAZH, - }, - }, - { - menuItem: { - name: 'Оценка ущерба недвижимости', - link: ROUTES.OCENKA_USCHERB_NEDVIGI, - }, - }, - { - menuItem: { - name: 'Оценка ущерба от залива', - link: ROUTES.OCENKA_ZATOPLENIE, - }, - }, - { - menuItem: { - name: 'Оценка ущерба от пожара', - link: ROUTES.OCENKA_POZHAR, - }, - }, - ], + { + name: 'Оценка для опеки', + link: ROUTES.OCENKA_OPEKA, }, - }, - { - menuItem: { - name: 'Коммерческая недвижимость', - children: [ - { - name: 'Оценка стоимости арендной ставки', - link: ROUTES.OCENKA_ARENDA, - }, - { - name: 'Оценка здания', - link: ROUTES.OCENKA_ZDANIE, - }, - { - name: 'Оценка земель', - link: ROUTES.OCENKA_ZEMLYA, - }, - { - name: 'Оценка нежилого помещения', - link: ROUTES.OCENKA_POMESCHENIE, - }, - { - name: 'Оценка офиса', - link: ROUTES.OCENKA_OFFICE, - }, - { - name: 'Оценка сооружений', - link: ROUTES.OCENKA_SOORUZHENIE, - }, - { - name: 'Оценка незавершенного строительства', - link: ROUTES.OCENKA_NEZAV_STROIT, - }, - ], + { + name: 'Оценка для нотариуса', + link: ROUTES.OCENKA_NOTARIUS, }, - }, - { - menuItem: { - name: 'Имущество', - children: [ - { - name: 'Оценка недвижимости', - link: ROUTES.OCENKA_NEDVIGA, - }, - { - name: 'Оценка машин и оборудования', - link: ROUTES.OCENKA_MASHINES, - }, - { - name: 'Оценка спецтехники', - link: ROUTES.OCENKA_SPECTECHNIKA, - }, - { - name: 'Оценка нематериальных активов', - link: ROUTES.OCENKA_ACTIVES, - }, - { - name: 'Оценка стоимости предприятия', - link: ROUTES.OCENKA_BUSINESS, - }, - { - name: 'Оценка ценных бумаг', - link: ROUTES.OCENKA_CENN_BUMAGI, - }, - { - name: 'Экспертиза и рецензирование отчета об оценке', - link: ROUTES.OCENKA_RECINSIA_OTCHETA, - }, - ], + { + name: 'Оценка для вступления в наследство', + link: ROUTES.OCENKA_NASLEDSTVO, }, - }, - { - menuItem: { - name: 'Ипотека', - children: [ - { - name: 'Оценка для ипотеки в Сбербанке', - link: ROUTES.OCENKA_IPOTEKA_SBER, - }, - { - name: 'Оценка для ипотеки в банке ВТБ', - link: ROUTES.OCENKA_IPOTEKA_VTB, - }, - ], + { + name: 'Оценка для страхования', + link: ROUTES.OCENKA_STRAHOVANIE, }, - }, - { - menuItem: { - name: 'Транспорт', - children: [ - { - name: 'Оценка ущерба в ДТП', - link: ROUTES.OCENKA_DTP, - }, - { - name: 'Оценка УТС – утраты товарной стоимости', - link: ROUTES.OCENKA_UTS, - }, - { - name: 'Оценка рыночной стоимости автомобиля', - link: ROUTES.OCENKA_RYNOCHNAYA, - }, - { - name: 'Оценка автомобиля для суда', - link: ROUTES.OCENKA_AUTO_SUD, - }, - { - name: 'Оценка мотоциклов и мототехники', - link: ROUTES.OCENKA_MOTO, - }, - { - name: 'Оценка морских и речных судов', - link: ROUTES.OCENKA_PLAVSREDSTV, - }, - { - name: 'Оценка воздушных судов и летательных аппаратов', - link: ROUTES.OCENKA_VOZDUSHNYH_SUDOV, - }, - ], + { + name: 'Оценка для определения стоимости ущерба', + link: ROUTES.OCENKA_USCHERB, }, - }, - ], - }, + { + name: 'Оценка имущества при разводе', + link: ROUTES.OCENKA_RAZVOD, + }, + { + name: 'Оценка недвижимости для суда', + link: ROUTES.OCENKA_SUD, + }, + { + name: 'Оценка для внесения в уставный капитал', + link: ROUTES.OCENKA_USTAV_KAPITAL, + }, + { + name: 'Оценка для ипотеки', + link: ROUTES.OCENKA_IPOTEKA, + }, + { + name: 'Оценка для банка', + link: ROUTES.OCENKA_BANK, + }, + { + name: 'Оценка имущества для банкротства', + link: ROUTES.OCENKA_BANKROTSTV, + }, + ], + }, + { + name: 'Жилая недвижимость', + children: [ + { + name: 'Оценка квартиры', + link: ROUTES.OCENKA_KVARTIRA, + }, + { + name: 'Оценка жилого дома', + link: ROUTES.OCENKA_DOM, + }, + { + name: 'Оценка земельного участка', + link: ROUTES.OCENKA_UCHASTOK, + }, + { + name: 'Оценка гаража', + link: ROUTES.OCENKA_GARAZH, + }, + { + name: 'Оценка ущерба недвижимости', + link: ROUTES.OCENKA_USCHERB_NEDVIGI, + }, + { + name: 'Оценка ущерба от залива', + link: ROUTES.OCENKA_ZATOPLENIE, + }, + { + name: 'Оценка ущерба от пожара', + link: ROUTES.OCENKA_POZHAR, + }, + ], + }, + { + name: 'Коммерческая недвижимость', + children: [ + { + name: 'Оценка стоимости арендной ставки', + link: ROUTES.OCENKA_ARENDA, + }, + { + name: 'Оценка здания', + link: ROUTES.OCENKA_ZDANIE, + }, + { + name: 'Оценка земель', + link: ROUTES.OCENKA_ZEMLYA, + }, + { + name: 'Оценка нежилого помещения', + link: ROUTES.OCENKA_POMESCHENIE, + }, + { + name: 'Оценка офиса', + link: ROUTES.OCENKA_OFFICE, + }, + { + name: 'Оценка сооружений', + link: ROUTES.OCENKA_SOORUZHENIE, + }, + { + name: 'Оценка незавершенного строительства', + link: ROUTES.OCENKA_NEZAV_STROIT, + }, + ], + }, + { + name: 'Имущество', + children: [ + { + name: 'Оценка недвижимости', + link: ROUTES.OCENKA_NEDVIGA, + }, + { + name: 'Оценка машин и оборудования', + link: ROUTES.OCENKA_MASHINES, + }, + { + name: 'Оценка спецтехники', + link: ROUTES.OCENKA_SPECTECHNIKA, + }, + { + name: 'Оценка нематериальных активов', + link: ROUTES.OCENKA_ACTIVES, + }, + { + name: 'Оценка стоимости предприятия', + link: ROUTES.OCENKA_BUSINESS, + }, + { + name: 'Оценка ценных бумаг', + link: ROUTES.OCENKA_CENN_BUMAGI, + }, + { + name: 'Экспертиза и рецензирование отчета об оценке', + link: ROUTES.OCENKA_RECINSIA_OTCHETA, + }, + ], + }, + { + name: 'Ипотека', + children: [ + { + name: 'Оценка для ипотеки в Сбербанке', + link: ROUTES.OCENKA_IPOTEKA_SBER, + }, + { + name: 'Оценка для ипотеки в банке ВТБ', + link: ROUTES.OCENKA_IPOTEKA_VTB, + }, + ], + }, + { + name: 'Транспорт', + children: [ + { + name: 'Оценка ущерба в ДТП', + link: ROUTES.OCENKA_DTP, + }, + { + name: 'Оценка УТС – утраты товарной стоимости', + link: ROUTES.OCENKA_UTS, + }, + { + name: 'Оценка рыночной стоимости автомобиля', + link: ROUTES.OCENKA_RYNOCHNAYA, + }, + { + name: 'Оценка автомобиля для суда', + link: ROUTES.OCENKA_AUTO_SUD, + }, + { + name: 'Оценка мотоциклов и мототехники', + link: ROUTES.OCENKA_MOTO, + }, + { + name: 'Оценка морских и речных судов', + link: ROUTES.OCENKA_PLAVSREDSTV, + }, + { + name: 'Оценка воздушных судов и летательных аппаратов', + link: ROUTES.OCENKA_VOZDUSHNYH_SUDOV, + }, + ], + }, + ], }, { - menuItem: { - name: 'Юрист', - children: [ - { - name: 'Решение споров', - children: [ - { - name: 'Страховые споры', - link: ROUTES.JURIST_STRAHOVKA, - }, - { - name: 'Земельные и имущественные', - link: ROUTES.JURIST_ZEMLYA_IMUSHESTVO, - }, - { - name: 'Семейные и наследственные', - link: ROUTES.JURIST_NASLEDSTVO, - }, - { - name: 'Трудовые споры', - link: ROUTES.JURIST_TRUD, - }, - { - name: 'Споры по ДТП', - link: ROUTES.JURIST_DTP, - }, - ], - }, - { - name: 'Сопровождение сделок', - link: ROUTES.JURIST_SDELKI_DOGOVORA, - }, - { - name: 'Представительство в суде', - link: ROUTES.JURIST_PREDSTAVITELSTVO, - }, - { - name: 'Банкротство физических лиц', - link: ROUTES.JURIST_BANKROTSTVO, - }, - { - name: 'Взыскание задолженности', - link: ROUTES.JURIST_DOLGI, - }, - { - name: 'Помощь должникам', - link: ROUTES.JURIST_DOLZHNIKAM, - }, - { - name: 'Возврат страховки и комиссии банков', - link: ROUTES.JURIST_BANKI, - }, - ], - }, + name: 'Юрист', + children: [ + { + name: 'Решение споров', + children: [ + { + name: 'Страховые споры', + link: ROUTES.JURIST_STRAHOVKA, + }, + { + name: 'Земельные и имущественные', + link: ROUTES.JURIST_ZEMLYA_IMUSHESTVO, + }, + { + name: 'Семейные и наследственные', + link: ROUTES.JURIST_NASLEDSTVO, + }, + { + name: 'Трудовые споры', + link: ROUTES.JURIST_TRUD, + }, + { + name: 'Споры по ДТП', + link: ROUTES.JURIST_DTP, + }, + ], + }, + { + name: 'Сопровождение сделок', + link: ROUTES.JURIST_SDELKI_DOGOVORA, + }, + { + name: 'Представительство в суде', + link: ROUTES.JURIST_PREDSTAVITELSTVO, + }, + { + name: 'Банкротство физических лиц', + link: ROUTES.JURIST_BANKROTSTVO, + }, + { + name: 'Взыскание задолженности', + link: ROUTES.JURIST_DOLGI, + }, + { + name: 'Помощь должникам', + link: ROUTES.JURIST_DOLZHNIKAM, + }, + { + name: 'Возврат страховки и комиссии банков', + link: ROUTES.JURIST_BANKI, + }, + ], + }, + { + name: 'Эксперты', + link: ROUTES.EXPERTS, + }, + { + name: 'Контакты', + link: ROUTES.CONTACTS, }, ]; diff --git a/src/entities/base-menu/styles.module.scss b/src/entities/base-menu/styles.module.scss index e05306e..7ee3daa 100644 --- a/src/entities/base-menu/styles.module.scss +++ b/src/entities/base-menu/styles.module.scss @@ -19,7 +19,7 @@ display: flex; flex-direction: row; align-items: center; - gap: rem(24px); + gap: rem(32px); } .Parent { @@ -27,35 +27,45 @@ position: relative; float: left; line-height: 40px; - //background-color: #ffc72c; - //border-right: #CCC 1px solid; - } - .Parent a { - //margin: 10px 24px; - //color: #5d3200; - text-decoration: none; - } + .Row { + display: flex; + justify-content: space-between; + gap: 16px; + align-items: center; + cursor: default; + } - .Parent:hover > ul { - display: block; - position: absolute; - box-shadow: 0px 0px 5px 0px rgba(0, 0, 0, 0.5); + & a { + text-decoration: none; + } + + &:hover > ul { + display: block; + position: absolute; + box-shadow: 0px 0px 5px 0px rgba(0, 0, 0, 0.5); + } } .Child { display: none; - } - .Child li { - background-color: #FFFFFF; - line-height: 40px; - padding: 0 10px; - width: 100%; - } + & li { + background-color: #FFFFFF; + line-height: 40px; + padding: 4px 16px; + width: 100%; + text-wrap: nowrap; - .Child li a { - color: $color-text; + & a { + color: $color-text; + display: block; + } + } + + & .Parent > .Row > .Expand { + transform: rotateZ(0deg); + } } ul { @@ -94,13 +104,7 @@ } .Expand { - font-size: 16px; - float: right; - margin-left: 8px; - color: $color-text + transform: rotateZ(90deg); } } - - .Invite { - } } \ No newline at end of file diff --git a/src/entities/base-menu/ui.tsx b/src/entities/base-menu/ui.tsx index 8ac689d..a5e1aab 100644 --- a/src/entities/base-menu/ui.tsx +++ b/src/entities/base-menu/ui.tsx @@ -1,51 +1,45 @@ import s from './styles.module.scss'; import Image from 'next/image'; import dtrLogo from '@public/images/dtr-logo-eagle.png'; +import { baseMenu, TMenu } from '@core/constants/menu'; +import { Icons } from '@shared/ui/icon'; +import Link from 'next/link'; function BaseMenu() { + const Menu = ({ list }: { list: TMenu }) => { + const nodeList = (list: TMenu) => { + return list.map((item, index) => { + if (item.children && item.children.length) { + return ( +
  • +
    + {item.name} + +
    + +
  • + ); + } + + return ( +
  • + {item.name} +
  • + ); + }); + }; + return ( + + ); + }; + return (
    {'ДиТрасо'} - +
    @@ -55,81 +49,3 @@ function BaseMenu() { } export { BaseMenu }; - -const Menu = [ - { - menuItem: { - name: 'Home', - link: '/home', - }, - }, - { - menuItem: { - name: 'Link1', - children: [ - { - menuItem: { - name: 'link1-1', - link: '/home', - }, - }, - { - menuItem: { - name: 'link1-2', - link: '/home', - }, - }, - { - menuItem: { - name: 'link1-3', - link: '/home', - }, - }, - ], - }, - }, - { - menuItem: { - name: 'Link2', - children: [ - { - menuItem: { - name: 'link2-1', - link: '/home', - }, - }, - { - menuItem: { - name: 'link2-2', - children: [ - { - menuItem: { - name: 'link2-1', - link: '/home', - }, - }, - { - menuItem: { - name: 'link2-2', - link: '/home', - }, - }, - { - menuItem: { - name: 'link2-3', - link: '/home', - }, - }, - ], - }, - }, - { - menuItem: { - name: 'link2-3', - link: '/home', - }, - }, - ], - }, - }, -]; diff --git a/src/shared/ui/icon/ui.tsx b/src/shared/ui/icon/ui.tsx index 9d0afd4..54ec610 100644 --- a/src/shared/ui/icon/ui.tsx +++ b/src/shared/ui/icon/ui.tsx @@ -144,9 +144,28 @@ function Youtube(props: SVGIcon) { ); } +//WeuiArrowFilled +export function MenuArrow(props: SVGIcon) { + return ( + + + + ); +} + const Icons = Object.assign( {}, - { Map, Envelope, Whatsapp, Telegram, Phone, Vk, Youtube }, + { Map, Envelope, Whatsapp, Telegram, Phone, Vk, Youtube, MenuArrow }, ); export { Icons };