Dev #1

Merged
redrockjs merged 66 commits from dev into main 2025-12-11 08:37:11 +00:00
4 changed files with 407 additions and 538 deletions
Showing only changes of commit 359f3a32c4 - Show all commits

View File

@@ -1,406 +1,336 @@
import { ROUTES } from '@core/constants/route'; import { ROUTES } from '@core/constants/route';
export const Menu = [ export type TMenu = {
name: string;
link?: string;
children?: TMenu;
}[];
export const baseMenu: TMenu = [
{ {
menuItem: { name: 'Экспертиза',
name: 'Экспертиза', children: [
children: [ {
{ name: 'Автотехническая',
menuItem: { link: ROUTES.EXPERTIZA_AUTOTECH,
name: 'Автотехническая', },
link: ROUTES.EXPERTIZA_AUTOTECH, {
}, name: 'Трасологическая',
}, link: ROUTES.EXPERTIZA_TRASOLOGIA,
{ },
menuItem: { {
name: 'Трасологическая', name: 'Пожарно-техническая',
link: ROUTES.EXPERTIZA_TRASOLOGIA, link: ROUTES.EXPERTIZA_POZHAR,
}, },
}, {
{ name: 'Товароведческая',
menuItem: { link: ROUTES.EXPERTIZA_TOVAR,
name: 'Пожарно-техническая', },
link: ROUTES.EXPERTIZA_POZHAR, {
}, name: 'Рецензирование и проверка экспертизы',
}, link: ROUTES.EXPERTIZA_RECENZII,
{ },
menuItem: { {
name: 'Товароведческая', name: 'Документарная',
link: ROUTES.EXPERTIZA_TOVAR, link: ROUTES.EXPERTIZA_DOCUMENT,
}, },
}, {
{ name: 'Бухгалтерская',
menuItem: { link: ROUTES.EXPERTIZA_BUHGALTER,
name: 'Рецензирование и проверка экспертизы', },
link: ROUTES.EXPERTIZA_RECENZII, {
}, name: 'Финансово-экономическая',
}, link: ROUTES.EXPERTIZA_FINANS,
{ },
menuItem: { {
name: 'Документарная', name: 'Земле-устроительная',
link: ROUTES.EXPERTIZA_DOCUMENT, link: ROUTES.EXPERTIZA_ZEM_STROY,
}, },
}, {
{ name: 'Кадастровая',
menuItem: { link: ROUTES.EXPERTIZA_KADASTR,
name: 'Бухгалтерская', },
link: ROUTES.EXPERTIZA_BUHGALTER, {
}, name: 'Строительно-техническая',
}, link: ROUTES.EXPERTIZA_STROIT,
{ },
menuItem: { {
name: 'Финансово-экономическая', name: 'Компьютерно-техническая',
link: ROUTES.EXPERTIZA_FINANS, link: ROUTES.EXPERTIZA_COPMPUTER,
}, },
}, {
{ name: 'Почерковедческая',
menuItem: { link: ROUTES.EXPERTIZA_POCHERK,
name: 'Земле-устроительная', },
link: ROUTES.EXPERTIZA_ZEM_STROY, {
}, name: 'Технико-криминалистическая',
}, link: ROUTES.EXPERTIZA_TECH_CRIM,
{ },
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,
},
},
],
},
}, },
{ {
menuItem: { name: 'Оценка',
name: 'Оценка', children: [
children: [ {
{ name: 'По ситуации',
menuItem: { children: [
name: 'По ситуации', {
children: [ name: 'Независимая оценка',
{ link: ROUTES.OCENKA_NEZAVISIM,
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: 'Оценка для опеки',
menuItem: { link: ROUTES.OCENKA_OPEKA,
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: 'Оценка для нотариуса',
menuItem: { link: ROUTES.OCENKA_NOTARIUS,
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: 'Оценка для вступления в наследство',
menuItem: { link: ROUTES.OCENKA_NASLEDSTVO,
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: 'Оценка для страхования',
menuItem: { link: ROUTES.OCENKA_STRAHOVANIE,
name: 'Ипотека',
children: [
{
name: 'Оценка для ипотеки в Сбербанке',
link: ROUTES.OCENKA_IPOTEKA_SBER,
},
{
name: 'Оценка для ипотеки в банке ВТБ',
link: ROUTES.OCENKA_IPOTEKA_VTB,
},
],
}, },
}, {
{ name: 'Оценка для определения стоимости ущерба',
menuItem: { link: ROUTES.OCENKA_USCHERB,
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_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: 'Юрист',
name: 'Юрист', children: [
children: [ {
{ name: 'Решение споров',
name: 'Решение споров', children: [
children: [ {
{ name: 'Страховые споры',
name: 'Страховые споры', link: ROUTES.JURIST_STRAHOVKA,
link: ROUTES.JURIST_STRAHOVKA, },
}, {
{ name: 'Земельные и имущественные',
name: 'Земельные и имущественные', link: ROUTES.JURIST_ZEMLYA_IMUSHESTVO,
link: ROUTES.JURIST_ZEMLYA_IMUSHESTVO, },
}, {
{ name: 'Семейные и наследственные',
name: 'Семейные и наследственные', link: ROUTES.JURIST_NASLEDSTVO,
link: ROUTES.JURIST_NASLEDSTVO, },
}, {
{ name: 'Трудовые споры',
name: 'Трудовые споры', link: ROUTES.JURIST_TRUD,
link: ROUTES.JURIST_TRUD, },
}, {
{ name: 'Споры по ДТП',
name: 'Споры по ДТП', link: ROUTES.JURIST_DTP,
link: ROUTES.JURIST_DTP, },
}, ],
], },
}, {
{ name: 'Сопровождение сделок',
name: 'Сопровождение сделок', link: ROUTES.JURIST_SDELKI_DOGOVORA,
link: ROUTES.JURIST_SDELKI_DOGOVORA, },
}, {
{ name: 'Представительство в суде',
name: 'Представительство в суде', link: ROUTES.JURIST_PREDSTAVITELSTVO,
link: ROUTES.JURIST_PREDSTAVITELSTVO, },
}, {
{ name: 'Банкротство физических лиц',
name: 'Банкротство физических лиц', link: ROUTES.JURIST_BANKROTSTVO,
link: ROUTES.JURIST_BANKROTSTVO, },
}, {
{ name: 'Взыскание задолженности',
name: 'Взыскание задолженности', link: ROUTES.JURIST_DOLGI,
link: ROUTES.JURIST_DOLGI, },
}, {
{ name: 'Помощь должникам',
name: 'Помощь должникам', link: ROUTES.JURIST_DOLZHNIKAM,
link: ROUTES.JURIST_DOLZHNIKAM, },
}, {
{ name: 'Возврат страховки и комиссии банков',
name: 'Возврат страховки и комиссии банков', link: ROUTES.JURIST_BANKI,
link: ROUTES.JURIST_BANKI, },
}, ],
], },
}, {
name: 'Эксперты',
link: ROUTES.EXPERTS,
},
{
name: 'Контакты',
link: ROUTES.CONTACTS,
}, },
]; ];

View File

@@ -19,7 +19,7 @@
display: flex; display: flex;
flex-direction: row; flex-direction: row;
align-items: center; align-items: center;
gap: rem(24px); gap: rem(32px);
} }
.Parent { .Parent {
@@ -27,35 +27,45 @@
position: relative; position: relative;
float: left; float: left;
line-height: 40px; line-height: 40px;
//background-color: #ffc72c;
//border-right: #CCC 1px solid;
}
.Parent a { .Row {
//margin: 10px 24px; display: flex;
//color: #5d3200; justify-content: space-between;
text-decoration: none; gap: 16px;
} align-items: center;
cursor: default;
}
.Parent:hover > ul { & a {
display: block; text-decoration: none;
position: absolute; }
box-shadow: 0px 0px 5px 0px rgba(0, 0, 0, 0.5);
&:hover > ul {
display: block;
position: absolute;
box-shadow: 0px 0px 5px 0px rgba(0, 0, 0, 0.5);
}
} }
.Child { .Child {
display: none; display: none;
}
.Child li { & li {
background-color: #FFFFFF; background-color: #FFFFFF;
line-height: 40px; line-height: 40px;
padding: 0 10px; padding: 4px 16px;
width: 100%; width: 100%;
} text-wrap: nowrap;
.Child li a { & a {
color: $color-text; color: $color-text;
display: block;
}
}
& .Parent > .Row > .Expand {
transform: rotateZ(0deg);
}
} }
ul { ul {
@@ -94,13 +104,7 @@
} }
.Expand { .Expand {
font-size: 16px; transform: rotateZ(90deg);
float: right;
margin-left: 8px;
color: $color-text
} }
} }
.Invite {
}
} }

View File

@@ -1,51 +1,45 @@
import s from './styles.module.scss'; import s from './styles.module.scss';
import Image from 'next/image'; import Image from 'next/image';
import dtrLogo from '@public/images/dtr-logo-eagle.png'; 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() { function BaseMenu() {
const Menu = ({ list }: { list: TMenu }) => {
const nodeList = (list: TMenu) => {
return list.map((item, index) => {
if (item.children && item.children.length) {
return (
<li key={index} className={s.Parent}>
<div className={s.Row}>
{item.name}
<Icons.MenuArrow className={s.Expand} />
</div>
<ul className={s.Child}>{nodeList(item.children)}</ul>
</li>
);
}
return (
<li key={index}>
<Link href={item.link!}>{item.name}</Link>
</li>
);
});
};
return (
<nav className={s.Nav}>
<ul className={s.Menu}>{nodeList(list)}</ul>
</nav>
);
};
return ( return (
<section className={s.ContainerNavbar}> <section className={s.ContainerNavbar}>
<div className={s.Navbar}> <div className={s.Navbar}>
<Image src={dtrLogo} alt={'ДиТрасо'} quality={75} priority /> <Image src={dtrLogo} alt={'ДиТрасо'} quality={75} priority />
<nav className={s.Nav}> <Menu list={baseMenu} />
<ul className={s.Menu}>
<li>
<a href='#'>Экспертиза</a>
</li>
<li className={s.Parent}>
<a href='#'>Оценка</a> <span className={s.Expand}>&#129170;</span>
<ul className={s.Child}>
<li>
<a href='#'>Link1</a>
</li>
<li className={s.Parent}>
<a href='#'>Link2</a>{' '}
<span className={s.Expand}>&#129170;</span>
<ul className={s.Child}>
<li>
<a href='#'>SubLink 1 asdasd</a>
</li>
<li>
<a href='#'>SubLink 2 asdasdasd</a>
</li>
<li>
<a href='#'>SubLink 3 xczzxcc</a>
</li>
</ul>
</li>
</ul>
</li>
<li>
<a href='#'>Юрист</a>
</li>
<li>
<a href='#'>Эксперты</a>
</li>
<li>
<a href='#'>Контакты</a>
</li>
</ul>
</nav>
<div className={s.Invite}> <div className={s.Invite}>
<button>+7 (999) 123-45-67</button> <button>+7 (999) 123-45-67</button>
</div> </div>
@@ -55,81 +49,3 @@ function BaseMenu() {
} }
export { 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',
},
},
],
},
},
];

View File

@@ -144,9 +144,28 @@ function Youtube(props: SVGIcon) {
); );
} }
//WeuiArrowFilled
export function MenuArrow(props: SVGIcon) {
return (
<svg
xmlns='http://www.w3.org/2000/svg'
width={12}
height={24}
viewBox='0 0 12 24'
{...props}
>
<path
fill='currentColor'
fillRule='evenodd'
d='M10.157 12.711L4.5 18.368l-1.414-1.414l4.95-4.95l-4.95-4.95L4.5 5.64l5.657 5.657a1 1 0 0 1 0 1.414'
></path>
</svg>
);
}
const Icons = Object.assign( const Icons = Object.assign(
{}, {},
{ Map, Envelope, Whatsapp, Telegram, Phone, Vk, Youtube }, { Map, Envelope, Whatsapp, Telegram, Phone, Vk, Youtube, MenuArrow },
); );
export { Icons }; export { Icons };