Dev #1

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

8
.idea/.gitignore generated vendored
View File

@@ -1,8 +0,0 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

6
.idea/compiler.xml generated
View File

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="TypeScriptCompiler">
<option name="useTypesFromServer" value="true" />
</component>
</project>

6
.idea/prettier.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="PrettierConfiguration">
<option name="myConfigurationMode" value="AUTOMATIC" />
</component>
</project>

View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectTasksOptions" suppressed-tasks="SCSS" />
</project>

96
.idea/workspace.xml generated Normal file
View File

@@ -0,0 +1,96 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AutoImportSettings">
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="2a96f817-9dc2-4f3c-893a-c4974c750774" name="Changes" comment="">
<change beforePath="$PROJECT_DIR$/.idea/.gitignore" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/compiler.xml" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/watcherTasks.xml" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/package-lock.json" beforeDir="false" afterPath="$PROJECT_DIR$/package-lock.json" afterDir="false" />
<change beforePath="$PROJECT_DIR$/package.json" beforeDir="false" afterPath="$PROJECT_DIR$/package.json" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/views/home/styles.module.scss" beforeDir="false" afterPath="$PROJECT_DIR$/src/views/home/styles.module.scss" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/views/home/ui.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/views/home/ui.tsx" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="DarkyenusTimeTracker">
<option name="totalTimeSeconds" value="160544" />
<option name="gitIntegration" value="true" />
<option name="naggedAbout" value="1" />
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="ProjectColorInfo">{
&quot;customColor&quot;: &quot;&quot;,
&quot;associatedIndex&quot;: 4
}</component>
<component name="ProjectId" id="35jvwBqGA9zlZwQ6LZmQZbbmwbc" />
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent"><![CDATA[{
"keyToString": {
"ModuleVcsDetector.initialDetectionPerformed": "true",
"RunOnceActivity.ShowReadmeOnStart": "true",
"RunOnceActivity.git.unshallow": "true",
"com.intellij.ml.llm.matterhorn.ej.ui.settings.DefaultModelSelectionForGA.v1": "true",
"git-widget-placeholder": "dev",
"ignore.virus.scanning.warn.message": "true",
"js.debugger.nextJs.config.created.client": "true",
"js.debugger.nextJs.config.created.server": "true",
"junie.onboarding.icon.badge.shown": "true",
"node.js.detected.package.eslint": "true",
"node.js.detected.package.tslint": "true",
"node.js.selected.package.eslint": "(autodetect)",
"node.js.selected.package.tslint": "(autodetect)",
"nodejs_package_manager_path": "npm",
"npm.Next.js: server-side.executor": "Run",
"to.speed.mode.migration.done": "true",
"ts.external.directory.path": "C:\\dev-personal\\ocenka-web\\node_modules\\typescript\\lib",
"vue.rearranger.settings.migration": "true"
}
}]]></component>
<component name="RunManager" selected="npm.Next.js: server-side">
<configuration name="Next.js: debug client-side" type="JavascriptDebugType" uri="http://localhost:3000/">
<method v="2" />
</configuration>
<configuration name="Next.js: server-side" type="js.build_tools.npm">
<package-json value="$PROJECT_DIR$/package.json" />
<command value="run" />
<scripts>
<script value="dev" />
</scripts>
<node-interpreter value="project" />
<envs />
<method v="2" />
</configuration>
</component>
<component name="SharedIndexes">
<attachedChunks>
<set>
<option value="bundled-js-predefined-d6986cc7102b-3aa1da707db6-JavaScript-WS-252.27397.92" />
</set>
</attachedChunks>
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="2a96f817-9dc2-4f3c-893a-c4974c750774" name="Changes" comment="" />
<created>1763636886190</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1763636886190</updated>
<workItem from="1763636887488" duration="5508000" />
</task>
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="3" />
</component>
</project>

8
package-lock.json generated
View File

@@ -14,7 +14,7 @@
"@maskito/react": "^3.9.1",
"libphonenumber-js": "^1.12.9",
"next": "15.5.2",
"nodemailer": "^7.0.5",
"nodemailer": "7.0.7",
"react": "19.1.1",
"react-dom": "19.1.1",
"react-hook-form": "^7.60.0",
@@ -4535,9 +4535,9 @@
}
},
"node_modules/nodemailer": {
"version": "7.0.5",
"resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-7.0.5.tgz",
"integrity": "sha512-nsrh2lO3j4GkLLXoeEksAMgAOqxOv6QumNRVQTJwKH4nuiww6iC2y7GyANs9kRAxCexg3+lTWM3PZ91iLlVjfg==",
"version": "7.0.7",
"resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-7.0.7.tgz",
"integrity": "sha512-jGOaRznodf62TVzdyhKt/f1Q/c3kYynk8629sgJHpRzGZj01ezbgMMWJSAjHADcwTKxco3B68/R+KHJY2T5BaA==",
"license": "MIT-0",
"engines": {
"node": ">=6.0.0"

View File

@@ -17,7 +17,7 @@
"@maskito/react": "^3.9.1",
"libphonenumber-js": "^1.12.9",
"next": "15.5.2",
"nodemailer": "^7.0.5",
"nodemailer": "7.0.7",
"react": "19.1.1",
"react-dom": "19.1.1",
"react-hook-form": "^7.60.0",

View File

@@ -33,23 +33,6 @@
}
}
.Container {
position: relative;
margin: 0 auto;
max-width: rem(1540px);
padding: 40px 10px;
@include iftablet {
padding: 40px 20px;
}
@include iflaptop {
padding: 40px 28px;
}
@include ifdesktop {
padding: 40px;
}
}
.Row {
display: grid;
grid-template-columns: auto;
@@ -165,4 +148,87 @@
color: $color-text;
text-align: center;
}
}
.Service {
position: relative;
margin: 0 auto;
max-width: rem(1540px);
padding: 40px 10px;
@include iftablet {
padding: 40px 20px;
}
@include iflaptop {
padding: 40px 28px;
}
@include ifdesktop {
padding: 40px;
}
.Title {
font-family: $font-roboto;
font-weight: 500;
font-size: 32px;
line-height: 100%;
color: $color-text;
text-align: center;
margin-bottom: rem(40px);
}
.Switcher {
box-sizing: border-box;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
width: 100%;
border: 1px solid $color-green;
border-radius: rem(20px);
margin-bottom: rem(40px);
.Button {
box-sizing: border-box;
flex: 1;
display: flex;
justify-content: center;
padding: 20px;
border-radius: rem(18px);
color: $color-green;
text-transform: uppercase;
&_active {
background-color: $color-green;
color: $color-white;
}
}
}
.Grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: rem(20px);
.Tile {
display: flex;
flex-direction: column;
gap: rem(24px);
border: 1px solid $color-green;
padding: rem(20px) rem(40px);
border-radius: rem(20px);
//box-shadow: 4px 0px 10px 0px rgba(0,146,131,0.5);
cursor: pointer;
font-family: $font-roboto;
font-weight: 300;
font-size: rem(16px);
line-height: 100%;
color: $color-green;
text-align: center;
&:hover {
box-shadow: 4px 4px 10px 0px rgba(0,146,131,0.5);
}
}
}
}

View File

@@ -3,6 +3,8 @@ import Image from 'next/image';
import { Button, Icons, PartnersSlider } from '@shared/ui';
import bg from '@public/images/bg-main.jpg';
import lines from '@public/images/bg-lines.png';
import clsx from 'clsx';
import { ROUTES } from '@shared/const/route';
export default function Main() {
return (
@@ -45,6 +47,24 @@ export default function Main() {
</div>
</section>
<section className={s.Service}>
<h2 className={s.Title}>Выберите услугу</h2>
<div className={s.Switcher}>
<div className={clsx(s.Button, s.Button_active)}>Экспертиза</div>
<div className={s.Button}>Оценка</div>
<div className={s.Button}>Юрист</div>
</div>
<div className={s.Grid}>
{servicesData.expertise.map(({ id, title, icon, url }, i) => (
<div key={id} className={s.Tile}>
{title}
</div>
))}
</div>
</section>
<section className={s.BottomRow}>
<div className={s.LeftBlock}>
<p className={s.LineTitle}>Остались вопросы?</p>
@@ -57,9 +77,157 @@ export default function Main() {
</section>
<section className={s.Slider}>
<h3 className={s.Title}>Наши клиенты и партнеры</h3>
<h2 className={s.Title}>Наши клиенты и партнеры</h2>
<PartnersSlider />
</section>
</>
);
}
const servicesData = {
expertise: [
{
id: 0,
title: 'Строительно-техническая экспертиза',
icon: '',
url: ROUTES.EXPERTIZA_STROIT,
},
{
id: 1,
title: 'Автотехническая экспертиза',
icon: '',
url: ROUTES.EXPERTIZA_AUTOTECH,
},
{
id: 2,
title: 'Кадастровая экспертиза',
icon: '',
url: ROUTES.EXPERTIZA_KADASTR,
},
{
id: 3,
title: 'Технико-криминалистическая экспертиза',
icon: '',
url: ROUTES.EXPERTIZA_TECH_CRIM,
},
{
id: 4,
title: 'Компьютерно-техническая экспертиза',
icon: '',
url: ROUTES.EXPERTIZA_COPMPUTER,
},
{
id: 5,
title: 'Товароведческая экспертиза',
icon: '',
url: ROUTES.EXPERTIZA_TOVAR,
},
{
id: 6,
title: 'Трасологическая экспертиза',
icon: '',
url: ROUTES.EXPERTIZA_TRASOLOGIA,
},
{
id: 7,
title: 'Бухгалтерская экспертиза',
icon: '',
url: ROUTES.EXPERTIZA_BUHGALTER,
},
],
ocenka: [
{
id: 0,
title: 'Оценка недвижимого имущества',
icon: '',
url: ROUTES.OCENKA_NEDVIGA,
},
{
id: 1,
title: 'Оценка движимого имущества',
icon: '',
url: ROUTES.OCENKA_RYNOCHNAYA,
},
{
id: 2,
title: 'Оценка для наследства',
icon: '',
url: ROUTES.OCENKA_NASLEDSTVO,
},
{
id: 3,
title: 'Оценка предприятия, бизнеса',
icon: '',
url: ROUTES.OCENKA_BUSINESS,
},
{
id: 4,
title: 'Оценка арендной платы',
icon: '',
url: ROUTES.OCENKA_ARENDA,
},
{
id: 5,
title: 'Оценка для ипотеки',
icon: '',
url: ROUTES.OCENKA_IPOTEKA,
},
{
id: 6,
title: 'Оценка для нотариуса',
icon: '',
url: ROUTES.OCENKA_NOTARIUS,
},
{
id: 7,
title: 'Оценка машин и оборудования',
icon: '',
url: ROUTES.OCENKA_MASHINES,
},
],
jurist: [
{
id: 0,
title: 'Представительство в суде',
icon: '',
url: ROUTES.JURIST_PREDSTAVITELSTVO,
},
{
id: 1,
title: 'Банкротство физических лиц',
icon: '',
url: ROUTES.JURIST_BANKROTSTVO,
},
{
id: 2,
title: 'Сопровождение сделок, составление договоров',
icon: '',
url: ROUTES.JURIST_SDELKI_DOGOVORA,
},
{
id: 3,
title: 'Споры с застройщиком',
icon: '',
url: ROUTES.JURIST_ZEM_SPORY,
},
{
id: 4,
title: 'Споры со страховой компанией',
icon: '',
url: ROUTES.JURIST_STRAHOVKA,
},
{
id: 5,
title: 'Помощь должникам',
icon: '',
url: ROUTES.JURIST_DOLZHNIKAM,
},
{
id: 6,
title: 'Взыскание долгов с юридических лиц',
icon: '',
url: ROUTES.JURIST_DOLGI,
},
{ id: 7, title: 'Споры по ДТП', icon: '', url: ROUTES.JURIST_DTP },
],
};