Commit a13ce86708e3f545245c9eca56f27dee628c7588

Authored by Андрей Ларионов
1 parent d152a3a68e

Обновление проекта рекаморе 22 февраля

Showing 19 changed files with 1521 additions and 34 deletions Side-by-side Diff

app/Http/Controllers/EmployerController.php
... ... @@ -5,6 +5,7 @@ namespace App\Http\Controllers;
5 5 use App\Models\Ad_employer;
6 6 use App\Models\Category;
7 7 use Illuminate\Http\Request;
  8 +use Illuminate\Support\Facades\Auth;
8 9  
9 10 class EmployerController extends Controller
10 11 {
... ... @@ -25,4 +26,10 @@ class EmployerController extends Controller
25 26 return view('vacance-item', compact('title', 'Query'));
26 27 }
27 28 }
  29 +
  30 + public function logout() {
  31 + Auth::logout();
  32 + return redirect()->route('index')
  33 + ->with('success', 'Вы вышли из личного кабинета');
  34 + }
28 35 }
app/Http/Controllers/MainController.php
... ... @@ -10,6 +10,8 @@ use App\Models\Job_title;
10 10 use App\Models\News;
11 11 use App\Models\reclame;
12 12 use Illuminate\Http\Request;
  13 +use Illuminate\Support\Facades\Auth;
  14 +use Illuminate\Support\Facades\Validator;
13 15  
14 16 class MainController extends Controller
15 17 {
... ... @@ -28,6 +30,16 @@ class MainController extends Controller
28 30 return view('index', compact('news', 'categories', 'employers'));
29 31 }
30 32  
  33 + public function search_vacancies(Request $request) {
  34 + if ($request->has('search')) {
  35 + $search = $request->get('search');
  36 + $job_titles = Job_title::query()->where('name', 'LIKE', "%$search%")->first();
  37 + if (isset($job_titles->id))
  38 + if ($job_titles->id > 0)
  39 + return redirect()->route('vacancies', ['job' => $job_titles->id]);
  40 + }
  41 + }
  42 +
31 43 public function vacancies(Request $request) {
32 44 //должности
33 45 $Job_title = Job_title::query()->orderBy('name')->get();
... ... @@ -38,7 +50,7 @@ class MainController extends Controller
38 50 ->join('ad_jobs', 'ad_jobs.ad_employer_id', '=', 'ad_employers.id');
39 51  
40 52 //категории и вакансии
41   - if ($request->ajax()) {
  53 + if (($request->has('job')) && ($request->get('job') > 0)) {
42 54 $categories = $categories->Where('job_title_id', '=', $request->get('job'))
43 55 ->OrderByDesc('created_at')
44 56 ->GroupBy('categories.id')
... ... @@ -115,4 +127,55 @@ class MainController extends Controller
115 127 public function contacts() {
116 128 return view('contacts');
117 129 }
  130 +
  131 + // Вход в личный кабинет
  132 + public function input_login(Request $request)
  133 + {
  134 + $rules = [
  135 + 'email' => 'required|string|email',
  136 + 'password' => 'required|string',
  137 + ];
  138 +
  139 + $messages = [
  140 + 'required' => 'Укажите обязательное поле «:attribute»',
  141 + 'email' => 'Введите корректный email',
  142 + 'min' => [
  143 + 'string' => 'Поле «:attribute» должно быть не меньше :min символов',
  144 + 'file' => 'Файл «:attribute» должен быть не меньше :min Кбайт'
  145 + ],
  146 + 'max' => [
  147 + 'string' => 'Поле «:attribute» должно быть не больше :max символов',
  148 + 'file' => 'Файл «:attribute» должен быть не больше :max Кбайт'
  149 + ],
  150 + ];
  151 +
  152 + $validator = Validator::make($request->all(), $rules, $messages);
  153 +
  154 + if ($validator->fails()) {
  155 + return Array("ERROR" => "Емайл невалидный");//$validator; //back()->withErrors($validator)->withInput();
  156 + } else {
  157 + $credentials = $request->only('email', 'password');
  158 +
  159 + if (Auth::attempt($credentials, $request->has('remember'))) {
  160 +
  161 + if (is_null(Auth::user()->email_verified_at)) {
  162 + Auth::logout();
  163 + return Array("ERROR" => "Адрес почты не подтвержден");
  164 +
  165 + }
  166 +
  167 + if (Auth::user()->is_worker) {
  168 + return Array("REDIRECT" => redirect()->route('worker.cabinet')->getTargetUrl());
  169 + } else {
  170 + return Array("REDIRECT" => redirect()->route('employer.cabinet')->getTargetUrl());
  171 + }
  172 +
  173 + return Array("SUCCESS" => "Вы успешно вошли в личный кабинет");
  174 + //->route('index')
  175 + //->with('success', 'Вы вошли в личный кабинет.');
  176 + } else {
  177 + return Array("ERROR" => "Неверный логин или пароль!");
  178 + }
  179 + }
  180 + }
118 181 }
app/Http/Controllers/WorkerController.php
... ... @@ -8,11 +8,7 @@ use Illuminate\Http\Request;
8 8  
9 9 class WorkerController extends Controller
10 10 {
11   - //главная
12   - public function index() {
13   - return;
14   - }
15   -
  11 + public $status_work = Array(0 => 'Ищу работу', 1=> 'Не указано', 2=>'Не ищу работу');
16 12 //профиль
17 13 public function profile(Worker $worker) {
18 14 $get_date = date('Y.m');
... ... @@ -40,8 +36,30 @@ class WorkerController extends Controller
40 36 return view('public.workers.profile', compact('worker', 'stat'));
41 37 }
42 38  
43   - //публичная оферта
44   - public function public_offer() {
45   - return;
  39 + // лист база резюме
  40 + public function bd_resume() {
  41 + $status_work = $this->status_work;
  42 + $resumes = Worker::query()->with('users')->with('job_titles');
  43 +
  44 + $res_count = $resumes->count();
  45 + $resumes = $resumes->paginate(5);
  46 +
  47 + return view('resume', compact('resumes', 'status_work', 'res_count'));
  48 + }
  49 +
  50 + // анкета соискателя
  51 + public function resume_profile(Worker $worker) {
  52 + $status_work = $this->status_work;
  53 + $Query = Worker::query()->with('users')->with('job_titles')
  54 + ->with('place_worker')->with('sertificate')->with('prev_company')
  55 + ->with('infobloks');
  56 + $Query = $Query->where('id', '=', $worker->id);
  57 + $Query = $Query->get();
  58 + return view('worker', compact('Query', 'status_work'));
  59 + }
  60 +
  61 + // скачать анкету соискателя
  62 + public function resume_download(Worker $worker) {
  63 + print_r('Резюме для скачивания');
46 64 }
47 65 }
app/Models/PrevCompany.php
... ... @@ -0,0 +1,13 @@
  1 +<?php
  2 +
  3 +namespace App\Models;
  4 +
  5 +use Illuminate\Database\Eloquent\Factories\HasFactory;
  6 +use Illuminate\Database\Eloquent\Model;
  7 +
  8 +class PrevCompany extends Model
  9 +{
  10 + use HasFactory;
  11 +
  12 + protected $table = 'prev_company';
  13 +}
app/Models/Worker.php
... ... @@ -55,7 +55,32 @@ class Worker extends Model
55 55 return $this->belongsTo(User::class, 'user_id');
56 56 }
57 57  
  58 + // Связь Работника с сертификами (0-0 - 1)
  59 + public function sertificate() {
  60 + return $this->hasMany(sertification::class);
  61 + }
  62 +
  63 + // Связь Работника с должностями (0-0 - 1)
  64 + public function job_titles() {
  65 + return $this->hasMany(Job_title::class, 'id');
  66 + }
  67 +
  68 + //Связь Работника с опытом работы (1 - 0-0)
  69 + public function place_worker() {
  70 + return $this->hasMany(place_works::class);
  71 + }
  72 +
58 73 public function scopeActive($query) {
59 74 return $query->where('is_remove', '=', '0');
60 75 }
  76 +
  77 + //Связь Работника с предыдущими компаниями
  78 + public function prev_company() {
  79 + return $this->hasMany(PrevCompany::class);
  80 + }
  81 +
  82 + //Связь Работника с инфоблоками (0-0 - 0-0)
  83 + public function infobloks() {
  84 + return $this->belongsToMany(infobloks::class,'dop_info', 'worker_id', 'infoblok_id');
  85 + }
61 86 }
database/migrations/2024_02_22_080113_alter_table_sertification.php
... ... @@ -0,0 +1,34 @@
  1 +<?php
  2 +
  3 +use Illuminate\Database\Migrations\Migration;
  4 +use Illuminate\Database\Schema\Blueprint;
  5 +use Illuminate\Support\Facades\Schema;
  6 +
  7 +return new class extends Migration
  8 +{
  9 + /**
  10 + * Run the migrations.
  11 + *
  12 + * @return void
  13 + */
  14 + public function up()
  15 + {
  16 + Schema::table('sertifications', function (Blueprint $table) {
  17 + $table->string('name', 255)->nullable(false);
  18 + $table->string('education', 255)->nullable(false);
  19 + });
  20 + }
  21 +
  22 + /**
  23 + * Reverse the migrations.
  24 + *
  25 + * @return void
  26 + */
  27 + public function down()
  28 + {
  29 + Schema::table('sertifications', function (Blueprint $table) {
  30 + $table->dropColumn('name');
  31 + $table->dropColumn('education');
  32 + });
  33 + }
  34 +};
database/migrations/2024_02_22_092030_create_table_prev_company.php
... ... @@ -0,0 +1,36 @@
  1 +<?php
  2 +
  3 +use Illuminate\Database\Migrations\Migration;
  4 +use Illuminate\Database\Schema\Blueprint;
  5 +use Illuminate\Support\Facades\Schema;
  6 +
  7 +return new class extends Migration
  8 +{
  9 + /**
  10 + * Run the migrations.
  11 + *
  12 + * @return void
  13 + */
  14 + public function up()
  15 + {
  16 + Schema::create('prev_company', function (Blueprint $table) {
  17 + $table->id();
  18 + $table->bigInteger('worker_id')->nullable(false);
  19 + $table->string('name_company', 255)->nullable(true);
  20 + $table->string('direct', 255)->nullable(true);
  21 + $table->string('telephone', 255)->nullable(false);
  22 + $table->string('telephone2', 255)->nullable(false);
  23 + $table->timestamps();
  24 + });
  25 + }
  26 +
  27 + /**
  28 + * Reverse the migrations.
  29 + *
  30 + * @return void
  31 + */
  32 + public function down()
  33 + {
  34 + Schema::dropIfExists('prev_company');
  35 + }
  36 +};
public/images/default_man.jpg

25.8 KB

... ... @@ -6,6 +6,22 @@ let scripts = function () {
6 6 $('.js-parent-toggle').on('click', function () {
7 7 $(this).parent().toggleClass('active');
8 8 });
  9 + $('.js-parent-remove').on('click', function () {
  10 + $(this).parent().remove();
  11 + });
  12 + $('.js-menu-toggle').on('click', function () {
  13 + window.scrollTo(0,0);
  14 + $('#body').toggleClass('menu-is-actived');
  15 + });
  16 + $('.js-cookies-close').on('click', function () {
  17 + $('#body').removeClass('cookies-is-actived');
  18 + });
  19 + $('.js-works-edit').on('click', function () {
  20 + $(this).parent().parent().parent().addClass('active');
  21 + });
  22 + $('.js-works-remove').on('click', function () {
  23 + $(this).parent().parent().parent().parent().remove();
  24 + });
9 25  
10 26 $('[data-tab]').on('click',function(){
11 27 $('[data-tab]').removeClass('active');
... ... @@ -15,6 +31,16 @@ let scripts = function () {
15 31 $('[data-body='+id+']').addClass('showed');
16 32 });
17 33  
  34 + $('.js-password-show').on('click',function(){
  35 + $(this).parent().addClass('active');
  36 + $(this).parent().parent().find('input').attr('type','text');
  37 + });
  38 +
  39 + $('.js-password-hide').on('click',function(){
  40 + $(this).parent().removeClass('active');
  41 + $(this).parent().parent().find('input').attr('type','password');
  42 + });
  43 +
18 44 let checkScrollTop = function () {
19 45 if ($(document).scrollTop() == 0) {
20 46 $('#body').removeClass('begin');
... ... @@ -30,6 +56,8 @@ let scripts = function () {
30 56 let closeAll = function () {
31 57 $('.js-toggle').removeClass('active');
32 58 $('.js-parent-toggle').parent().removeClass('active');
  59 + $('#body').removeClass('menu-is-actived');
  60 + $('#body').removeClass('cookies-is-actived');
33 61 }
34 62  
35 63 $(document).keyup(function (e) {
resources/views/index.blade.php
1 1 @extends('layout.frontend', ['title' => 'Главная страница РекаМоре'])
2 2  
  3 +@section('scripts')
  4 + <script>
  5 + console.log('Test system');
  6 + $(document).on('click', '#button_send', function() {
  7 + var field_login = $('#email');
  8 + var field_pwd = $('#password');
  9 + var login_val = field_login.val();
  10 + var pwd_val = field_pwd.val();
  11 +
  12 + console.log('login: '+login_val+' password: '+pwd_val);
  13 +
  14 + $.ajax({
  15 + type: "GET",
  16 + url: "{{ route('login') }}",
  17 + data: "email="+login_val+"&password="+pwd_val,
  18 + success: function (data) {
  19 + console.log('Вход в систему');
  20 + console.log(data);
  21 + //$('#block_1').html(data);
  22 + },
  23 + headers: {
  24 + 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
  25 + },
  26 + error: function (data) {
  27 + data = JSON.stringify(data);
  28 + console.log('Error: ' + data);
  29 + }
  30 + });
  31 + });
  32 + </script>
  33 +@endsection
  34 +
3 35 @section('content')
4 36 <section class="work">
5 37 <div class="container">
6   - <img src="images/1.png" alt="" class="work__pic">
  38 + <img src="{{ asset('images/1.png') }}" alt="" class="work__pic">
7 39 <div class="work__body">
8 40 <div class="work__title">
9 41 Работа в море /
... ... @@ -16,23 +48,23 @@
16 48 <div>Тысячи соискателей увидят Ваше объявление</div>
17 49 <div>Десятки компаний выкладывают объявления каждый день</div>
18 50 </div>
19   - <form class="search work__form">
20   - <input type="search" class="input" placeholder="Желаемая должность" required>
  51 + <form class="search work__form" action="{{ route('search_vacancies') }}" method="GET">
  52 + <input type="search" id="search" name="search" class="input" placeholder="Желаемая должность" required>
21 53 <button type="submit" class="button button_light">Посмотреть вакансии</button>
22 54 <span>
23   - <svg>
24   - <use xlink:href="images/sprite.svg#search"></use>
25   - </svg>
26   - </span>
  55 + <svg>
  56 + <use xlink:href="{{ asset('images/sprite.svg#search') }}"></use>
  57 + </svg>
  58 + </span>
27 59 </form>
28   - <button class="button work__search">Я ищу сотрудника</button>
  60 + <a href="{{ route('bd_resume') }}" class="button work__search">Я ищу сотрудника</a>
29 61 <div class="work__get">
30 62 <b>Скачать приложение</b>
31   - <a href="#">
32   - <img src="images/google.svg" alt="">
  63 + <a href="">
  64 + <img src="{{ asset('images/google.svg') }}" alt="">
33 65 </a>
34   - <a href="#">
35   - <img src="images/apple.svg" alt="">
  66 + <a href="">
  67 + <img src="{{ asset('images/apple.svg') }}" alt="">
36 68 </a>
37 69 </div>
38 70 </div>
... ... @@ -66,7 +98,7 @@
66 98 <div class="container">
67 99 <div class="title">Новые вакансии</div>
68 100 <div class="vacancies__body">
69   - <button class="vacancies__more button button_light js-parent-toggle">Все должности</button>
  101 + <a class="vacancies__more button button_light js-parent-toggle" href="{{ route('vacancies') }}">Все должности</a>
70 102 <div class="vacancies__list">
71 103 @if ($categories->count())
72 104 @foreach ($categories as $cat)
... ... @@ -115,7 +147,7 @@
115 147 </div>
116 148 <div class="swiper-pagination"></div>
117 149 </div>
118   - <a href="#" class="employer__more button button_light">Все должности</a>
  150 + <a href="{{ route('shipping_companies') }}" class="employer__more button button_light">Все работодатели</a>
119 151 </div>
120 152 </section>
121 153 <section class="about">
... ... @@ -127,14 +159,14 @@
127 159 <div class="about__item">
128 160 <b>Для работодателей</b>
129 161 <span>Наш ресурс позволит Вам за демократичную цену найти нужных специалистов в кратчайшие
130   - сроки, подробнее об условиях можно узнать <a href="#">здесь</a>.</span>
131   - <button class="about__button button button_whited">Поиск сотрудников</button>
  162 + сроки, подробнее об условиях можно узнать <a href="{{ route('page', ['pages' => 'Stoimost-razmescheniya']) }}">здесь</a>.</span>
  163 + <a class="about__button button button_whited" href="{{ route('bd_resume') }}">Поиск сотрудников</a>
132 164 </div>
133 165 <div class="about__item">
134 166 <b>Для сотрудников</b>
135 167 <span>Наше преимущество — это большой объем вакансий, более 70 судоходных компаний России и
136 168 СНГ ищут сотрудников через наши ресурсы</span>
137   - <button class="about__button button button_whited">Посмотреть вакансии</button>
  169 + <a class="about__button button button_whited" href="{{ route('vacancies') }}">Посмотреть вакансии</a>
138 170 </div>
139 171 </div>
140 172 </div>
... ... @@ -147,12 +179,12 @@
147 179 <div class="navs">
148 180 <button class="js-news-swiper-button-prev">
149 181 <svg class="rotate180">
150   - <use xlink:href="images/sprite.svg#arrow"></use>
  182 + <use xlink:href="{{ asset('images/sprite.svg#arrow') }}"></use>
151 183 </svg>
152 184 </button>
153 185 <button class="js-news-swiper-button-next">
154 186 <svg>
155   - <use xlink:href="images/sprite.svg#arrow"></use>
  187 + <use xlink:href="{{ asset('images/sprite.svg#arrow') }}"></use>
156 188 </svg>
157 189 </button>
158 190 </div>
resources/views/layout/frontend.blade.php
... ... @@ -33,12 +33,16 @@
33 33 </nav>
34 34 </div>
35 35 <div class="header__right">
  36 + @guest
  37 +
  38 + @else
36 39 <button class="header__notifs header__notifs_actived">
37 40 <svg>
38 41 <use xlink:href="{{ asset('images/sprite.svg#ring') }}"></use>
39 42 </svg>
40 43 <span>Уведомления</span>
41 44 </button>
  45 + @endguest
42 46 <div class="header__right-line"></div>
43 47 <button class="header__burger">
44 48 <svg>
... ... @@ -46,7 +50,7 @@
46 50 </svg>
47 51 </button>
48 52 @guest
49   - <a class="button header__sign" href="{{ route('login') }}">Войти</a>
  53 + <a class="button header__sign" data-fancybox data-src="#sign" data-options='{"touch":false,"autoFocus":false}'>Войти</a>
50 54 @else
51 55 <a class="button header__sign" href="{{ route('logout') }}">Выйти</a>
52 56 @endguest
... ... @@ -216,11 +220,260 @@
216 220 </div> <!-- END BOTTOM WRAPPER -->
217 221  
218 222 <div hidden> <!-- BEGIN MODALS WRAPPER -->
219   - <div class="modal">
220   - modal
  223 + @include('modals.send_worker')
  224 + <div id="question" class="modal modal_bg">
  225 + <div class="modal__body">
  226 + <div class="modal__title">Отправить сообщение "Наяда"</div>
  227 + <div class="modal__text">Вы должны быть авторизованы, чтобы отправить личное сообщение</div>
  228 + <div class="modal__buttons">
  229 + <a href="#" class="button">Войти</a>
  230 + <a href="#" class="button button_light">Зарегистрироваться</a>
  231 + </div>
  232 + </div>
  233 + </div>
  234 +
  235 + @include('modals.send_login')
  236 +
  237 + <div id="reset" class="modal">
  238 + <div class="modal__body">
  239 + <div class="modal__title left">Сбросить пароль</div>
  240 + <div class="modal__text left">Пожалуйста, введите имя пользователя или адрес электронной почты</div>
  241 + <form class="modal__sign">
  242 + <div class="modal__sign-item">
  243 + <input type="text" class="input" placeholder="Имя пользователя или email адрес" required>
  244 + </div>
  245 + <div class="modal__sign-item">
  246 + <button type="submit" class="button">Получить новый пароль</button>
  247 + </div>
  248 + </form>
  249 + <div class="modal__text">
  250 + <span>Вспомнили пароль?</span>
  251 + &nbsp;
  252 + <a href="#">Войти</a>
  253 + </div>
  254 + </div>
  255 + </div>
  256 + <div id="reg" class="modal">
  257 + <div class="modal__body">
  258 + <div class="modal__title left">Регистрация</div>
  259 + <div class="modal__tabs">
  260 + <button type="button" class="modal__tabs-item button button_light active" data-tab="1">Кандидат</button>
  261 + <button type="button" class="modal__tabs-item button button_light" data-tab="2">Работодатель</button>
  262 + </div>
  263 + <form class="modal__reg showed" data-body="1">
  264 + <div class="modal__reg-item form-group">
  265 + <label class="form-group__label">Электронная почта</label>
  266 + <div class="form-group__item">
  267 + <input type="email" class="input" placeholder="info@rekamore.su" required>
  268 + </div>
  269 + </div>
  270 + <div class="modal__reg-item form-group">
  271 + <label class="form-group__label">Пароль</label>
  272 + <div class="form-group__item">
  273 + <input type="password" class="input" placeholder="**********" required>
  274 + <button type="button" class="eye">
  275 + <svg class="js-password-show">
  276 + <use xlink:href="images/sprite.svg#eye"></use>
  277 + </svg>
  278 + <svg class="js-password-hide">
  279 + <use xlink:href="images/sprite.svg#eye-2"></use>
  280 + </svg>
  281 + </button>
  282 + </div>
  283 + </div>
  284 + <div class="modal__reg-item form-group">
  285 + <label class="form-group__label">Подтвердить пароль</label>
  286 + <div class="form-group__item">
  287 + <input type="password" class="input" placeholder="**********" required>
  288 + <button type="button" class="eye">
  289 + <svg class="js-password-show">
  290 + <use xlink:href="images/sprite.svg#eye"></use>
  291 + </svg>
  292 + <svg class="js-password-hide">
  293 + <use xlink:href="images/sprite.svg#eye-2"></use>
  294 + </svg>
  295 + </button>
  296 + </div>
  297 + </div>
  298 + <div class="modal__reg-item form-group">
  299 + <label class="form-group__label">Статус</label>
  300 + <div class="form-group__item">
  301 + <div class="select">
  302 + <select class="js-select2">
  303 + <option selected disabled>Не указано</option>
  304 + <option>Вариант 1</option>
  305 + <option>Вариант 2</option>
  306 + <option>Вариант 3</option>
  307 + <option>Вариант 4</option>
  308 + <option>Вариант 5</option>
  309 + <option>Вариант 6</option>
  310 + </select>
  311 + </div>
  312 + </div>
  313 + </div>
  314 + <div class="modal__reg-item form-group">
  315 + <label class="form-group__label">Ф.И.О.</label>
  316 + <div class="form-group__item">
  317 + <input type="text" class="input" placeholder="Шестаков Михаил Юрьевич" required>
  318 + </div>
  319 + </div>
  320 + <div class="modal__reg-item form-group">
  321 + <label class="form-group__label">Должность</label>
  322 + <div class="form-group__item">
  323 + <input type="text" class="input" placeholder="Палуба" required>
  324 + </div>
  325 + </div>
  326 + <div class="modal__reg-item form-group">
  327 + <label class="form-group__label">Номер телефона</label>
  328 + <div class="form-group__item">
  329 + <input type="tel" class="input" placeholder="+7 (___) ___-__-__" required>
  330 + </div>
  331 + </div>
  332 + <div class="modal__reg-item">
  333 + <img src="images/catpcha.jpg" alt="" class="captcha">
  334 + </div>
  335 + <div class="modal__reg-item">
  336 + <label class="checkbox">
  337 + <input type="checkbox" class="checkbox__input" required>
  338 + <span class="checkbox__icon">
  339 + <svg>
  340 + <use xlink:href="images/sprite.svg#v"></use>
  341 + </svg>
  342 + </span>
  343 + <span class="checkbox__text">
  344 + <span>
  345 + Я согласен(на) с <a href="#">Политикой конфиденциальности</a>
  346 + </span>
  347 + </span>
  348 + </label>
  349 + </div>
  350 + <button type="submit" class="button">Зарегистрироваться</button>
  351 + </form>
  352 + <form class="modal__reg" data-body="2">
  353 + <div class="modal__reg-item form-group">
  354 + <label class="form-group__label">Электронная почта</label>
  355 + <div class="form-group__item">
  356 + <input type="email" class="input" placeholder="info@rekamore.su" required>
  357 + </div>
  358 + </div>
  359 + <div class="modal__reg-item form-group">
  360 + <label class="form-group__label">Пароль</label>
  361 + <div class="form-group__item">
  362 + <input type="password" class="input" placeholder="**********" required>
  363 + <button type="button" class="eye">
  364 + <svg class="js-password-show">
  365 + <use xlink:href="images/sprite.svg#eye"></use>
  366 + </svg>
  367 + <svg class="js-password-hide">
  368 + <use xlink:href="images/sprite.svg#eye-2"></use>
  369 + </svg>
  370 + </button>
  371 + </div>
  372 + </div>
  373 + <div class="modal__reg-item form-group">
  374 + <label class="form-group__label">Подтвердить пароль</label>
  375 + <div class="form-group__item">
  376 + <input type="password" class="input" placeholder="**********" required>
  377 + <button type="button" class="eye">
  378 + <svg class="js-password-show">
  379 + <use xlink:href="images/sprite.svg#eye"></use>
  380 + </svg>
  381 + <svg class="js-password-hide">
  382 + <use xlink:href="images/sprite.svg#eye-2"></use>
  383 + </svg>
  384 + </button>
  385 + </div>
  386 + </div>
  387 + <div class="modal__reg-item form-group">
  388 + <label class="form-group__label">Номер телефона</label>
  389 + <div class="form-group__item">
  390 + <input type="tel" class="input" placeholder="+7 (___) ___-__-__" required>
  391 + </div>
  392 + </div>
  393 + <div class="modal__reg-item form-group">
  394 + <label class="form-group__label">Название судоходной компании</label>
  395 + <div class="form-group__item">
  396 + <input type="text" class="input" placeholder="ООО Река Море" required>
  397 + </div>
  398 + </div>
  399 + <div class="modal__reg-item">
  400 + <img src="images/catpcha.jpg" alt="" class="captcha">
  401 + </div>
  402 + <div class="modal__reg-item">
  403 + <label class="checkbox">
  404 + <input type="checkbox" class="checkbox__input" required>
  405 + <span class="checkbox__icon">
  406 + <svg>
  407 + <use xlink:href="images/sprite.svg#v"></use>
  408 + </svg>
  409 + </span>
  410 + <span class="checkbox__text">
  411 + <span>
  412 + Я согласен(на) с <a href="#">Политикой конфиденциальности</a>
  413 + </span>
  414 + </span>
  415 + </label>
  416 + </div>
  417 + <button type="submit" class="button">Зарегистрироваться</button>
  418 + </form>
  419 + <div class="modal__text">
  420 + <span>Вспомнили пароль?</span>
  421 + &nbsp;
  422 + <a href="#">Войти</a>
  423 + </div>
  424 + </div>
  425 + </div>
  426 + <div id="thanks" class="modal modal_bg">
  427 + <div class="modal__body">
  428 + <div class="modal__title">Спасибо!</div>
  429 + <div class="modal__text">Ваша сообщение успешно отправлена работодателю <a href="#">"Наяда"</a></div>
  430 + <a href="#" class="button button_light modal__button">На главную</a>
  431 + </div>
  432 + </div>
  433 + <div id="thanks-2" class="modal modal_bg">
  434 + <div class="modal__body">
  435 + <div class="modal__title">Спасибо!</div>
  436 + <div class="modal__text">Ваша заявка успешно отправлена</div>
  437 + <div class="modal__text"><span>В ближайшее время с вами свяжется наш менеджер для уточнения необходимой информации</span></div>
  438 + <a href="#" class="button button_light modal__button">На главную</a>
  439 + </div>
  440 + </div>
  441 + <div id="thanks-3" class="modal modal_bg">
  442 + <div class="modal__body">
  443 + <div class="modal__title">Спасибо!</div>
  444 + <div class="modal__text">Вы успешно зарегистрировались</div>
  445 + <div class="modal__text left"><span>Ваш аккаунт требует подтверждение администратора сайта. Администратор сайта должен изменить статус работодателя, чтобы вы смогли авторизоваться в системе.</span></div>
  446 + <div class="modal__text left"><span>После подтверждения администратором, вам прейдет сообщение на электронную почту, о подтверждении регистрации.</span></div>
  447 + <a href="#" class="button button_light modal__button">Войти</a>
  448 + </div>
  449 + </div>
  450 + <div id="thanks-4" class="modal modal_bg">
  451 + <div class="modal__body">
  452 + <div class="modal__title">Спасибо!</div>
  453 + <div class="modal__text">Ваше сообщение успешно отправлено администратору сайта на подтверждение.</div>
  454 + <a href="#" class="button button_light modal__button">На главную</a>
  455 + </div>
  456 + </div>
  457 + <div id="delete" class="modal modal_bg">
  458 + <div class="modal__body">
  459 + <div class="modal__title">Удалить профиль?</div>
  460 + <div class="modal__text">Вы действительно хотите удалить свой профиль?</div>
  461 + <div class="modal__buttons">
  462 + <button href="button" class="button">Да</button>
  463 + <button href="button" class="button button_light">Нет</button>
  464 + </div>
  465 + </div>
  466 + </div>
  467 + <div id="is-deleted" class="modal modal_bg">
  468 + <div class="modal__body">
  469 + <div class="modal__title">Профиль удален</div>
  470 + <div class="modal__text">Вы успешно удалили свой профиль.</div>
  471 + <a href="#" class="button button_light modal__button">На главную</a>
  472 + </div>
221 473 </div>
222 474 </div> <!-- END MODALS WRAPPER -->
223 475  
  476 +
224 477 <script src="{{ asset('js/jquery.js') }}"></script>
225 478 <script src="{{ asset('js/jquery.maskedinput.js') }}"></script>
226 479 <script src="{{ asset('js/jquery.fancybox.js') }}"></script>
resources/views/modals/send_admin.blade.php
... ... @@ -0,0 +1,60 @@
  1 +<div id="send" class="modal">
  2 + <div class="modal__body">
  3 + <div class="modal__title">Отправить сообщение "Наяда"</div>
  4 + <div class="modal__text">Если у вас возникли вопросы насчет вакансии, вы можете задать их работодателю</div>
  5 + <form class="modal__form">
  6 + <div class="modal__form-item error">
  7 + <input id="i1" type="text" class="input" placeholder="Тема" required>
  8 + <label for="i1">Не заполнено поле</label>
  9 + </div>
  10 + <div class="modal__form-item">
  11 + <textarea id="i2" class="textarea" placeholder="Укажите по какому поводу вы пишите работодателю, уточните название вакансии или прикрепите ссылку на вакансию, дайте как можно больше информации.&#10;&#10;ВАЖНО не стоит писать работодателю короткий текст цитирую «Какая зарплата?, работодатель не поймет о чем речь, опишите вопрос максимально подробно»." required></textarea>
  12 + <label for="i2">Не заполнено поле</label>
  13 + </div>
  14 + <div class="modal__form-item">
  15 + <div class="file">
  16 + <label class="file__input">
  17 + <input type="file">
  18 + <span class="button button_light">
  19 + <svg>
  20 + <use xlink:href="images/sprite.svg#share"></use>
  21 + </svg>
  22 + Прикрепить резюме
  23 + </span>
  24 + </label>
  25 + <div class="file__list">
  26 + <div class="file__list-item">
  27 + <div class="file__list-item-left">
  28 + <svg>
  29 + <use xlink:href="images/sprite.svg#clip"></use>
  30 + </svg>
  31 + <span>image1.png</span>
  32 + </div>
  33 + <button type="button" class="file__list-item-right js-parent-remove">
  34 + <svg>
  35 + <use xlink:href="images/sprite.svg#cross-bold"></use>
  36 + </svg>
  37 + </button>
  38 + </div>
  39 + <div class="file__list-item">
  40 + <div class="file__list-item-left">
  41 + <svg>
  42 + <use xlink:href="images/sprite.svg#clip"></use>
  43 + </svg>
  44 + <span>Резюме капитана корабля</span>
  45 + </div>
  46 + <button type="button" class="file__list-item-right js-parent-remove">
  47 + <svg>
  48 + <use xlink:href="images/sprite.svg#cross-bold"></use>
  49 + </svg>
  50 + </button>
  51 + </div>
  52 + </div>
  53 + </div>
  54 + </div>
  55 + <div class="modal__form-item">
  56 + <button type="submit" class="button">Отправить</button>
  57 + </div>
  58 + </form>
  59 + </div>
  60 +</div>
resources/views/modals/send_employer.blade.php
... ... @@ -0,0 +1,60 @@
  1 +<div id="send" class="modal">
  2 + <div class="modal__body">
  3 + <div class="modal__title">Отправить сообщение "Наяда"</div>
  4 + <div class="modal__text">Если у вас возникли вопросы насчет вакансии, вы можете задать их работодателю</div>
  5 + <form class="modal__form">
  6 + <div class="modal__form-item error">
  7 + <input id="i1" type="text" class="input" placeholder="Тема" required>
  8 + <label for="i1">Не заполнено поле</label>
  9 + </div>
  10 + <div class="modal__form-item">
  11 + <textarea id="i2" class="textarea" placeholder="Укажите по какому поводу вы пишите работодателю, уточните название вакансии или прикрепите ссылку на вакансию, дайте как можно больше информации.&#10;&#10;ВАЖНО не стоит писать работодателю короткий текст цитирую «Какая зарплата?, работодатель не поймет о чем речь, опишите вопрос максимально подробно»." required></textarea>
  12 + <label for="i2">Не заполнено поле</label>
  13 + </div>
  14 + <div class="modal__form-item">
  15 + <div class="file">
  16 + <label class="file__input">
  17 + <input type="file">
  18 + <span class="button button_light">
  19 + <svg>
  20 + <use xlink:href="images/sprite.svg#share"></use>
  21 + </svg>
  22 + Прикрепить резюме
  23 + </span>
  24 + </label>
  25 + <div class="file__list">
  26 + <div class="file__list-item">
  27 + <div class="file__list-item-left">
  28 + <svg>
  29 + <use xlink:href="images/sprite.svg#clip"></use>
  30 + </svg>
  31 + <span>image1.png</span>
  32 + </div>
  33 + <button type="button" class="file__list-item-right js-parent-remove">
  34 + <svg>
  35 + <use xlink:href="images/sprite.svg#cross-bold"></use>
  36 + </svg>
  37 + </button>
  38 + </div>
  39 + <div class="file__list-item">
  40 + <div class="file__list-item-left">
  41 + <svg>
  42 + <use xlink:href="images/sprite.svg#clip"></use>
  43 + </svg>
  44 + <span>Резюме капитана корабля</span>
  45 + </div>
  46 + <button type="button" class="file__list-item-right js-parent-remove">
  47 + <svg>
  48 + <use xlink:href="images/sprite.svg#cross-bold"></use>
  49 + </svg>
  50 + </button>
  51 + </div>
  52 + </div>
  53 + </div>
  54 + </div>
  55 + <div class="modal__form-item">
  56 + <button type="submit" class="button">Отправить</button>
  57 + </div>
  58 + </form>
  59 + </div>
  60 +</div>
resources/views/modals/send_login.blade.php
... ... @@ -0,0 +1,51 @@
  1 +<div id="sign" class="modal">
  2 + <div class="modal__body">
  3 + <div class="modal__title left">Войти</div>
  4 + <form class="modal__sign">
  5 + <div class="modal__sign-item">
  6 + <input type="email" class="input" id="email" name="email" placeholder="E-mail" required>
  7 + </div>
  8 + <div class="modal__sign-item">
  9 + <input type="password" class="input" id="password" name="password" placeholder="Пароль" required>
  10 + <button type="button" class="eye">
  11 + <svg class="js-password-show">
  12 + <use xlink:href="{{ asset('images/sprite.svg#eye') }}"></use>
  13 + </svg>
  14 + <svg class="js-password-hide">
  15 + <use xlink:href="{{ asset('images/sprite.svg#eye-2') }}"></use>
  16 + </svg>
  17 + </button>
  18 + </div>
  19 + <div class="modal__sign-item">
  20 + <div class="modal__sign-bottom">
  21 + <div>
  22 + <label class="checkbox">
  23 + <input type="checkbox" id="save_me" name="save_me" class="checkbox__input" required>
  24 + <span class="checkbox__icon">
  25 + <svg>
  26 + <use xlink:href="{{ asset('images/sprite.svg#v') }}"></use>
  27 + </svg>
  28 + </span>
  29 + <span class="checkbox__text">
  30 + <span>
  31 + Запомнить меня
  32 + </span>
  33 + </span>
  34 + </label>
  35 + </div>
  36 + <div>
  37 + <a href="" class="modal__sign-bottom-link">Забыли пароль?</a>
  38 + </div>
  39 + </div>
  40 + </div>
  41 + <div class="modal__sign-item">
  42 + <a id="button_send" name="button_send" class="button">Войти</a>
  43 + </div>
  44 + </form>
  45 + <div class="modal__text">
  46 + <span>У Вас ещё нет аккаунта?</span>
  47 + &nbsp;
  48 + <a href="">Создать аккаунт</a>
  49 + </div>
  50 + </div>
  51 +</div>
resources/views/modals/send_worker.blade.php
... ... @@ -0,0 +1,48 @@
  1 +<div id="send" class="modal">
  2 + <div class="modal__body">
  3 + <div class="modal__title">Отправить сообщение соискателю</div>
  4 + <div class="modal__text">Если у вас есть предложение для данного работника, напишите ему письмо</div>
  5 + <form class="modal__form" id="form_worker" name="form_worker">
  6 + <div class="modal__form-item error">
  7 + <input id="title" name="title" type="text" class="input" placeholder="Тема" required>
  8 + <label for="title">Не заполнено поле</label>
  9 + </div>
  10 + <div class="modal__form-item">
  11 + <textarea id="i2" class="textarea" id="text" name="text" placeholder="Напишите текст с предложением о работе" required></textarea>
  12 + <label for="i2">Не заполнено поле</label>
  13 + </div>
  14 + <div class="modal__form-item">
  15 + <div class="file">
  16 + <label class="file__input">
  17 + <input type="file" name="file" id="name">
  18 + <span class="button button_light">
  19 + <svg>
  20 + <use xlink:href="{{ asset('images/sprite.svg#share') }}"></use>
  21 + </svg>
  22 + Прикрепить файл-документ
  23 + </span>
  24 + </label>
  25 +
  26 + <div class="file__list">
  27 + <div class="file__list-item">
  28 + <div class="file__list-item-left">
  29 + <svg>
  30 + <use xlink:href="{{ asset('images/sprite.svg#clip') }}"></use>
  31 + </svg>
  32 + <span id="name_file" name="name_file">123</span>
  33 + </div>
  34 + <button type="button" class="file__list-item-right js-parent-remove">
  35 + <svg>
  36 + <use xlink:href="{{ asset('images/sprite.svg#cross-bold') }}"></use>
  37 + </svg>
  38 + </button>
  39 + </div>
  40 + </div>
  41 + </div>
  42 + </div>
  43 + <div class="modal__form-item">
  44 + <button type="submit" class="button">Отправить</button>
  45 + </div>
  46 + </form>
  47 + </div>
  48 +</div>
resources/views/resume.blade.php
... ... @@ -0,0 +1,454 @@
  1 +@extends('layout.frontend', ['title' => 'База резюме - РекаМоре'])
  2 +
  3 +@section('scripts')
  4 + <script>
  5 + console.log('Test system');
  6 + $(document).on('change', '#jobs', function() {
  7 + var val = $(this).val();
  8 + var main_oskar = $('#main_ockar');
  9 +
  10 + console.log('Code='+val);
  11 + console.log('Click change...');
  12 + $.ajax({
  13 + type: "GET",
  14 + url: "",
  15 + data: "job="+val,
  16 + success: function (data) {
  17 + console.log('Выбор сделан!');
  18 + console.log(data);
  19 + main_oskar.html(data);
  20 + },
  21 + headers: {
  22 + 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
  23 + },
  24 + error: function (data) {
  25 + data = JSON.stringify(data);
  26 + console.log('Error: ' + data);
  27 + }
  28 + });
  29 + });
  30 + </script>
  31 +@endsection
  32 +
  33 +@section('content')
  34 + <section class="thing">
  35 + <div class="container">
  36 + <form class="thing__body" action="{{ url()->current() }}">
  37 + <ul class="breadcrumbs thing__breadcrumbs">
  38 + <li><a href="{{ route('index') }}">Главная</a></li>
  39 + <li><b>База резюме</b></li>
  40 + </ul>
  41 + <h1 class="thing__title">База резюме</h1>
  42 + <p class="thing__text">С другой стороны, социально-экономическое развитие не оставляет шанса для
  43 + существующих финансовых и административных условий.</p>
  44 + <div class="search thing__search">
  45 + <input type="search" class="input" name="search" id="search" placeholder="Введите наименование должности" required>
  46 + <button type="submit" class="button">Найти</button>
  47 + <span>
  48 + <svg>
  49 + <use xlink:href="{{ asset('images/sprite.svg#search') }}"></use>
  50 + </svg>
  51 + </span>
  52 + </div>
  53 + <label class="checkbox thing__checkbox">
  54 + <input type="checkbox" class="checkbox__input" name="experience" id="experience">
  55 + <span class="checkbox__icon">
  56 + <svg>
  57 + <use xlink:href="{{ asset('images/sprite.svg#v') }}"></use>
  58 + </svg>
  59 + </span>
  60 + <span class="checkbox__text">
  61 + <span>
  62 + Опыт работы
  63 + </span>
  64 + </span>
  65 + </label>
  66 + </form>
  67 + </div>
  68 + </section>
  69 +
  70 + <main class="main">
  71 + <div class="container">
  72 + <div class="main__resume-base">
  73 + <h2>Резюме работников</h2>
  74 + <div class="filters">
  75 + <div class="filters__label">Показано @if ($res_count > 0) 1 @else 0 @endif – @if($res_count < 5) {{ $res_count }} @else 5 @endif из {{ $res_count }} результатов поиска</div>
  76 + <div class="filters__body">
  77 + <div class="select filters__select">
  78 + <select class="js-select2" id="sort_ajax" name="sort_ajax">
  79 + <option value="default">Сортировка (по умолчанию)</option>
  80 + <option value="name (asc)">По имени (возрастание)</option>
  81 + <option value="name (desc)">По имени (убывание)</option>
  82 + <option value="created_at (asc)">По дате (возрастание)</option>
  83 + <option value="created_at (desc)">По дате (убывание)</option>
  84 + </select>
  85 + </div>
  86 + <button type="button" class="filters__item active" data-tab="1">
  87 + <svg>
  88 + <use xlink:href="{{ asset('images/sprite.svg#grid-1') }}"></use>
  89 + </svg>
  90 + </button>
  91 + <button type="button" class="filters__item" data-tab="2">
  92 + <svg>
  93 + <use xlink:href="{{ asset('images/sprite.svg#grid-2') }}"></use>
  94 + </svg>
  95 + </button>
  96 + </div>
  97 + </div>
  98 + <div class="main__resume-base-body showed" data-body="1">
  99 + <div class="main__resume-base-body-one">
  100 + @if ($resumes->count())
  101 + @foreach ($resumes as $res)
  102 + <div class="main__resume-base-body-item">
  103 + <div class="main__resume-base-body-item-buttons">
  104 + <button type="button" class="like js-toggle">
  105 + <svg>
  106 + <use xlink:href="{{ asset('images/sprite.svg#heart') }}"></use>
  107 + </svg>
  108 + </button>
  109 + <button type="button" class="chat js-toggle">
  110 + <svg>
  111 + <use xlink:href="{{ asset('images/sprite.svg#chat') }}"></use>
  112 + </svg>
  113 + </button>
  114 + </div>
  115 + <div class="main__resume-base-body-item-wrapper">
  116 + <img src="@isset ($res->photo) {{ asset(Storage::url($res->photo)) }} @else {{ asset('images/default_man.jpg')}} @endif" alt="" class="main__resume-base-body-item-photo">
  117 + <div class="main__resume-base-body-item-inner">
  118 + <div>
  119 + <b>Статус</b>
  120 + <span>{{ $status_work[$res->status_work] }}</span>
  121 + </div>
  122 + <div>
  123 + <b>Имя работника</b>
  124 + <span>@if (isset($res->users)){{ $res->users->surname." ".$res->users->name_man." ".$res->users->surname2 }} @endif</span>
  125 + </div>
  126 + <div>
  127 + <b>Номер телефона</b>
  128 + <span><a href="tel:{{ $res->telephone }}">{{ $res->telephone }}</a></span>
  129 + </div>
  130 + <div>
  131 + <b>Электронный адрес</b>
  132 + <span><a href="mailto:{{ $res->email }}">{{ $res->email }}</a></span>
  133 + </div>
  134 + <div>
  135 + <b>Город проживания</b>
  136 + <span>{{ $res->city }}</span>
  137 + </div>
  138 + <div>
  139 + <b>Опыт работы</b>
  140 + <span>{{ $res->experience }}</span>
  141 + </div>
  142 + </div>
  143 + </div>
  144 + <a href="{{ route('resume_profile', ['worker' => $res->id]) }}" class="button button_light main__resume-base-body-item-link">Перейти в резюме</a>
  145 + </div>
  146 + @endforeach
  147 +
  148 + {{ $resumes->appends($_GET)->links('paginate') }}
  149 + @endif
  150 + </div>
  151 + </div>
  152 + <div class="main__resume-base-body" data-body="2">
  153 + <div class="main__resume-base-body-two">
  154 + <div class="main__resume-base-body-item">
  155 + <div class="main__resume-base-body-item-buttons">
  156 + <button type="button" class="like js-toggle">
  157 + <svg>
  158 + <use xlink:href="images/sprite.svg#heart"></use>
  159 + </svg>
  160 + </button>
  161 + <button type="button" class="chat js-toggle">
  162 + <svg>
  163 + <use xlink:href="images/sprite.svg#chat"></use>
  164 + </svg>
  165 + </button>
  166 + </div>
  167 + <div class="main__resume-base-body-item-wrapper">
  168 + <img src="images/face.jpg" alt="" class="main__resume-base-body-item-photo">
  169 + <div class="main__resume-base-body-item-inner">
  170 + <div>
  171 + <b>Статус</b>
  172 + <span>Ищу работу</span>
  173 + </div>
  174 + <div>
  175 + <b>Имя работника</b>
  176 + <span>Назаров Платон Фёдорович</span>
  177 + </div>
  178 + <div>
  179 + <b>Номер телефона</b>
  180 + <span><a href="#">+7 (000) 123 45 67</a></span>
  181 + </div>
  182 + <div>
  183 + <b>Электронный адрес</b>
  184 + <span><a href="#">info@rekamore.su</a></span>
  185 + </div>
  186 + <div>
  187 + <b>Город проживания</b>
  188 + <span>Новосибирск</span>
  189 + </div>
  190 + <div>
  191 + <b>Опыт работы на танкерах</b>
  192 + <span>12 лет</span>
  193 + </div>
  194 + </div>
  195 + </div>
  196 + <a href="#" class="button button_light main__resume-base-body-item-link">Перейти в
  197 + резюме</a>
  198 + </div>
  199 + <div class="main__resume-base-body-item">
  200 + <div class="main__resume-base-body-item-buttons">
  201 + <button type="button" class="like js-toggle">
  202 + <svg>
  203 + <use xlink:href="images/sprite.svg#heart"></use>
  204 + </svg>
  205 + </button>
  206 + <button type="button" class="chat js-toggle">
  207 + <svg>
  208 + <use xlink:href="images/sprite.svg#chat"></use>
  209 + </svg>
  210 + </button>
  211 + </div>
  212 + <div class="main__resume-base-body-item-wrapper">
  213 + <img src="images/face.jpg" alt="" class="main__resume-base-body-item-photo">
  214 + <div class="main__resume-base-body-item-inner">
  215 + <div>
  216 + <b>Статус</b>
  217 + <span>Ищу работу</span>
  218 + </div>
  219 + <div>
  220 + <b>Имя работника</b>
  221 + <span>Назаров Платон Фёдорович</span>
  222 + </div>
  223 + <div>
  224 + <b>Номер телефона</b>
  225 + <span><a href="#">+7 (000) 123 45 67</a></span>
  226 + </div>
  227 + <div>
  228 + <b>Электронный адрес</b>
  229 + <span><a href="#">info@rekamore.su</a></span>
  230 + </div>
  231 + <div>
  232 + <b>Город проживания</b>
  233 + <span>Новосибирск</span>
  234 + </div>
  235 + <div>
  236 + <b>Опыт работы на танкерах</b>
  237 + <span>12 лет</span>
  238 + </div>
  239 + </div>
  240 + </div>
  241 + <a href="#" class="button button_light main__resume-base-body-item-link">Перейти в
  242 + резюме</a>
  243 + </div>
  244 + <div class="main__resume-base-body-item">
  245 + <div class="main__resume-base-body-item-buttons">
  246 + <button type="button" class="like js-toggle">
  247 + <svg>
  248 + <use xlink:href="images/sprite.svg#heart"></use>
  249 + </svg>
  250 + </button>
  251 + <button type="button" class="chat js-toggle">
  252 + <svg>
  253 + <use xlink:href="images/sprite.svg#chat"></use>
  254 + </svg>
  255 + </button>
  256 + </div>
  257 + <div class="main__resume-base-body-item-wrapper">
  258 + <img src="images/face.jpg" alt="" class="main__resume-base-body-item-photo">
  259 + <div class="main__resume-base-body-item-inner">
  260 + <div>
  261 + <b>Статус</b>
  262 + <span>Ищу работу</span>
  263 + </div>
  264 + <div>
  265 + <b>Имя работника</b>
  266 + <span>Назаров Платон Фёдорович</span>
  267 + </div>
  268 + <div>
  269 + <b>Номер телефона</b>
  270 + <span><a href="#">+7 (000) 123 45 67</a></span>
  271 + </div>
  272 + <div>
  273 + <b>Электронный адрес</b>
  274 + <span><a href="#">info@rekamore.su</a></span>
  275 + </div>
  276 + <div>
  277 + <b>Город проживания</b>
  278 + <span>Новосибирск</span>
  279 + </div>
  280 + <div>
  281 + <b>Опыт работы на танкерах</b>
  282 + <span>12 лет</span>
  283 + </div>
  284 + </div>
  285 + </div>
  286 + <a href="#" class="button button_light main__resume-base-body-item-link">Перейти в
  287 + резюме</a>
  288 + </div>
  289 + <div class="main__resume-base-body-item">
  290 + <div class="main__resume-base-body-item-buttons">
  291 + <button type="button" class="like js-toggle">
  292 + <svg>
  293 + <use xlink:href="images/sprite.svg#heart"></use>
  294 + </svg>
  295 + </button>
  296 + <button type="button" class="chat js-toggle">
  297 + <svg>
  298 + <use xlink:href="images/sprite.svg#chat"></use>
  299 + </svg>
  300 + </button>
  301 + </div>
  302 + <div class="main__resume-base-body-item-wrapper">
  303 + <img src="images/face.jpg" alt="" class="main__resume-base-body-item-photo">
  304 + <div class="main__resume-base-body-item-inner">
  305 + <div>
  306 + <b>Статус</b>
  307 + <span>Ищу работу</span>
  308 + </div>
  309 + <div>
  310 + <b>Имя работника</b>
  311 + <span>Назаров Платон Фёдорович</span>
  312 + </div>
  313 + <div>
  314 + <b>Номер телефона</b>
  315 + <span><a href="#">+7 (000) 123 45 67</a></span>
  316 + </div>
  317 + <div>
  318 + <b>Электронный адрес</b>
  319 + <span><a href="#">info@rekamore.su</a></span>
  320 + </div>
  321 + <div>
  322 + <b>Город проживания</b>
  323 + <span>Новосибирск</span>
  324 + </div>
  325 + <div>
  326 + <b>Опыт работы на танкерах</b>
  327 + <span>12 лет</span>
  328 + </div>
  329 + </div>
  330 + </div>
  331 + <a href="#" class="button button_light main__resume-base-body-item-link">Перейти в
  332 + резюме</a>
  333 + </div>
  334 + <div class="main__resume-base-body-item">
  335 + <div class="main__resume-base-body-item-buttons">
  336 + <button type="button" class="like js-toggle">
  337 + <svg>
  338 + <use xlink:href="images/sprite.svg#heart"></use>
  339 + </svg>
  340 + </button>
  341 + <button type="button" class="chat js-toggle">
  342 + <svg>
  343 + <use xlink:href="images/sprite.svg#chat"></use>
  344 + </svg>
  345 + </button>
  346 + </div>
  347 + <div class="main__resume-base-body-item-wrapper">
  348 + <img src="images/face.jpg" alt="" class="main__resume-base-body-item-photo">
  349 + <div class="main__resume-base-body-item-inner">
  350 + <div>
  351 + <b>Статус</b>
  352 + <span>Ищу работу</span>
  353 + </div>
  354 + <div>
  355 + <b>Имя работника</b>
  356 + <span>Назаров Платон Фёдорович</span>
  357 + </div>
  358 + <div>
  359 + <b>Номер телефона</b>
  360 + <span><a href="#">+7 (000) 123 45 67</a></span>
  361 + </div>
  362 + <div>
  363 + <b>Электронный адрес</b>
  364 + <span><a href="#">info@rekamore.su</a></span>
  365 + </div>
  366 + <div>
  367 + <b>Город проживания</b>
  368 + <span>Новосибирск</span>
  369 + </div>
  370 + <div>
  371 + <b>Опыт работы на танкерах</b>
  372 + <span>12 лет</span>
  373 + </div>
  374 + </div>
  375 + </div>
  376 + <a href="#" class="button button_light main__resume-base-body-item-link">Перейти в
  377 + резюме</a>
  378 + </div>
  379 + <div class="main__resume-base-body-item">
  380 + <div class="main__resume-base-body-item-buttons">
  381 + <button type="button" class="like js-toggle">
  382 + <svg>
  383 + <use xlink:href="images/sprite.svg#heart"></use>
  384 + </svg>
  385 + </button>
  386 + <button type="button" class="chat js-toggle">
  387 + <svg>
  388 + <use xlink:href="images/sprite.svg#chat"></use>
  389 + </svg>
  390 + </button>
  391 + </div>
  392 + <div class="main__resume-base-body-item-wrapper">
  393 + <img src="images/face.jpg" alt="" class="main__resume-base-body-item-photo">
  394 + <div class="main__resume-base-body-item-inner">
  395 + <div>
  396 + <b>Статус</b>
  397 + <span>Ищу работу</span>
  398 + </div>
  399 + <div>
  400 + <b>Имя работника</b>
  401 + <span>Назаров Платон Фёдорович</span>
  402 + </div>
  403 + <div>
  404 + <b>Номер телефона</b>
  405 + <span><a href="#">+7 (000) 123 45 67</a></span>
  406 + </div>
  407 + <div>
  408 + <b>Электронный адрес</b>
  409 + <span><a href="#">info@rekamore.su</a></span>
  410 + </div>
  411 + <div>
  412 + <b>Город проживания</b>
  413 + <span>Новосибирск</span>
  414 + </div>
  415 + <div>
  416 + <b>Опыт работы на танкерах</b>
  417 + <span>12 лет</span>
  418 + </div>
  419 + </div>
  420 + </div>
  421 + <a href="#" class="button button_light main__resume-base-body-item-link">Перейти в
  422 + резюме</a>
  423 + </div>
  424 + <div class="pagination">
  425 + <a href="#" class="pagination__nav pagination__nav_prev">
  426 + <svg>
  427 + <use xlink:href="images/sprite.svg#arrow-bold"></use>
  428 + </svg>
  429 + </a>
  430 + <span class="pagination__item active">1</span>
  431 + <a href="#" class="pagination__item">2</a>
  432 + <a href="#" class="pagination__item">3</a>
  433 + <a href="#" class="pagination__item">4</a>
  434 + <a href="#" class="pagination__item">5</a>
  435 + <span class="pagination__dots">
  436 + <svg>
  437 + <use xlink:href="images/sprite.svg#dots"></use>
  438 + </svg>
  439 + </span>
  440 + <a href="#" class="pagination__item">25</a>
  441 + <a href="#" class="pagination__nav pagination__nav_next">
  442 + <svg>
  443 + <use xlink:href="images/sprite.svg#arrow-bold"></use>
  444 + </svg>
  445 + </a>
  446 + </div>
  447 + </div>
  448 + </div>
  449 + </div>
  450 + </div>
  451 + </main>
  452 + </div>
  453 +</div>
  454 +@endsection
resources/views/vacancies.blade.php
... ... @@ -46,10 +46,10 @@
46 46 </svg>
47 47 </div>
48 48 <select class="js-select2 jobs" id="jobs" name="jobs">
49   - <option value="0" disabled selected>Выберите должность</option>
  49 + <option value="0">Выберите должность</option>
50 50 @if ($Job_title->count())
51 51 @foreach($Job_title as $JT)
52   - <option value="{{ $JT->id }}">{{ $JT->name }}</option>
  52 + <option value="{{ $JT->id }}" @if ((isset($_GET['job'])) && ($_GET['job'] == $JT->id)) selected @endif>{{ $JT->name }}</option>
53 53 @endforeach
54 54 @endif
55 55 </select>
resources/views/worker.blade.php
... ... @@ -0,0 +1,272 @@
  1 +@extends('layout.frontend', ['title' => 'Карточка соискателя - РекаМоре'])
  2 +
  3 +@section('scripts')
  4 + <script>
  5 + console.log('Test system');
  6 + $(document).on('change', '#jobs', function() {
  7 + var val = $(this).val();
  8 + var main_oskar = $('#main_ockar');
  9 +
  10 + console.log('Code='+val);
  11 + console.log('Click change...');
  12 + $.ajax({
  13 + type: "GET",
  14 + url: "",
  15 + data: "job="+val,
  16 + success: function (data) {
  17 + console.log('Выбор сделан!');
  18 + console.log(data);
  19 + main_oskar.html(data);
  20 + },
  21 + headers: {
  22 + 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
  23 + },
  24 + error: function (data) {
  25 + data = JSON.stringify(data);
  26 + console.log('Error: ' + data);
  27 + }
  28 + });
  29 + });
  30 + </script>
  31 +@endsection
  32 +
  33 +@section('content')
  34 + <section class="thing">
  35 + <div class="container">
  36 + <ul class="breadcrumbs thing__breadcrumbs">
  37 + <li><a href="{{ route('index') }}">Главная</a></li>
  38 + <li><a href="{{ route('bd_resume') }}">База резюме</a></li>
  39 + <li><b>@if (isset($Query[0]->users)) {{ $Query[0]->users->surname." ".$Query[0]->users->name_man." ".$Query[0]->users->surname2 }} @else Неизвестно @endif</b></li>
  40 + </ul>
  41 + <div class="thing__profile">
  42 + <img src="@isset($Query->photo) {{ asset(Storage::url($Query->photo)) }} @else {{ asset('images/default_man.jpg') }} @endif" alt="" class="thing__profile-photo">
  43 + <div class="thing__profile-body">
  44 + <h1 class="thing__title">@if (isset($Query[0]->users)) {{ $Query[0]->users->surname." ".$Query[0]->users->name_man." ".$Query[0]->users->surname2 }} @else Неизвестно @endif</h1>
  45 + <p class="thing__text">Сложно сказать, почему ключевые особенности структуры проекта рассмотрены
  46 + исключительно в разрезе маркетинговых и финансовых предпосылок.</p>
  47 + <div class="thing__bottom">
  48 + <a class="button" href="{{ route('resume_download', ['worker' => $Query[0]->id]) }}">
  49 + Скачать резюме
  50 + <svg>
  51 + <use xlink:href="{{ asset('images/sprite.svg#download') }}"></use>
  52 + </svg>
  53 + </a>
  54 + <button type="button" class="like js-toggle">
  55 + <svg>
  56 + <use xlink:href="{{ asset('images/sprite.svg#heart') }}"></use>
  57 + </svg>
  58 + </button>
  59 + </div>
  60 + </div>
  61 + </div>
  62 + </div>
  63 + </section>
  64 + <main class="main">
  65 + <div class="container">
  66 + <div class="main__resume-profile">
  67 + <div class="main__content">
  68 + <div class="main__spoiler">
  69 + <button type="button" class="main__spoiler-toper js-toggle active">
  70 + Основная информация</button>
  71 +
  72 + <div class="main__spoiler-body">
  73 + <table class="main__table">
  74 + <tbody>
  75 + <tr>
  76 + <td>Имя:</td>
  77 + <td><b>{{ $Query[0]->users->name_man }}</b></td>
  78 + </tr>
  79 + <tr>
  80 + <td>Должность:</td>
  81 + <td><b>@if (isset($Query[0]->job_titles)) {{ $Query[0]->job_titles[0]->name }} @else Не указано @endif</b></td>
  82 + </tr>
  83 + <tr>
  84 + <td>Телефон:</td>
  85 + <td><b><a href="tel:{{ $Query[0]->telephone }}">{{ $Query[0]->telephone }}</a></b></td>
  86 + </tr>
  87 + <tr>
  88 + <td>E-mail:</td>
  89 + <td><b><a href="emailto:{{ $Query[0]->email }}">{{ $Query[0]->email }}</a></b></td>
  90 + </tr>
  91 + <tr>
  92 + <td>Возраст:</td>
  93 + <td><b>{{ $Query[0]->old_year }}</b></td>
  94 + </tr>
  95 + <tr>
  96 + <td>Статус:</td>
  97 + <td><b>{{ $status_work[$Query[0]->status_work] }}</b></td>
  98 + </tr>
  99 + <tr>
  100 + <td>Город проживания:</td>
  101 + <td><b>{{ $Query[0]->city }}</b></td>
  102 + </tr>
  103 + <tr>
  104 + <td>Уровень английского:</td>
  105 + <td><b>{{ $Query[0]->en_is }}</b></td>
  106 + </tr>
  107 + <tr>
  108 + <td>Опыт работы:</td>
  109 + <td><b>{{ $Query[0]->experience }}</b></td>
  110 + </tr>
  111 + </tbody>
  112 + </table>
  113 + </div>
  114 + </div>
  115 + <div class="main__spoiler">
  116 + <button type="button" class="main__spoiler-toper js-toggle">Сертификаты / документы</button>
  117 + <div class="main__spoiler-body">
  118 +
  119 + @if (isset($Query[0]->sertificate))
  120 + @if ($Query[0]->sertificate->count())
  121 + @foreach($Query[0]->sertificate as $it)
  122 + <table class="main__table">
  123 + <tbody>
  124 + <tr>
  125 + <td>Название сертификата:</td>
  126 + <td><b>{{ $it->name }}</b></td>
  127 + </tr>
  128 + <tr>
  129 + <td>Организация выдавшая документ:</td>
  130 + <td><b>{{ $it->education }}</b></td>
  131 + </tr>
  132 + <tr>
  133 + <td>Дата начала обучения:</td>
  134 + <td><b>{{ $it->date_begin }}</b></td>
  135 + </tr>
  136 + <tr>
  137 + <td>Дата конца обучения:</td>
  138 + <td><b>{{ $it->end_begin }}</b></td>
  139 + </tr>
  140 + </tbody>
  141 + </table>
  142 + <br>
  143 + @endforeach
  144 + @endif
  145 + @endif
  146 + </div>
  147 + </div>
  148 +
  149 + <div class="main__spoiler">
  150 + <button type="button" class="main__spoiler-toper js-toggle">Опыт работы</button>
  151 + <div class="main__spoiler-body">
  152 +
  153 + @if (isset($Query[0]->place_worker))
  154 + @if ($Query[0]->place_worker->count())
  155 + @foreach($Query[0]->place_worker as $it)
  156 +
  157 + <table class="main__table">
  158 + <tbody>
  159 + <tr>
  160 + <td>Должность:</td>
  161 + <td><b>{{ $it->job_title }}</b></td>
  162 + </tr>
  163 + <tr>
  164 + <td>Опыт работы в танкерном флоте:</td>
  165 + <td><b>@if($it->tanker==1) Есть @else Нет @endif</b></td>
  166 + </tr>
  167 + <tr>
  168 + <td>Дата начала работы:</td>
  169 + <td><b>{{ $it->begin_work }}</b></td>
  170 + </tr>
  171 + <tr>
  172 + <td>Дата конца работы:</td>
  173 + <td><b>{{ $it->end_work }}</b></td>
  174 + </tr>
  175 + <tr>
  176 + <td>Название компании:</td>
  177 + <td><b>{{ $it->name_company }}</b></td>
  178 + </tr>
  179 + <tr>
  180 + <td>GWT тип</td>
  181 + <td><b>{{ $it->GWT }}</b></td>
  182 + </tr>
  183 + <tr>
  184 + <td>ГД:</td>
  185 + <td><b>{{ $it->KBT }}</b></td>
  186 + </tr>
  187 + </tbody>
  188 + </table>
  189 + <br>
  190 + @endforeach
  191 + @endif
  192 + @endif
  193 + </div>
  194 + </div>
  195 +
  196 + <div class="main__spoiler">
  197 + <button type="button" class="main__spoiler-toper js-toggle">Дополнительные документы</button>
  198 + <div class="main__spoiler-body">
  199 +
  200 + @if (isset($Query[0]->infobloks))
  201 + @if ($Query[0]->infobloks->count())
  202 + <table class="main__table">
  203 + <tbody>
  204 + @foreach($Query[0]->infobloks as $it)
  205 + <tr>
  206 + <td>Документ:</td>
  207 + <td><b>{{ $it->name }}</b></td>
  208 + </tr>
  209 + @endforeach
  210 + </tbody>
  211 + </table>
  212 + @endif
  213 + @endif
  214 + </div>
  215 + </div>
  216 + </div>
  217 + <div class="main__resume-profile-about">
  218 + <h2 class="main__resume-profile-about-title">О себе</h2>
  219 + <p class="main__resume-profile-about-text">{{ $Query[0]->text }}</p>
  220 + <div class="button main__resume-profile-about-button" data-fancybox data-src="#send" data-options='{"touch":false,"autoFocus":false}'>Написать сообщение</div>
  221 + </div>
  222 + <div class="main__resume-profile-info">
  223 + <h2 class="main__resume-profile-info-title">Данные о прошлых компаниях</h2>
  224 + <div class="main__resume-profile-info-body">
  225 +
  226 + @if (isset($Query[0]->prev_company))
  227 + @if ($Query[0]->prev_company->count())
  228 + @foreach ($Query[0]->prev_company as $it)
  229 + <div class="main__resume-profile-info-body-item">
  230 + <h3 class="main__resume-profile-info-body-subtitle">{{ $it->name_company }}</h3>
  231 + <ul class="main__resume-profile-info-body-inner">
  232 + <li>
  233 + <b>Руководитель</b>
  234 + <span>{{ $it->direct }}</span>
  235 + </li>
  236 + <li>
  237 + <b>Телефон того, кто может дать рекомендацию</b>
  238 + <span>
  239 + @if (!empty($it->telephone))
  240 + <a href="tel:{{$it->telephone }}">{{ $it->telephone }}</a>
  241 + @endif
  242 + @if (!empty($it->telephone2))
  243 + <a href="tel:{{$it->telephone2 }}">{{ $it->telephone2 }}</a>
  244 + @endif
  245 + </span>
  246 + </li>
  247 + </ul>
  248 + </div>
  249 + @endforeach
  250 + @endif
  251 + @endif
  252 + </div>
  253 + </div>
  254 + <div class="main__resume-profile-review">
  255 + <h2 class="main__resume-profile-review-title">Оставить отзыв о работнике</h2>
  256 + <div class="rate">
  257 + <div class="rate__label">Ваша оценка:</div>
  258 + <div class="rate__stars">
  259 + <img src="{{ asset('images/stars.svg') }}" alt="">
  260 + </div>
  261 + </div>
  262 + <div class="main__resume-profile-review-body">
  263 + <h3>Ваш отзыв</h3>
  264 + <textarea class="textarea" placeholder="Текст отзыва&hellip;" required></textarea>
  265 + <button type="submit" class="button">Оставить отзыв</button>
  266 + </div>
  267 + </div>
  268 + </div>
  269 + </div>
  270 + </main>
  271 + </div>
  272 +@endsection
... ... @@ -397,6 +397,9 @@ Route::get(&#39;employer/ad/{ad_employer}&#39;, [AdEmployerController::class, &#39;ad_employ
397 397 //Вакансии
398 398 Route::get('vacancies', [MainController::class, 'vacancies'])->name('vacancies');
399 399  
  400 +//Вакансии поиск на главной
  401 +Route::get('search-vacancies', [MainController::class, 'search_vacancies'])->name('search_vacancies');
  402 +
400 403 //Вакансии категория детальная
401 404 Route::get('list-vacancies/{categories}', [MainController::class, 'list_vacancies'])->name('list-vacancies');
402 405  
... ... @@ -419,4 +422,34 @@ Route::get(&#39;news&#39;, [MainController::class, &#39;news&#39;])-&gt;name(&#39;news&#39;);
419 422 Route::get('contacts', [MainController::class, 'contacts'])->name('contacts');
420 423  
421 424 //База резюме
422   -Route::get('bd-resume', [MainController::class, 'bd_resume'])->name('bd_resume');
  425 +Route::get('bd-resume', [WorkerController::class, 'bd_resume'])->name('bd_resume');
  426 +
  427 +//Анкета соискателя
  428 +Route::get('resume-profile/{worker}', [WorkerController::class, 'resume_profile'])->name('resume_profile');
  429 +
  430 +//Скачать резюме
  431 +Route::get('resume-download/{worker}', [WorkerController::class, 'resume_download'])->name('resume_download');
  432 +
  433 +//Вход в кабинет
  434 +Route::get('login', [MainController::class, 'input_login'])->name('login');
  435 +
  436 +// Выход из кабинета
  437 +Route::get('logout', [EmployerController::class, 'logout'])->name('logout');
  438 +
  439 +// Личный кабинет работника
  440 +Route::group([
  441 + 'as' => 'worker.', // имя маршрута, например auth.index
  442 + 'prefix' => 'worker', // префикс маршрута, например auth/index
  443 + 'middleware' => ['auth'], ['is_worker'],
  444 +], function() {
  445 + Route::get('cabinet', [])->name('cabinet');
  446 +});
  447 +
  448 +// Личный кабинет работодателя
  449 +Route::group([
  450 + 'as' => 'employer.', // имя маршрута, например auth.index
  451 + 'prefix' => 'employer', // префикс маршрута, например auth/index
  452 + 'middleware' => ['auth'], !['is_worker'],
  453 +], function() {
  454 + Route::get('cabinet', [])->name('cabinet');
  455 +});