Commit a13ce86708e3f545245c9eca56f27dee628c7588
1 parent
d152a3a68e
Exists in
master
and in
1 other branch
Обновление проекта рекаморе 22 февраля
Showing 19 changed files with 1521 additions and 34 deletions Inline Diff
- app/Http/Controllers/EmployerController.php
- app/Http/Controllers/MainController.php
- app/Http/Controllers/WorkerController.php
- app/Models/PrevCompany.php
- app/Models/Worker.php
- database/migrations/2024_02_22_080113_alter_table_sertification.php
- database/migrations/2024_02_22_092030_create_table_prev_company.php
- public/images/default_man.jpg
- public/js/script.js
- resources/views/index.blade.php
- resources/views/layout/frontend.blade.php
- resources/views/modals/send_admin.blade.php
- resources/views/modals/send_employer.blade.php
- resources/views/modals/send_login.blade.php
- resources/views/modals/send_worker.blade.php
- resources/views/resume.blade.php
- resources/views/vacancies.blade.php
- resources/views/worker.blade.php
- routes/web.php
app/Http/Controllers/EmployerController.php
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace App\Http\Controllers; | 3 | namespace App\Http\Controllers; |
4 | 4 | ||
5 | use App\Models\Ad_employer; | 5 | use App\Models\Ad_employer; |
6 | use App\Models\Category; | 6 | use App\Models\Category; |
7 | use Illuminate\Http\Request; | 7 | use Illuminate\Http\Request; |
8 | use Illuminate\Support\Facades\Auth; | ||
8 | 9 | ||
9 | class EmployerController extends Controller | 10 | class EmployerController extends Controller |
10 | { | 11 | { |
11 | public function vacancie($vacancy, Request $request) { | 12 | public function vacancie($vacancy, Request $request) { |
12 | $title = 'Заголовок вакансии'; | 13 | $title = 'Заголовок вакансии'; |
13 | 14 | ||
14 | $Query = Ad_employer::with('jobs')-> | 15 | $Query = Ad_employer::with('jobs')-> |
15 | with('cat')-> | 16 | with('cat')-> |
16 | with('employer')-> | 17 | with('employer')-> |
17 | with('jobs_code')-> | 18 | with('jobs_code')-> |
18 | select('ad_employers.*')-> | 19 | select('ad_employers.*')-> |
19 | where('id', '=', $vacancy)->get(); | 20 | where('id', '=', $vacancy)->get(); |
20 | 21 | ||
21 | $title = $Query[0]->name; | 22 | $title = $Query[0]->name; |
22 | if ($request->ajax()) { | 23 | if ($request->ajax()) { |
23 | return view('ajax.vacance-item', compact('Query')); | 24 | return view('ajax.vacance-item', compact('Query')); |
24 | } else { | 25 | } else { |
25 | return view('vacance-item', compact('title', 'Query')); | 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 | } |
29 | 36 |
app/Http/Controllers/MainController.php
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace App\Http\Controllers; | 3 | namespace App\Http\Controllers; |
4 | 4 | ||
5 | use App\Models\Ad_employer; | 5 | use App\Models\Ad_employer; |
6 | use App\Models\Category; | 6 | use App\Models\Category; |
7 | use App\Models\Education; | 7 | use App\Models\Education; |
8 | use App\Models\Employer; | 8 | use App\Models\Employer; |
9 | use App\Models\Job_title; | 9 | use App\Models\Job_title; |
10 | use App\Models\News; | 10 | use App\Models\News; |
11 | use App\Models\reclame; | 11 | use App\Models\reclame; |
12 | use Illuminate\Http\Request; | 12 | use Illuminate\Http\Request; |
13 | use Illuminate\Support\Facades\Auth; | ||
14 | use Illuminate\Support\Facades\Validator; | ||
13 | 15 | ||
14 | class MainController extends Controller | 16 | class MainController extends Controller |
15 | { | 17 | { |
16 | // Главная страница публичной части | 18 | // Главная страница публичной части |
17 | public function index() { | 19 | public function index() { |
18 | $news = News::query()->orderBy('id')->limit(6)->get(); | 20 | $news = News::query()->orderBy('id')->limit(6)->get(); |
19 | 21 | ||
20 | $categories = Category::query()->selectRaw('count(ad_employers.id) as cnt, categories.*') | 22 | $categories = Category::query()->selectRaw('count(ad_employers.id) as cnt, categories.*') |
21 | ->join('ad_employers', 'ad_employers.category_id', '=', 'categories.id') | 23 | ->join('ad_employers', 'ad_employers.category_id', '=', 'categories.id') |
22 | ->OrderByDesc('created_at') | 24 | ->OrderByDesc('created_at') |
23 | ->GroupBy('categories.id') | 25 | ->GroupBy('categories.id') |
24 | ->get(); | 26 | ->get(); |
25 | 27 | ||
26 | $employers = Employer::query()->orderBy('id')->limit(20)->get(); | 28 | $employers = Employer::query()->orderBy('id')->limit(20)->get(); |
27 | 29 | ||
28 | return view('index', compact('news', 'categories', 'employers')); | 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 | public function vacancies(Request $request) { | 43 | public function vacancies(Request $request) { |
32 | //должности | 44 | //должности |
33 | $Job_title = Job_title::query()->orderBy('name')->get(); | 45 | $Job_title = Job_title::query()->orderBy('name')->get(); |
34 | 46 | ||
35 | $categories = Category::query()->selectRaw('count(ad_employers.id) as cnt, categories.*') | 47 | $categories = Category::query()->selectRaw('count(ad_employers.id) as cnt, categories.*') |
36 | ->selectRaw('min(ad_employers.salary) as min_salary, max(ad_employers.salary) as max_salary') | 48 | ->selectRaw('min(ad_employers.salary) as min_salary, max(ad_employers.salary) as max_salary') |
37 | ->join('ad_employers', 'ad_employers.category_id', '=', 'categories.id') | 49 | ->join('ad_employers', 'ad_employers.category_id', '=', 'categories.id') |
38 | ->join('ad_jobs', 'ad_jobs.ad_employer_id', '=', 'ad_employers.id'); | 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 | $categories = $categories->Where('job_title_id', '=', $request->get('job')) | 54 | $categories = $categories->Where('job_title_id', '=', $request->get('job')) |
43 | ->OrderByDesc('created_at') | 55 | ->OrderByDesc('created_at') |
44 | ->GroupBy('categories.id') | 56 | ->GroupBy('categories.id') |
45 | ->get(); | 57 | ->get(); |
46 | } else { | 58 | } else { |
47 | $categories = $categories->OrderByDesc('created_at') | 59 | $categories = $categories->OrderByDesc('created_at') |
48 | ->GroupBy('categories.id') | 60 | ->GroupBy('categories.id') |
49 | ->get(); | 61 | ->get(); |
50 | } | 62 | } |
51 | 63 | ||
52 | if ($request->ajax()) { | 64 | if ($request->ajax()) { |
53 | return view('ajax.vacancies', compact('categories')); | 65 | return view('ajax.vacancies', compact('categories')); |
54 | } else { | 66 | } else { |
55 | return view('vacancies', compact('Job_title', 'categories')); | 67 | return view('vacancies', compact('Job_title', 'categories')); |
56 | } | 68 | } |
57 | } | 69 | } |
58 | 70 | ||
59 | //Вакансии категория детальная | 71 | //Вакансии категория детальная |
60 | public function list_vacancies(Category $categories, Request $request) { | 72 | public function list_vacancies(Category $categories, Request $request) { |
61 | 73 | ||
62 | $Query = Ad_employer::with('jobs')-> | 74 | $Query = Ad_employer::with('jobs')-> |
63 | with('cat')-> | 75 | with('cat')-> |
64 | with('employer')-> | 76 | with('employer')-> |
65 | whereHas('jobs_code', function ($query) use ($request) { | 77 | whereHas('jobs_code', function ($query) use ($request) { |
66 | if ($request->ajax()) { | 78 | if ($request->ajax()) { |
67 | if (null !== ($request->get('job'))) { | 79 | if (null !== ($request->get('job'))) { |
68 | $query->where('job_title_id', $request->get('job')); | 80 | $query->where('job_title_id', $request->get('job')); |
69 | } | 81 | } |
70 | } | 82 | } |
71 | }) | 83 | }) |
72 | ->select('ad_employers.*'); | 84 | ->select('ad_employers.*'); |
73 | 85 | ||
74 | if ($categories->id > 0) { | 86 | if ($categories->id > 0) { |
75 | $Query = $Query->where('category_id', '=', $categories->id); | 87 | $Query = $Query->where('category_id', '=', $categories->id); |
76 | $Name_categori = Category::query()->where('id', '=', $categories->id)->get(); | 88 | $Name_categori = Category::query()->where('id', '=', $categories->id)->get(); |
77 | } | 89 | } |
78 | 90 | ||
79 | $Job_title = Job_title::query()->OrderBy('name')->get(); | 91 | $Job_title = Job_title::query()->OrderBy('name')->get(); |
80 | 92 | ||
81 | $Query_count = $Query->count(); | 93 | $Query_count = $Query->count(); |
82 | 94 | ||
83 | $Query = $Query->OrderBy('updated_at')->paginate(3); | 95 | $Query = $Query->OrderBy('updated_at')->paginate(3); |
84 | 96 | ||
85 | $Reclama = reclame::query()->limit(3)->get(); | 97 | $Reclama = reclame::query()->limit(3)->get(); |
86 | 98 | ||
87 | 99 | ||
88 | 100 | ||
89 | if ($request->ajax()) { | 101 | if ($request->ajax()) { |
90 | return view('ajax.list_vacancies', compact('Query', 'Query_count', 'Name_categori', 'Reclama', 'categories')); | 102 | return view('ajax.list_vacancies', compact('Query', 'Query_count', 'Name_categori', 'Reclama', 'categories')); |
91 | } else { | 103 | } else { |
92 | //Вернуть все | 104 | //Вернуть все |
93 | return view('list_vacancies', compact('Query', | 105 | return view('list_vacancies', compact('Query', |
94 | 'Query_count', | 106 | 'Query_count', |
95 | 'Reclama', | 107 | 'Reclama', |
96 | 'Name_categori', | 108 | 'Name_categori', |
97 | 'categories', | 109 | 'categories', |
98 | 'Job_title')); | 110 | 'Job_title')); |
99 | } | 111 | } |
100 | } | 112 | } |
101 | 113 | ||
102 | // Образование | 114 | // Образование |
103 | public function education(Request $request) { | 115 | public function education(Request $request) { |
104 | $educations = Education::query(); | 116 | $educations = Education::query(); |
105 | if ($request->has('search')) { | 117 | if ($request->has('search')) { |
106 | $search = trim($request->has('search')); | 118 | $search = trim($request->has('search')); |
107 | $educations = $educations->where('name', 'LIKE', "%$search%"); | 119 | $educations = $educations->where('name', 'LIKE', "%$search%"); |
108 | } | 120 | } |
109 | $count_edu = $educations->count(); | 121 | $count_edu = $educations->count(); |
110 | $educations = $educations->paginate(6); | 122 | $educations = $educations->paginate(6); |
111 | return view('education', compact('educations', 'count_edu')); | 123 | return view('education', compact('educations', 'count_edu')); |
112 | } | 124 | } |
113 | 125 | ||
114 | // Контакты | 126 | // Контакты |
115 | public function contacts() { | 127 | public function contacts() { |
116 | return view('contacts'); | 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 | } |
119 | 182 |
app/Http/Controllers/WorkerController.php
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace App\Http\Controllers; | 3 | namespace App\Http\Controllers; |
4 | 4 | ||
5 | use App\Models\Static_worker; | 5 | use App\Models\Static_worker; |
6 | use App\Models\Worker; | 6 | use App\Models\Worker; |
7 | use Illuminate\Http\Request; | 7 | use Illuminate\Http\Request; |
8 | 8 | ||
9 | class WorkerController extends Controller | 9 | class WorkerController extends Controller |
10 | { | 10 | { |
11 | //главная | 11 | public $status_work = Array(0 => 'Ищу работу', 1=> 'Не указано', 2=>'Не ищу работу'); |
12 | public function index() { | ||
13 | return; | ||
14 | } | ||
15 | |||
16 | //профиль | 12 | //профиль |
17 | public function profile(Worker $worker) { | 13 | public function profile(Worker $worker) { |
18 | $get_date = date('Y.m'); | 14 | $get_date = date('Y.m'); |
19 | 15 | ||
20 | $c = Static_worker::query()->where('year_month', '=', $get_date) | 16 | $c = Static_worker::query()->where('year_month', '=', $get_date) |
21 | ->where('user_id', '=', $worker->users->id) | 17 | ->where('user_id', '=', $worker->users->id) |
22 | ->get(); | 18 | ->get(); |
23 | 19 | ||
24 | if ($c->count() > 0) { | 20 | if ($c->count() > 0) { |
25 | $upd = Static_worker::find($c[0]->id); | 21 | $upd = Static_worker::find($c[0]->id); |
26 | $upd->lookin = $upd->lookin + 1; | 22 | $upd->lookin = $upd->lookin + 1; |
27 | $upd->save(); | 23 | $upd->save(); |
28 | } else { | 24 | } else { |
29 | $crt = new Static_worker(); | 25 | $crt = new Static_worker(); |
30 | $crt->lookin = 1; | 26 | $crt->lookin = 1; |
31 | $crt->year_month = $get_date; | 27 | $crt->year_month = $get_date; |
32 | $crt->user_id = $worker->user_id; | 28 | $crt->user_id = $worker->user_id; |
33 | $crt->save(); | 29 | $crt->save(); |
34 | } | 30 | } |
35 | 31 | ||
36 | $stat = Static_worker::query()->where('year_month', '=', $get_date) | 32 | $stat = Static_worker::query()->where('year_month', '=', $get_date) |
37 | ->where('user_id', '=', $worker->users->id) | 33 | ->where('user_id', '=', $worker->users->id) |
38 | ->get(); | 34 | ->get(); |
39 | 35 | ||
40 | return view('public.workers.profile', compact('worker', 'stat')); | 36 | return view('public.workers.profile', compact('worker', 'stat')); |
41 | } | 37 | } |
42 | 38 | ||
43 | //публичная оферта | 39 | // лист база резюме |
44 | public function public_offer() { | 40 | public function bd_resume() { |
45 | return; | 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) { |
app/Models/PrevCompany.php
File was created | 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 | } | ||
14 |
app/Models/Worker.php
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace App\Models; | 3 | namespace App\Models; |
4 | 4 | ||
5 | use Illuminate\Database\Eloquent\Factories\HasFactory; | 5 | use Illuminate\Database\Eloquent\Factories\HasFactory; |
6 | use Illuminate\Database\Eloquent\Model; | 6 | use Illuminate\Database\Eloquent\Model; |
7 | 7 | ||
8 | class Worker extends Model | 8 | class Worker extends Model |
9 | { | 9 | { |
10 | use HasFactory; | 10 | use HasFactory; |
11 | 11 | ||
12 | protected $table = 'Workers'; | 12 | protected $table = 'Workers'; |
13 | 13 | ||
14 | protected $fillable = [ | 14 | protected $fillable = [ |
15 | 'user_id', | 15 | 'user_id', |
16 | 'status_work', | 16 | 'status_work', |
17 | 'position_work', | 17 | 'position_work', |
18 | 'telephone', | 18 | 'telephone', |
19 | 'telephone2', | 19 | 'telephone2', |
20 | 'persent_anketa', | 20 | 'persent_anketa', |
21 | 'photo', | 21 | 'photo', |
22 | 'email_data', | 22 | 'email_data', |
23 | 'status_profile', | 23 | 'status_profile', |
24 | 'old_year', | 24 | 'old_year', |
25 | 'experience', | 25 | 'experience', |
26 | 'en_is', | 26 | 'en_is', |
27 | 'education', | 27 | 'education', |
28 | 'email', | 28 | 'email', |
29 | 'interpassport', | 29 | 'interpassport', |
30 | 'mk', | 30 | 'mk', |
31 | 'vvp', | 31 | 'vvp', |
32 | 'vlm', | 32 | 'vlm', |
33 | 'reka_diplom', | 33 | 'reka_diplom', |
34 | 'more_diplom', | 34 | 'more_diplom', |
35 | 'mpss', | 35 | 'mpss', |
36 | 'tanker', | 36 | 'tanker', |
37 | 'gmssb', | 37 | 'gmssb', |
38 | 'resume', | 38 | 'resume', |
39 | 'sort', | 39 | 'sort', |
40 | 'updated_at', | 40 | 'updated_at', |
41 | 'text', | 41 | 'text', |
42 | 'address', | 42 | 'address', |
43 | 'city', | 43 | 'city', |
44 | 'coord', | 44 | 'coord', |
45 | 'file', | 45 | 'file', |
46 | 'is_remove', | 46 | 'is_remove', |
47 | 'favorite_user', | 47 | 'favorite_user', |
48 | 'sroch_user' | 48 | 'sroch_user' |
49 | ]; | 49 | ]; |
50 | 50 | ||
51 | /* | 51 | /* |
52 | * Связь таблицы users с таблицей workers | 52 | * Связь таблицы users с таблицей workers |
53 | */ | 53 | */ |
54 | public function users() { | 54 | public function users() { |
55 | return $this->belongsTo(User::class, 'user_id'); | 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 | public function scopeActive($query) { | 73 | public function scopeActive($query) { |
59 | return $query->where('is_remove', '=', '0'); | 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 | } |
62 | 87 |
database/migrations/2024_02_22_080113_alter_table_sertification.php
File was created | 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 | }; | ||
35 |
database/migrations/2024_02_22_092030_create_table_prev_company.php
File was created | 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 | }; | ||
37 |
public/images/default_man.jpg
25.8 KB
public/js/script.js
1 | let scripts = function () { | 1 | let scripts = function () { |
2 | 2 | ||
3 | $('.js-toggle').on('click', function () { | 3 | $('.js-toggle').on('click', function () { |
4 | $(this).toggleClass('active'); | 4 | $(this).toggleClass('active'); |
5 | }); | 5 | }); |
6 | $('.js-parent-toggle').on('click', function () { | 6 | $('.js-parent-toggle').on('click', function () { |
7 | $(this).parent().toggleClass('active'); | 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 | $('[data-tab]').on('click',function(){ | 26 | $('[data-tab]').on('click',function(){ |
11 | $('[data-tab]').removeClass('active'); | 27 | $('[data-tab]').removeClass('active'); |
12 | $('[data-body]').removeClass('showed'); | 28 | $('[data-body]').removeClass('showed'); |
13 | $(this).addClass('active'); | 29 | $(this).addClass('active'); |
14 | var id = $(this).data('tab'); | 30 | var id = $(this).data('tab'); |
15 | $('[data-body='+id+']').addClass('showed'); | 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 | let checkScrollTop = function () { | 44 | let checkScrollTop = function () { |
19 | if ($(document).scrollTop() == 0) { | 45 | if ($(document).scrollTop() == 0) { |
20 | $('#body').removeClass('begin'); | 46 | $('#body').removeClass('begin'); |
21 | } else { | 47 | } else { |
22 | $('#body').addClass('begin'); | 48 | $('#body').addClass('begin'); |
23 | } | 49 | } |
24 | } | 50 | } |
25 | checkScrollTop(); | 51 | checkScrollTop(); |
26 | $(document).on('scroll', function () { | 52 | $(document).on('scroll', function () { |
27 | checkScrollTop(); | 53 | checkScrollTop(); |
28 | }); | 54 | }); |
29 | 55 | ||
30 | let closeAll = function () { | 56 | let closeAll = function () { |
31 | $('.js-toggle').removeClass('active'); | 57 | $('.js-toggle').removeClass('active'); |
32 | $('.js-parent-toggle').parent().removeClass('active'); | 58 | $('.js-parent-toggle').parent().removeClass('active'); |
59 | $('#body').removeClass('menu-is-actived'); | ||
60 | $('#body').removeClass('cookies-is-actived'); | ||
33 | } | 61 | } |
34 | 62 | ||
35 | $(document).keyup(function (e) { | 63 | $(document).keyup(function (e) { |
36 | if (e.key === "Escape") { | 64 | if (e.key === "Escape") { |
37 | closeAll(); | 65 | closeAll(); |
38 | } | 66 | } |
39 | }); | 67 | }); |
40 | 68 | ||
41 | $('.js-scroll-to').bind('click', function (e) { | 69 | $('.js-scroll-to').bind('click', function (e) { |
42 | let anchor = $(this); | 70 | let anchor = $(this); |
43 | $('html,body').stop().animate({ | 71 | $('html,body').stop().animate({ |
44 | scrollTop: $(anchor.attr('href')).offset().top | 72 | scrollTop: $(anchor.attr('href')).offset().top |
45 | }, 300); | 73 | }, 300); |
46 | e.preventDefault(); | 74 | e.preventDefault(); |
47 | }); | 75 | }); |
48 | 76 | ||
49 | if ($('[type=tel]').is('[type=tel]')){ | 77 | if ($('[type=tel]').is('[type=tel]')){ |
50 | $('[type=tel]').mask('+7 (999) 999-99-99'); | 78 | $('[type=tel]').mask('+7 (999) 999-99-99'); |
51 | } | 79 | } |
52 | 80 | ||
53 | if ($('.js-select2').is('.js-select2')){ | 81 | if ($('.js-select2').is('.js-select2')){ |
54 | $('.js-select2').select2(); | 82 | $('.js-select2').select2(); |
55 | } | 83 | } |
56 | 84 | ||
57 | }; | 85 | }; |
58 | 86 | ||
59 | let swipers = function () { | 87 | let swipers = function () { |
60 | 88 | ||
61 | if ($('.js-employer-swiper').is('.js-employer-swiper')) { | 89 | if ($('.js-employer-swiper').is('.js-employer-swiper')) { |
62 | let slider = new Swiper('.js-employer-swiper', { | 90 | let slider = new Swiper('.js-employer-swiper', { |
63 | autoplay: { | 91 | autoplay: { |
64 | delay: 5000, | 92 | delay: 5000, |
65 | }, | 93 | }, |
66 | pagination: { | 94 | pagination: { |
67 | el: '.swiper-pagination', | 95 | el: '.swiper-pagination', |
68 | clickable: true | 96 | clickable: true |
69 | }, | 97 | }, |
70 | breakpoints: { | 98 | breakpoints: { |
71 | 768: { | 99 | 768: { |
72 | slidesPerView: 2, | 100 | slidesPerView: 2, |
73 | }, | 101 | }, |
74 | 992: { | 102 | 992: { |
75 | slidesPerView: 3, | 103 | slidesPerView: 3, |
76 | }, | 104 | }, |
77 | 1280: { | 105 | 1280: { |
78 | slidesPerView: 4, | 106 | slidesPerView: 4, |
79 | }, | 107 | }, |
80 | } | 108 | } |
81 | }); | 109 | }); |
82 | } | 110 | } |
83 | 111 | ||
84 | if ($('.js-news-swiper').is('.js-news-swiper')) { | 112 | if ($('.js-news-swiper').is('.js-news-swiper')) { |
85 | let slider = new Swiper('.js-news-swiper', { | 113 | let slider = new Swiper('.js-news-swiper', { |
86 | spaceBetween: 20, | 114 | spaceBetween: 20, |
87 | pagination: { | 115 | pagination: { |
88 | el: '.swiper-pagination', | 116 | el: '.swiper-pagination', |
89 | clickable: true | 117 | clickable: true |
90 | }, | 118 | }, |
91 | navigation: { | 119 | navigation: { |
92 | prevEl: '.js-news-swiper-button-prev', | 120 | prevEl: '.js-news-swiper-button-prev', |
93 | nextEl: '.js-news-swiper-button-next', | 121 | nextEl: '.js-news-swiper-button-next', |
94 | }, | 122 | }, |
95 | breakpoints: { | 123 | breakpoints: { |
96 | 768: { | 124 | 768: { |
97 | slidesPerView: 2, | 125 | slidesPerView: 2, |
98 | }, | 126 | }, |
99 | 992: { | 127 | 992: { |
100 | slidesPerView: 3, | 128 | slidesPerView: 3, |
101 | }, | 129 | }, |
102 | } | 130 | } |
103 | }); | 131 | }); |
104 | } | 132 | } |
105 | 133 | ||
106 | }; | 134 | }; |
107 | 135 | ||
108 | document.addEventListener("DOMContentLoaded", () => { | 136 | document.addEventListener("DOMContentLoaded", () => { |
109 | scripts(); | 137 | scripts(); |
110 | swipers(); | 138 | swipers(); |
111 | }); | 139 | }); |
112 | 140 | ||
113 | $(window).resize(function () { | 141 | $(window).resize(function () { |
114 | swipers(); | 142 | swipers(); |
115 | }); | 143 | }); |
116 | 144 |
resources/views/index.blade.php
1 | @extends('layout.frontend', ['title' => 'Главная страница РекаМоре']) | 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 | @section('content') | 35 | @section('content') |
4 | <section class="work"> | 36 | <section class="work"> |
5 | <div class="container"> | 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 | <div class="work__body"> | 39 | <div class="work__body"> |
8 | <div class="work__title"> | 40 | <div class="work__title"> |
9 | Работа в море / | 41 | Работа в море / |
10 | <span class="br">Работа на реке</span> | 42 | <span class="br">Работа на реке</span> |
11 | </div> | 43 | </div> |
12 | <div class="work__text">Профессиональная сеть морского сообщества «RekaMore.su» приветствует вас — | 44 | <div class="work__text">Профессиональная сеть морского сообщества «RekaMore.su» приветствует вас — |
13 | тех, кто не представляет себе жизнь без моря, тех, кто готов связать свою жизнь с работой в | 45 | тех, кто не представляет себе жизнь без моря, тех, кто готов связать свою жизнь с работой в |
14 | сложных, но очень интересных условиях. </div> | 46 | сложных, но очень интересных условиях. </div> |
15 | <div class="work__list"> | 47 | <div class="work__list"> |
16 | <div>Тысячи соискателей увидят Ваше объявление</div> | 48 | <div>Тысячи соискателей увидят Ваше объявление</div> |
17 | <div>Десятки компаний выкладывают объявления каждый день</div> | 49 | <div>Десятки компаний выкладывают объявления каждый день</div> |
18 | </div> | 50 | </div> |
19 | <form class="search work__form"> | 51 | <form class="search work__form" action="{{ route('search_vacancies') }}" method="GET"> |
20 | <input type="search" class="input" placeholder="Желаемая должность" required> | 52 | <input type="search" id="search" name="search" class="input" placeholder="Желаемая должность" required> |
21 | <button type="submit" class="button button_light">Посмотреть вакансии</button> | 53 | <button type="submit" class="button button_light">Посмотреть вакансии</button> |
22 | <span> | 54 | <span> |
23 | <svg> | 55 | <svg> |
24 | <use xlink:href="images/sprite.svg#search"></use> | 56 | <use xlink:href="{{ asset('images/sprite.svg#search') }}"></use> |
25 | </svg> | 57 | </svg> |
26 | </span> | 58 | </span> |
27 | </form> | 59 | </form> |
28 | <button class="button work__search">Я ищу сотрудника</button> | 60 | <a href="{{ route('bd_resume') }}" class="button work__search">Я ищу сотрудника</a> |
29 | <div class="work__get"> | 61 | <div class="work__get"> |
30 | <b>Скачать приложение</b> | 62 | <b>Скачать приложение</b> |
31 | <a href="#"> | 63 | <a href=""> |
32 | <img src="images/google.svg" alt=""> | 64 | <img src="{{ asset('images/google.svg') }}" alt=""> |
33 | </a> | 65 | </a> |
34 | <a href="#"> | 66 | <a href=""> |
35 | <img src="images/apple.svg" alt=""> | 67 | <img src="{{ asset('images/apple.svg') }}" alt=""> |
36 | </a> | 68 | </a> |
37 | </div> | 69 | </div> |
38 | </div> | 70 | </div> |
39 | </div> | 71 | </div> |
40 | </section> | 72 | </section> |
41 | <section class="numbers"> | 73 | <section class="numbers"> |
42 | <div class="container"> | 74 | <div class="container"> |
43 | <div class="numbers__body"> | 75 | <div class="numbers__body"> |
44 | <div class="numbers__item"> | 76 | <div class="numbers__item"> |
45 | <b>500+</b> | 77 | <b>500+</b> |
46 | <span>Резюме</span> | 78 | <span>Резюме</span> |
47 | Банальные, но неопровержимые выводы, а также элементы политического процесса лишь добавляют | 79 | Банальные, но неопровержимые выводы, а также элементы политического процесса лишь добавляют |
48 | фракционных разногласий и призваны к ответу. | 80 | фракционных разногласий и призваны к ответу. |
49 | </div> | 81 | </div> |
50 | <div class="numbers__item"> | 82 | <div class="numbers__item"> |
51 | <b>1 000+</b> | 83 | <b>1 000+</b> |
52 | <span>Вакансий</span> | 84 | <span>Вакансий</span> |
53 | В рамках спецификации современных стандартов, диаграммы связей заблокированы в рамках своих | 85 | В рамках спецификации современных стандартов, диаграммы связей заблокированы в рамках своих |
54 | собственных рациональных ограничений. | 86 | собственных рациональных ограничений. |
55 | </div> | 87 | </div> |
56 | <div class="numbers__item"> | 88 | <div class="numbers__item"> |
57 | <b>265</b> | 89 | <b>265</b> |
58 | <span>Компаний</span> | 90 | <span>Компаний</span> |
59 | Но сторонники тоталитаризма в науке заблокированы в рамках своих собственных рациональных | 91 | Но сторонники тоталитаризма в науке заблокированы в рамках своих собственных рациональных |
60 | ограничений. | 92 | ограничений. |
61 | </div> | 93 | </div> |
62 | </div> | 94 | </div> |
63 | </div> | 95 | </div> |
64 | </section> | 96 | </section> |
65 | <section class="vacancies"> | 97 | <section class="vacancies"> |
66 | <div class="container"> | 98 | <div class="container"> |
67 | <div class="title">Новые вакансии</div> | 99 | <div class="title">Новые вакансии</div> |
68 | <div class="vacancies__body"> | 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 | <div class="vacancies__list"> | 102 | <div class="vacancies__list"> |
71 | @if ($categories->count()) | 103 | @if ($categories->count()) |
72 | @foreach ($categories as $cat) | 104 | @foreach ($categories as $cat) |
73 | <a href="#" class="vacancies__item"> | 105 | <a href="#" class="vacancies__item"> |
74 | <span style="border-color:#F4C4C2"> | 106 | <span style="border-color:#F4C4C2"> |
75 | <b>{{ $cat->name }}</b> | 107 | <b>{{ $cat->name }}</b> |
76 | <i>Вакансий: <span>{{ $cat->cnt }}</span></i> | 108 | <i>Вакансий: <span>{{ $cat->cnt }}</span></i> |
77 | </span> | 109 | </span> |
78 | </a> | 110 | </a> |
79 | @endforeach | 111 | @endforeach |
80 | @else | 112 | @else |
81 | Тут пока нет никаких вакансий | 113 | Тут пока нет никаких вакансий |
82 | @endif | 114 | @endif |
83 | </div> | 115 | </div> |
84 | </div> | 116 | </div> |
85 | </div> | 117 | </div> |
86 | </section> | 118 | </section> |
87 | <section class="employer"> | 119 | <section class="employer"> |
88 | <div class="container"> | 120 | <div class="container"> |
89 | <div class="title">Работодатели</div> | 121 | <div class="title">Работодатели</div> |
90 | <div class="swiper js-employer-swiper"> | 122 | <div class="swiper js-employer-swiper"> |
91 | <div class="swiper-wrapper"> | 123 | <div class="swiper-wrapper"> |
92 | 124 | ||
93 | @if ($employers->count()) | 125 | @if ($employers->count()) |
94 | @php | 126 | @php |
95 | $rec = 0; | 127 | $rec = 0; |
96 | $count = $employers->count(); | 128 | $count = $employers->count(); |
97 | @endphp | 129 | @endphp |
98 | @foreach($employers as $emp) | 130 | @foreach($employers as $emp) |
99 | @php $rec++ @endphp | 131 | @php $rec++ @endphp |
100 | @if (($rec==1) || ($rec==5) || ($rec==9) || ($rec==13) || ($rec==17)) | 132 | @if (($rec==1) || ($rec==5) || ($rec==9) || ($rec==13) || ($rec==17)) |
101 | <div class="swiper-slide"> | 133 | <div class="swiper-slide"> |
102 | <div class="employer__item"> | 134 | <div class="employer__item"> |
103 | @endif | 135 | @endif |
104 | <a href=""> | 136 | <a href=""> |
105 | <img src="{{ asset(Storage::url($emp->logo)) }}" alt="{{ $emp->name_company }}"> | 137 | <img src="{{ asset(Storage::url($emp->logo)) }}" alt="{{ $emp->name_company }}"> |
106 | </a> | 138 | </a> |
107 | @if (($rec==4) || ($rec==8) || ($rec==12) || ($rec==16) || ($rec==20) || ($rec == $count)) | 139 | @if (($rec==4) || ($rec==8) || ($rec==12) || ($rec==16) || ($rec==20) || ($rec == $count)) |
108 | </div> | 140 | </div> |
109 | </div> | 141 | </div> |
110 | @endif | 142 | @endif |
111 | @endforeach | 143 | @endforeach |
112 | @else | 144 | @else |
113 | <h5>Тут нет никаких записей</h5> | 145 | <h5>Тут нет никаких записей</h5> |
114 | @endif | 146 | @endif |
115 | </div> | 147 | </div> |
116 | <div class="swiper-pagination"></div> | 148 | <div class="swiper-pagination"></div> |
117 | </div> | 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 | </div> | 151 | </div> |
120 | </section> | 152 | </section> |
121 | <section class="about"> | 153 | <section class="about"> |
122 | <div class="container"> | 154 | <div class="container"> |
123 | <div class="about__wrapper"> | 155 | <div class="about__wrapper"> |
124 | <div class="title about__title">О нас</div> | 156 | <div class="title about__title">О нас</div> |
125 | <div class="about__body"> | 157 | <div class="about__body"> |
126 | <div class="about__line"></div> | 158 | <div class="about__line"></div> |
127 | <div class="about__item"> | 159 | <div class="about__item"> |
128 | <b>Для работодателей</b> | 160 | <b>Для работодателей</b> |
129 | <span>Наш ресурс позволит Вам за демократичную цену найти нужных специалистов в кратчайшие | 161 | <span>Наш ресурс позволит Вам за демократичную цену найти нужных специалистов в кратчайшие |
130 | сроки, подробнее об условиях можно узнать <a href="#">здесь</a>.</span> | 162 | сроки, подробнее об условиях можно узнать <a href="{{ route('page', ['pages' => 'Stoimost-razmescheniya']) }}">здесь</a>.</span> |
131 | <button class="about__button button button_whited">Поиск сотрудников</button> | 163 | <a class="about__button button button_whited" href="{{ route('bd_resume') }}">Поиск сотрудников</a> |
132 | </div> | 164 | </div> |
133 | <div class="about__item"> | 165 | <div class="about__item"> |
134 | <b>Для сотрудников</b> | 166 | <b>Для сотрудников</b> |
135 | <span>Наше преимущество — это большой объем вакансий, более 70 судоходных компаний России и | 167 | <span>Наше преимущество — это большой объем вакансий, более 70 судоходных компаний России и |
136 | СНГ ищут сотрудников через наши ресурсы</span> | 168 | СНГ ищут сотрудников через наши ресурсы</span> |
137 | <button class="about__button button button_whited">Посмотреть вакансии</button> | 169 | <a class="about__button button button_whited" href="{{ route('vacancies') }}">Посмотреть вакансии</a> |
138 | </div> | 170 | </div> |
139 | </div> | 171 | </div> |
140 | </div> | 172 | </div> |
141 | </div> | 173 | </div> |
142 | </section> | 174 | </section> |
143 | <section class="news"> | 175 | <section class="news"> |
144 | <div class="container"> | 176 | <div class="container"> |
145 | <div class="news__toper"> | 177 | <div class="news__toper"> |
146 | <div class="title">Новости и статьи</div> | 178 | <div class="title">Новости и статьи</div> |
147 | <div class="navs"> | 179 | <div class="navs"> |
148 | <button class="js-news-swiper-button-prev"> | 180 | <button class="js-news-swiper-button-prev"> |
149 | <svg class="rotate180"> | 181 | <svg class="rotate180"> |
150 | <use xlink:href="images/sprite.svg#arrow"></use> | 182 | <use xlink:href="{{ asset('images/sprite.svg#arrow') }}"></use> |
151 | </svg> | 183 | </svg> |
152 | </button> | 184 | </button> |
153 | <button class="js-news-swiper-button-next"> | 185 | <button class="js-news-swiper-button-next"> |
154 | <svg> | 186 | <svg> |
155 | <use xlink:href="images/sprite.svg#arrow"></use> | 187 | <use xlink:href="{{ asset('images/sprite.svg#arrow') }}"></use> |
156 | </svg> | 188 | </svg> |
157 | </button> | 189 | </button> |
158 | </div> | 190 | </div> |
159 | </div> | 191 | </div> |
160 | <div class="swiper js-news-swiper"> | 192 | <div class="swiper js-news-swiper"> |
161 | <div class="swiper-wrapper"> | 193 | <div class="swiper-wrapper"> |
162 | @if ($news->count()) | 194 | @if ($news->count()) |
163 | @foreach ($news as $new) | 195 | @foreach ($news as $new) |
164 | <div class="swiper-slide"> | 196 | <div class="swiper-slide"> |
165 | <div class="news__item"> | 197 | <div class="news__item"> |
166 | <img src="{{ asset(Storage::url($new->image)) }}" alt="" class="news__item-pic"> | 198 | <img src="{{ asset(Storage::url($new->image)) }}" alt="" class="news__item-pic"> |
167 | <div class="news__item-body"> | 199 | <div class="news__item-body"> |
168 | <time datetime="2023-05-01" class="news__item-date">{{ $new->created_at }}</time> | 200 | <time datetime="2023-05-01" class="news__item-date">{{ $new->created_at }}</time> |
169 | <span class="news__item-title">{{ $new->title }}</span> | 201 | <span class="news__item-title">{{ $new->title }}</span> |
170 | <span class="news__item-text">{{ mb_strimwidth($new->text, 0, 100) }}</span> | 202 | <span class="news__item-text">{{ mb_strimwidth($new->text, 0, 100) }}</span> |
171 | <a href="#" class="news__item-more button button_light">Читать далее</a> | 203 | <a href="#" class="news__item-more button button_light">Читать далее</a> |
172 | </div> | 204 | </div> |
173 | </div> | 205 | </div> |
174 | </div> | 206 | </div> |
175 | @endforeach | 207 | @endforeach |
176 | @endif | 208 | @endif |
177 | </div> | 209 | </div> |
178 | <div class="swiper-pagination"></div> | 210 | <div class="swiper-pagination"></div> |
179 | </div> | 211 | </div> |
180 | <div class="news__all button button_light">Все новости</div> | 212 | <div class="news__all button button_light">Все новости</div> |
181 | </div> | 213 | </div> |
182 | </section> | 214 | </section> |
183 | <section class="info"> | 215 | <section class="info"> |
184 | <div class="container"> | 216 | <div class="container"> |
185 | <img src="images/5.png" alt="" class="info__pic"> | 217 | <img src="images/5.png" alt="" class="info__pic"> |
186 | <div class="info__body"> | 218 | <div class="info__body"> |
187 | <div class="title info__title">Мы в социальных сетях</div> | 219 | <div class="title info__title">Мы в социальных сетях</div> |
188 | <div class="info__item"> | 220 | <div class="info__item"> |
189 | <div class="info__text">Телеграм — Подпишитесь на наш телеграм канал и получайте уведомления о | 221 | <div class="info__text">Телеграм — Подпишитесь на наш телеграм канал и получайте уведомления о |
190 | новых вакансиях прямо на свой смартфон</div> | 222 | новых вакансиях прямо на свой смартфон</div> |
191 | <a href="#" class="info__link" style="background:#20A0E1"> | 223 | <a href="#" class="info__link" style="background:#20A0E1"> |
192 | <svg> | 224 | <svg> |
193 | <use xlink:href="images/sprite.svg#tg"></use> | 225 | <use xlink:href="images/sprite.svg#tg"></use> |
194 | </svg> | 226 | </svg> |
195 | Телеграм | 227 | Телеграм |
196 | </a> | 228 | </a> |
197 | </div> | 229 | </div> |
198 | <div class="info__item"> | 230 | <div class="info__item"> |
199 | <div class="info__text">ВКонтакте — Лучшие вакансии за неделю выкладываем именно тут, информация | 231 | <div class="info__text">ВКонтакте — Лучшие вакансии за неделю выкладываем именно тут, информация |
200 | о судоходных компаниях, инструкции по работе с сайтом, конкурсы и многое другое</div> | 232 | о судоходных компаниях, инструкции по работе с сайтом, конкурсы и многое другое</div> |
201 | <a href="#" class="info__link" style="background:#2787F5"> | 233 | <a href="#" class="info__link" style="background:#2787F5"> |
202 | <svg> | 234 | <svg> |
203 | <use xlink:href="images/sprite.svg#vk"></use> | 235 | <use xlink:href="images/sprite.svg#vk"></use> |
204 | </svg> | 236 | </svg> |
205 | ВКонтакте | 237 | ВКонтакте |
206 | </a> | 238 | </a> |
207 | </div> | 239 | </div> |
208 | </div> | 240 | </div> |
209 | </div> | 241 | </div> |
210 | </section> | 242 | </section> |
211 | @endsection | 243 | @endsection |
212 | 244 |
resources/views/layout/frontend.blade.php
1 | <!DOCTYPE html> | 1 | <!DOCTYPE html> |
2 | <html lang="{{ str_replace('_', '-', app()->getLocale()) }}"> | 2 | <html lang="{{ str_replace('_', '-', app()->getLocale()) }}"> |
3 | 3 | ||
4 | <head> | 4 | <head> |
5 | <meta charset="utf-8"> | 5 | <meta charset="utf-8"> |
6 | <title>{{ $title }}</title> | 6 | <title>{{ $title }}</title> |
7 | <meta name="viewport" content="width=device-width,initial-scale=1"> | 7 | <meta name="viewport" content="width=device-width,initial-scale=1"> |
8 | <meta name="theme-color" content="#377D87"> | 8 | <meta name="theme-color" content="#377D87"> |
9 | <link rel="stylesheet" href="{{ asset('css/news/style.css') }}"> | 9 | <link rel="stylesheet" href="{{ asset('css/news/style.css') }}"> |
10 | </head> | 10 | </head> |
11 | 11 | ||
12 | <body id="body"> | 12 | <body id="body"> |
13 | <a href="#body" class="to-top js-scroll-to"> | 13 | <a href="#body" class="to-top js-scroll-to"> |
14 | <svg> | 14 | <svg> |
15 | <use xlink:href="{{ asset('images/sprite.svg#arrow-top') }}"></use> | 15 | <use xlink:href="{{ asset('images/sprite.svg#arrow-top') }}"></use> |
16 | </svg> | 16 | </svg> |
17 | </a> | 17 | </a> |
18 | 18 | ||
19 | <div> <!-- BEGIN TOP WRAPPER --> | 19 | <div> <!-- BEGIN TOP WRAPPER --> |
20 | <header class="header"> | 20 | <header class="header"> |
21 | <div class="container"> | 21 | <div class="container"> |
22 | <div class="header__body"> | 22 | <div class="header__body"> |
23 | <div class="header__left"> | 23 | <div class="header__left"> |
24 | <a href="{{ route('index') }}" class="header__logo"> | 24 | <a href="{{ route('index') }}" class="header__logo"> |
25 | <svg> | 25 | <svg> |
26 | <use xlink:href="{{ asset('images/sprite.svg#logo') }}"></use> | 26 | <use xlink:href="{{ asset('images/sprite.svg#logo') }}"></use> |
27 | </svg> | 27 | </svg> |
28 | </a> | 28 | </a> |
29 | <nav class="header__menu"> | 29 | <nav class="header__menu"> |
30 | <a href="{{ route('vacancies') }}" class="header__menu-item">Вакансии</a> | 30 | <a href="{{ route('vacancies') }}" class="header__menu-item">Вакансии</a> |
31 | <a href="{{ route('shipping_companies') }}" class="header__menu-item">Судоходные компании</a> | 31 | <a href="{{ route('shipping_companies') }}" class="header__menu-item">Судоходные компании</a> |
32 | <a href="{{ route('education') }}" class="header__menu-item">Образование</a> | 32 | <a href="{{ route('education') }}" class="header__menu-item">Образование</a> |
33 | </nav> | 33 | </nav> |
34 | </div> | 34 | </div> |
35 | <div class="header__right"> | 35 | <div class="header__right"> |
36 | @guest | ||
37 | |||
38 | @else | ||
36 | <button class="header__notifs header__notifs_actived"> | 39 | <button class="header__notifs header__notifs_actived"> |
37 | <svg> | 40 | <svg> |
38 | <use xlink:href="{{ asset('images/sprite.svg#ring') }}"></use> | 41 | <use xlink:href="{{ asset('images/sprite.svg#ring') }}"></use> |
39 | </svg> | 42 | </svg> |
40 | <span>Уведомления</span> | 43 | <span>Уведомления</span> |
41 | </button> | 44 | </button> |
45 | @endguest | ||
42 | <div class="header__right-line"></div> | 46 | <div class="header__right-line"></div> |
43 | <button class="header__burger"> | 47 | <button class="header__burger"> |
44 | <svg> | 48 | <svg> |
45 | <use xlink:href="{{ asset('images/sprite.svg#burger') }}"></use> | 49 | <use xlink:href="{{ asset('images/sprite.svg#burger') }}"></use> |
46 | </svg> | 50 | </svg> |
47 | </button> | 51 | </button> |
48 | @guest | 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 | @else | 54 | @else |
51 | <a class="button header__sign" href="{{ route('logout') }}">Выйти</a> | 55 | <a class="button header__sign" href="{{ route('logout') }}">Выйти</a> |
52 | @endguest | 56 | @endguest |
53 | </div> | 57 | </div> |
54 | </div> | 58 | </div> |
55 | </div> | 59 | </div> |
56 | </header> | 60 | </header> |
57 | @yield('content') | 61 | @yield('content') |
58 | 62 | ||
59 | </div> <!-- END TOP WRAPPER --> | 63 | </div> <!-- END TOP WRAPPER --> |
60 | 64 | ||
61 | <div> <!-- BEGIN BOTTOM WRAPPER --> | 65 | <div> <!-- BEGIN BOTTOM WRAPPER --> |
62 | <footer class="footer"> | 66 | <footer class="footer"> |
63 | <div class="container"> | 67 | <div class="container"> |
64 | <div class="footer__mobile"> | 68 | <div class="footer__mobile"> |
65 | <button class="footer__mobile-toper js-toggle active"> | 69 | <button class="footer__mobile-toper js-toggle active"> |
66 | <a href="{{ route('index') }}"> | 70 | <a href="{{ route('index') }}"> |
67 | <svg> | 71 | <svg> |
68 | <use xlink:href="{{ asset('images/sprite.svg#logo') }}"></use> | 72 | <use xlink:href="{{ asset('images/sprite.svg#logo') }}"></use> |
69 | </svg> | 73 | </svg> |
70 | </a> | 74 | </a> |
71 | <span> | 75 | <span> |
72 | <svg> | 76 | <svg> |
73 | <use xlink:href="{{ asset('images/sprite.svg#arrow-top') }}"></use> | 77 | <use xlink:href="{{ asset('images/sprite.svg#arrow-top') }}"></use> |
74 | </svg> | 78 | </svg> |
75 | </span> | 79 | </span> |
76 | </button> | 80 | </button> |
77 | <div class="footer__mobile-menu"> | 81 | <div class="footer__mobile-menu"> |
78 | <div class="footer__mobile-menu-item"> | 82 | <div class="footer__mobile-menu-item"> |
79 | <button class="js-toggle"> | 83 | <button class="js-toggle"> |
80 | <b>Соискателям</b> | 84 | <b>Соискателям</b> |
81 | <span><svg> | 85 | <span><svg> |
82 | <use xlink:href="{{ asset('images/sprite.svg#arrow-top') }}"></use> | 86 | <use xlink:href="{{ asset('images/sprite.svg#arrow-top') }}"></use> |
83 | </svg></span> | 87 | </svg></span> |
84 | </button> | 88 | </button> |
85 | <div> | 89 | <div> |
86 | <a href="{{ route('vacancies') }}">Вакансии</a> | 90 | <a href="{{ route('vacancies') }}">Вакансии</a> |
87 | <a href="{{ route('page', ['pages' => "Usloviya-razmescheniya"]) }}">Условия размещения</a> | 91 | <a href="{{ route('page', ['pages' => "Usloviya-razmescheniya"]) }}">Условия размещения</a> |
88 | <a href="{{ route('education') }}">Образование</a> | 92 | <a href="{{ route('education') }}">Образование</a> |
89 | <a href="{{ route('news') }}">Новости</a> | 93 | <a href="{{ route('news') }}">Новости</a> |
90 | <a href="{{ route('contacts') }}">Контакты</a> | 94 | <a href="{{ route('contacts') }}">Контакты</a> |
91 | <a href="{{ route('page', ['pages' => "Publichnaya-oferta-soiskatelyam"]) }}">Публичная оферта</a> | 95 | <a href="{{ route('page', ['pages' => "Publichnaya-oferta-soiskatelyam"]) }}">Публичная оферта</a> |
92 | </div> | 96 | </div> |
93 | </div> | 97 | </div> |
94 | <div class="footer__mobile-menu-item"> | 98 | <div class="footer__mobile-menu-item"> |
95 | <button class="js-toggle"> | 99 | <button class="js-toggle"> |
96 | <b>Работодателям</b> | 100 | <b>Работодателям</b> |
97 | <span><svg> | 101 | <span><svg> |
98 | <use xlink:href="{{asset('images/sprite.svg#arrow-top') }}"></use> | 102 | <use xlink:href="{{asset('images/sprite.svg#arrow-top') }}"></use> |
99 | </svg></span> | 103 | </svg></span> |
100 | </button> | 104 | </button> |
101 | <div> | 105 | <div> |
102 | <a href="{{ route('register') }}">Регистрация</a> | 106 | <a href="{{ route('register') }}">Регистрация</a> |
103 | <a href="{{ route('bd_resume') }}">База резюме</a> | 107 | <a href="{{ route('bd_resume') }}">База резюме</a> |
104 | <a href="{{ route('page', ['pages' => "Stoimost-razmescheniya"]) }}">Стоимость размещения</a> | 108 | <a href="{{ route('page', ['pages' => "Stoimost-razmescheniya"]) }}">Стоимость размещения</a> |
105 | <a href="{{ route('page', ['pages' => "Instrukcii"]) }}">Инструкции</a> | 109 | <a href="{{ route('page', ['pages' => "Instrukcii"]) }}">Инструкции</a> |
106 | <a href="{{ route('page', ['pages' => "Effektivnost-obyavleniya"]) }}">Эффективность объявления</a> | 110 | <a href="{{ route('page', ['pages' => "Effektivnost-obyavleniya"]) }}">Эффективность объявления</a> |
107 | <a href="{{ route('page', ['pages' => "Publichnaya-oferta-rabotodatelyam"]) }}">Публичная оферта</a> | 111 | <a href="{{ route('page', ['pages' => "Publichnaya-oferta-rabotodatelyam"]) }}">Публичная оферта</a> |
108 | </div> | 112 | </div> |
109 | </div> | 113 | </div> |
110 | </div> | 114 | </div> |
111 | <div class="footer__mobile-contacts"> | 115 | <div class="footer__mobile-contacts"> |
112 | <b>Контакты</b> | 116 | <b>Контакты</b> |
113 | <a href="tel:{{ $companies[0]->telephone }}">{{ $companies[0]->telephone }}</a> | 117 | <a href="tel:{{ $companies[0]->telephone }}">{{ $companies[0]->telephone }}</a> |
114 | <a href="mailto:{{ $companies[0]->email }}">{{ $companies[0]->email }}</a> | 118 | <a href="mailto:{{ $companies[0]->email }}">{{ $companies[0]->email }}</a> |
115 | </div> | 119 | </div> |
116 | <div class="footer__mobile-bottom"> | 120 | <div class="footer__mobile-bottom"> |
117 | <div class="socials"> | 121 | <div class="socials"> |
118 | <a href="{{ $companies[0]->vkontact }}" target="_blank"> | 122 | <a href="{{ $companies[0]->vkontact }}" target="_blank"> |
119 | <svg> | 123 | <svg> |
120 | <use xlink:href="{{ asset('images/sprite.svg#vk') }}"></use> | 124 | <use xlink:href="{{ asset('images/sprite.svg#vk') }}"></use> |
121 | </svg> | 125 | </svg> |
122 | </a> | 126 | </a> |
123 | <a href="{{ $companies[0]->telegram }}" target="_blank"> | 127 | <a href="{{ $companies[0]->telegram }}" target="_blank"> |
124 | <svg> | 128 | <svg> |
125 | <use xlink:href="{{ asset('images/sprite.svg#tg') }}"></use> | 129 | <use xlink:href="{{ asset('images/sprite.svg#tg') }}"></use> |
126 | </svg> | 130 | </svg> |
127 | </a> | 131 | </a> |
128 | </div> | 132 | </div> |
129 | <nav class="footer__mobile-links"> | 133 | <nav class="footer__mobile-links"> |
130 | <a href="{{ route('page', ['pages' => "Politika-konfidencialnosti"]) }}">Политика конфиденциальности</a> | 134 | <a href="{{ route('page', ['pages' => "Politika-konfidencialnosti"]) }}">Политика конфиденциальности</a> |
131 | <span></span> | 135 | <span></span> |
132 | <a href="{{ route('page', ['pages' => "Polzovatelskoe-soglashenie"]) }}">Пользовательское соглашение</a> | 136 | <a href="{{ route('page', ['pages' => "Polzovatelskoe-soglashenie"]) }}">Пользовательское соглашение</a> |
133 | </nav> | 137 | </nav> |
134 | © 2023 — RekaMore.su | 138 | © 2023 — RekaMore.su |
135 | <a href="{{ route('index') }}" class="nls" target="_blank"> | 139 | <a href="{{ route('index') }}" class="nls" target="_blank"> |
136 | <svg> | 140 | <svg> |
137 | <use xlink:href="{{ asset('images/sprite.svg#nls') }}"></use> | 141 | <use xlink:href="{{ asset('images/sprite.svg#nls') }}"></use> |
138 | </svg> | 142 | </svg> |
139 | <span> | 143 | <span> |
140 | Дизайн и разработка: | 144 | Дизайн и разработка: |
141 | <b>NoLogoStudio.ru</b> | 145 | <b>NoLogoStudio.ru</b> |
142 | </span> | 146 | </span> |
143 | </a> | 147 | </a> |
144 | </div> | 148 | </div> |
145 | </div> | 149 | </div> |
146 | <div class="footer__main"> | 150 | <div class="footer__main"> |
147 | <div class="footer__main-body"> | 151 | <div class="footer__main-body"> |
148 | <a href="" class="footer__main-logo"> | 152 | <a href="" class="footer__main-logo"> |
149 | <svg> | 153 | <svg> |
150 | <use xlink:href="{{ asset('images/sprite.svg#logo') }}"></use> | 154 | <use xlink:href="{{ asset('images/sprite.svg#logo') }}"></use> |
151 | </svg> | 155 | </svg> |
152 | </a> | 156 | </a> |
153 | <div class="footer__main-col"> | 157 | <div class="footer__main-col"> |
154 | <div class="footer__main-title">Соискателям</div> | 158 | <div class="footer__main-title">Соискателям</div> |
155 | <nav> | 159 | <nav> |
156 | <a href="{{ route('vacancies') }}">Вакансии</a> | 160 | <a href="{{ route('vacancies') }}">Вакансии</a> |
157 | <a href="{{ route('page', ['pages' => "Usloviya-razmescheniya"]) }}">Условия размещения</a> | 161 | <a href="{{ route('page', ['pages' => "Usloviya-razmescheniya"]) }}">Условия размещения</a> |
158 | <a href="{{ route('education') }}">Образование</a> | 162 | <a href="{{ route('education') }}">Образование</a> |
159 | <a href="{{ route('news') }}">Новости</a> | 163 | <a href="{{ route('news') }}">Новости</a> |
160 | <a href="{{ route('contacts') }}">Контакты</a> | 164 | <a href="{{ route('contacts') }}">Контакты</a> |
161 | <a href="{{ route('page', ['pages' => "Publichnaya-oferta-soiskatelyam"]) }}">Публичная оферта</a> | 165 | <a href="{{ route('page', ['pages' => "Publichnaya-oferta-soiskatelyam"]) }}">Публичная оферта</a> |
162 | </nav> | 166 | </nav> |
163 | </div> | 167 | </div> |
164 | <div class="footer__main-col"> | 168 | <div class="footer__main-col"> |
165 | <div class="footer__main-title">Работодателям</div> | 169 | <div class="footer__main-title">Работодателям</div> |
166 | <nav> | 170 | <nav> |
167 | <a href="{{ route('register') }}">Регистрация</a> | 171 | <a href="{{ route('register') }}">Регистрация</a> |
168 | <a href="{{ route('bd_resume') }}">База резюме</a> | 172 | <a href="{{ route('bd_resume') }}">База резюме</a> |
169 | <a href="{{ route('page', ['pages' => "Stoimost-razmescheniya"]) }}">Стоимость размещения</a> | 173 | <a href="{{ route('page', ['pages' => "Stoimost-razmescheniya"]) }}">Стоимость размещения</a> |
170 | <a href="{{ route('page', ['pages' => "Instrukcii"]) }}">Инструкции</a> | 174 | <a href="{{ route('page', ['pages' => "Instrukcii"]) }}">Инструкции</a> |
171 | <a href="{{ route('page', ['pages' => "Effektivnost-obyavleniya"]) }}">Эффективность объявления</a> | 175 | <a href="{{ route('page', ['pages' => "Effektivnost-obyavleniya"]) }}">Эффективность объявления</a> |
172 | <a href="{{ route('page', ['pages' => "Publichnaya-oferta-rabotodatelyam"]) }}">Публичная оферта</a> | 176 | <a href="{{ route('page', ['pages' => "Publichnaya-oferta-rabotodatelyam"]) }}">Публичная оферта</a> |
173 | </nav> | 177 | </nav> |
174 | </div> | 178 | </div> |
175 | 179 | ||
176 | <div class="footer__main-col"> | 180 | <div class="footer__main-col"> |
177 | <div class="footer__main-title">Контакты</div> | 181 | <div class="footer__main-title">Контакты</div> |
178 | <div class="footer__main-contacts"> | 182 | <div class="footer__main-contacts"> |
179 | <a href="tel:{{ $companies[0]->telephone }}">{{ $companies[0]->telephone }}</a> | 183 | <a href="tel:{{ $companies[0]->telephone }}">{{ $companies[0]->telephone }}</a> |
180 | <a href="mailto:{{ $companies[0]->email }}">{{ $companies[0]->email }}</a> | 184 | <a href="mailto:{{ $companies[0]->email }}">{{ $companies[0]->email }}</a> |
181 | </div> | 185 | </div> |
182 | <div class="socials"> | 186 | <div class="socials"> |
183 | <a href="{{ $companies[0]->vkontact }}" target="_blank"> | 187 | <a href="{{ $companies[0]->vkontact }}" target="_blank"> |
184 | <svg> | 188 | <svg> |
185 | <use xlink:href="{{ asset('images/sprite.svg#vk') }}"></use> | 189 | <use xlink:href="{{ asset('images/sprite.svg#vk') }}"></use> |
186 | </svg> | 190 | </svg> |
187 | </a> | 191 | </a> |
188 | <a href="{{ $companies[0]->telegram }}" target="_blank"> | 192 | <a href="{{ $companies[0]->telegram }}" target="_blank"> |
189 | <svg> | 193 | <svg> |
190 | <use xlink:href="{{ asset('images/sprite.svg#tg') }}"></use> | 194 | <use xlink:href="{{ asset('images/sprite.svg#tg') }}"></use> |
191 | </svg> | 195 | </svg> |
192 | </a> | 196 | </a> |
193 | </div> | 197 | </div> |
194 | </div> | 198 | </div> |
195 | </div> | 199 | </div> |
196 | <div class="footer__main-copy"> | 200 | <div class="footer__main-copy"> |
197 | <div>© 2023 — RekaMore.su</div> | 201 | <div>© 2023 — RekaMore.su</div> |
198 | <nav> | 202 | <nav> |
199 | <a href="{{ route('page', ['pages' => "Politika-konfidencialnosti"]) }}">Политика конфиденциальности</a> | 203 | <a href="{{ route('page', ['pages' => "Politika-konfidencialnosti"]) }}">Политика конфиденциальности</a> |
200 | <span></span> | 204 | <span></span> |
201 | <a href="{{ route('page', ['pages' => "Polzovatelskoe-soglashenie"]) }}">Пользовательское соглашение</a> | 205 | <a href="{{ route('page', ['pages' => "Polzovatelskoe-soglashenie"]) }}">Пользовательское соглашение</a> |
202 | </nav> | 206 | </nav> |
203 | <a href="{{ route('index') }}" class="nls" target="_blank"> | 207 | <a href="{{ route('index') }}" class="nls" target="_blank"> |
204 | <svg> | 208 | <svg> |
205 | <use xlink:href="{{ asset('images/sprite.svg#nls') }}"></use> | 209 | <use xlink:href="{{ asset('images/sprite.svg#nls') }}"></use> |
206 | </svg> | 210 | </svg> |
207 | <span> | 211 | <span> |
208 | Дизайн и разработка: | 212 | Дизайн и разработка: |
209 | <b>NoLogoStudio.ru</b> | 213 | <b>NoLogoStudio.ru</b> |
210 | </span> | 214 | </span> |
211 | </a> | 215 | </a> |
212 | </div> | 216 | </div> |
213 | </div> | 217 | </div> |
214 | </div> | 218 | </div> |
215 | </footer> | 219 | </footer> |
216 | </div> <!-- END BOTTOM WRAPPER --> | 220 | </div> <!-- END BOTTOM WRAPPER --> |
217 | 221 | ||
218 | <div hidden> <!-- BEGIN MODALS WRAPPER --> | 222 | <div hidden> <!-- BEGIN MODALS WRAPPER --> |
219 | <div class="modal"> | 223 | @include('modals.send_worker') |
220 | modal | 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 | | ||
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 | | ||
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 | </div> | 473 | </div> |
222 | </div> <!-- END MODALS WRAPPER --> | 474 | </div> <!-- END MODALS WRAPPER --> |
223 | 475 | ||
476 | |||
224 | <script src="{{ asset('js/jquery.js') }}"></script> | 477 | <script src="{{ asset('js/jquery.js') }}"></script> |
225 | <script src="{{ asset('js/jquery.maskedinput.js') }}"></script> | 478 | <script src="{{ asset('js/jquery.maskedinput.js') }}"></script> |
226 | <script src="{{ asset('js/jquery.fancybox.js') }}"></script> | 479 | <script src="{{ asset('js/jquery.fancybox.js') }}"></script> |
227 | <script src="{{ asset('js/jquery.select2.js') }}"></script> | 480 | <script src="{{ asset('js/jquery.select2.js') }}"></script> |
228 | <script src="{{ asset('js/swiper.js') }}"></script> | 481 | <script src="{{ asset('js/swiper.js') }}"></script> |
229 | <script src="{{ asset('js/script.js') }}"></script> | 482 | <script src="{{ asset('js/script.js') }}"></script> |
230 | <script> | 483 | <script> |
231 | var getUrlParameter = function getUrlParameter(sParam) { | 484 | var getUrlParameter = function getUrlParameter(sParam) { |
232 | var sPageURL = decodeURIComponent(window.location.search.substring(1)), | 485 | var sPageURL = decodeURIComponent(window.location.search.substring(1)), |
233 | sURLVariables = sPageURL.split('&'), | 486 | sURLVariables = sPageURL.split('&'), |
234 | sParameterName, | 487 | sParameterName, |
235 | i; | 488 | i; |
236 | for (i = 0; i < sURLVariables.length; i++) { | 489 | for (i = 0; i < sURLVariables.length; i++) { |
237 | sParameterName = sURLVariables[i].split('='); | 490 | sParameterName = sURLVariables[i].split('='); |
238 | if (sParameterName[0] === sParam) { | 491 | if (sParameterName[0] === sParam) { |
239 | return sParameterName[1] === undefined ? true : sParameterName[1]; | 492 | return sParameterName[1] === undefined ? true : sParameterName[1]; |
240 | } | 493 | } |
241 | } | 494 | } |
242 | }; | 495 | }; |
243 | </script> | 496 | </script> |
244 | @yield('scripts') | 497 | @yield('scripts') |
245 | </body> | 498 | </body> |
246 | </html> | 499 | </html> |
247 | 500 |
resources/views/modals/send_admin.blade.php
File was created | 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="Укажите по какому поводу вы пишите работодателю, уточните название вакансии или прикрепите ссылку на вакансию, дайте как можно больше информации. ВАЖНО не стоит писать работодателю короткий текст цитирую «Какая зарплата?, работодатель не поймет о чем речь, опишите вопрос максимально подробно»." 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> | ||
61 |
resources/views/modals/send_employer.blade.php
File was created | 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="Укажите по какому поводу вы пишите работодателю, уточните название вакансии или прикрепите ссылку на вакансию, дайте как можно больше информации. ВАЖНО не стоит писать работодателю короткий текст цитирую «Какая зарплата?, работодатель не поймет о чем речь, опишите вопрос максимально подробно»." 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> | ||
61 |
resources/views/modals/send_login.blade.php
File was created | 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 | | ||
48 | <a href="">Создать аккаунт</a> | ||
49 | </div> | ||
50 | </div> | ||
51 | </div> | ||
52 |
resources/views/modals/send_worker.blade.php
File was created | 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> | ||
49 |
resources/views/resume.blade.php
File was created | 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 | ||
455 |
resources/views/vacancies.blade.php
1 | @extends('layout.frontend', ['title' => 'Вакансии РекаМоре']) | 1 | @extends('layout.frontend', ['title' => 'Вакансии РекаМоре']) |
2 | 2 | ||
3 | @section('scripts') | 3 | @section('scripts') |
4 | <script> | 4 | <script> |
5 | console.log('Test system'); | 5 | console.log('Test system'); |
6 | $(document).on('change', '.jobs', function() { | 6 | $(document).on('change', '.jobs', function() { |
7 | var val = $(this).val(); | 7 | var val = $(this).val(); |
8 | 8 | ||
9 | console.log('Click change...'); | 9 | console.log('Click change...'); |
10 | $.ajax({ | 10 | $.ajax({ |
11 | type: "GET", | 11 | type: "GET", |
12 | url: "{{ route('vacancies') }}", | 12 | url: "{{ route('vacancies') }}", |
13 | data: "job="+val, | 13 | data: "job="+val, |
14 | success: function (data) { | 14 | success: function (data) { |
15 | console.log('Выбор должности'); | 15 | console.log('Выбор должности'); |
16 | console.log(data); | 16 | console.log(data); |
17 | $('#block_ajax').html(data); | 17 | $('#block_ajax').html(data); |
18 | }, | 18 | }, |
19 | headers: { | 19 | headers: { |
20 | 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') | 20 | 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') |
21 | }, | 21 | }, |
22 | error: function (data) { | 22 | error: function (data) { |
23 | data = JSON.stringify(data); | 23 | data = JSON.stringify(data); |
24 | console.log('Error: ' + data); | 24 | console.log('Error: ' + data); |
25 | } | 25 | } |
26 | }); | 26 | }); |
27 | }); | 27 | }); |
28 | </script> | 28 | </script> |
29 | @endsection | 29 | @endsection |
30 | 30 | ||
31 | @section('content') | 31 | @section('content') |
32 | <section class="thing"> | 32 | <section class="thing"> |
33 | <div class="container"> | 33 | <div class="container"> |
34 | <form class="thing__body"> | 34 | <form class="thing__body"> |
35 | <ul class="breadcrumbs thing__breadcrumbs"> | 35 | <ul class="breadcrumbs thing__breadcrumbs"> |
36 | <li><a href="{{ route('index') }}">Главная</a></li> | 36 | <li><a href="{{ route('index') }}">Главная</a></li> |
37 | <li><b>Вакансии</b></li> | 37 | <li><b>Вакансии</b></li> |
38 | </ul> | 38 | </ul> |
39 | <h1 class="thing__title">Вакансии</h1> | 39 | <h1 class="thing__title">Вакансии</h1> |
40 | <p class="thing__text">С другой стороны, социально-экономическое развитие не оставляет шанса для | 40 | <p class="thing__text">С другой стороны, социально-экономическое развитие не оставляет шанса для |
41 | существующих финансовых и административных условий.</p> | 41 | существующих финансовых и административных условий.</p> |
42 | <div class="select select_search thing__select"> | 42 | <div class="select select_search thing__select"> |
43 | <div class="select__icon"> | 43 | <div class="select__icon"> |
44 | <svg> | 44 | <svg> |
45 | <use xlink:href="{{ asset('images/sprite.svg#search') }}"></use> | 45 | <use xlink:href="{{ asset('images/sprite.svg#search') }}"></use> |
46 | </svg> | 46 | </svg> |
47 | </div> | 47 | </div> |
48 | <select class="js-select2 jobs" id="jobs" name="jobs"> | 48 | <select class="js-select2 jobs" id="jobs" name="jobs"> |
49 | <option value="0" disabled selected>Выберите должность</option> | 49 | <option value="0">Выберите должность</option> |
50 | @if ($Job_title->count()) | 50 | @if ($Job_title->count()) |
51 | @foreach($Job_title as $JT) | 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 | @endforeach | 53 | @endforeach |
54 | @endif | 54 | @endif |
55 | </select> | 55 | </select> |
56 | </div> | 56 | </div> |
57 | </form> | 57 | </form> |
58 | </div> | 58 | </div> |
59 | </section> | 59 | </section> |
60 | <main class="main"> | 60 | <main class="main"> |
61 | <div class="container"> | 61 | <div class="container"> |
62 | <div class="main__vacancies"> | 62 | <div class="main__vacancies"> |
63 | <h2 class="main__vacancies-title">Категории вакансий</h2> | 63 | <h2 class="main__vacancies-title">Категории вакансий</h2> |
64 | <div class="vacancies__body"> | 64 | <div class="vacancies__body"> |
65 | <!--<button class="vacancies__more button button_more button_light js-toggle js-parent-toggle"> | 65 | <!--<button class="vacancies__more button button_more button_light js-toggle js-parent-toggle"> |
66 | <span>Показать ещё</span> | 66 | <span>Показать ещё</span> |
67 | <span>Скрыть</span> | 67 | <span>Скрыть</span> |
68 | </button>--> | 68 | </button>--> |
69 | <div class="vacancies__list" id="block_ajax" name="block_ajax"> | 69 | <div class="vacancies__list" id="block_ajax" name="block_ajax"> |
70 | @php $colors = Array('#F4C4C2', '#FBF1C8', '#ECFDEF', '#F3ECF6', '#ECFDEF'); | 70 | @php $colors = Array('#F4C4C2', '#FBF1C8', '#ECFDEF', '#F3ECF6', '#ECFDEF'); |
71 | $i = 0; | 71 | $i = 0; |
72 | @endphp | 72 | @endphp |
73 | @if ($categories->count()) | 73 | @if ($categories->count()) |
74 | @foreach ($categories as $cat) | 74 | @foreach ($categories as $cat) |
75 | <a href="{{ route('list-vacancies', ['categories' => $cat->id]) }}" class="vacancies__item"> | 75 | <a href="{{ route('list-vacancies', ['categories' => $cat->id]) }}" class="vacancies__item"> |
76 | <span style="border-color:{{$colors[$i]}}"> | 76 | <span style="border-color:{{$colors[$i]}}"> |
77 | <b>{{ $cat->name }}</b> | 77 | <b>{{ $cat->name }}</b> |
78 | <u>{{ $cat->min_salary }} — {{ $cat->max_salary }} ₽</u> | 78 | <u>{{ $cat->min_salary }} — {{ $cat->max_salary }} ₽</u> |
79 | <i>Вакансий: <span>{{ $cat->cnt }}</span></i> | 79 | <i>Вакансий: <span>{{ $cat->cnt }}</span></i> |
80 | </span> | 80 | </span> |
81 | </a> | 81 | </a> |
82 | @php $i++; | 82 | @php $i++; |
83 | if ($i > 4) {$i = 0;} | 83 | if ($i > 4) {$i = 0;} |
84 | @endphp | 84 | @endphp |
85 | @endforeach | 85 | @endforeach |
86 | @else | 86 | @else |
87 | Тут пока нет никаких вакансий | 87 | Тут пока нет никаких вакансий |
88 | @endif | 88 | @endif |
89 | </div> | 89 | </div> |
90 | </div> | 90 | </div> |
91 | </div> | 91 | </div> |
92 | </div> | 92 | </div> |
93 | </main> | 93 | </main> |
94 | </div> | 94 | </div> |
95 | @endsection | 95 | @endsection |
96 | 96 |
resources/views/worker.blade.php
File was created | 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="Текст отзыва…" required></textarea> | ||
265 | <button type="submit" class="button">Оставить отзыв</button> | ||
266 | </div> | ||
267 | </div> | ||
268 | </div> | ||
269 | </div> | ||
270 | </main> | ||
271 | </div> | ||
272 | @endsection | ||
273 |
routes/web.php
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | use App\Http\Controllers\AdEmployerController; | 3 | use App\Http\Controllers\AdEmployerController; |
4 | use App\Http\Controllers\Admin\AdminController; | 4 | use App\Http\Controllers\Admin\AdminController; |
5 | use App\Http\Controllers\Admin\CategoryController; | 5 | use App\Http\Controllers\Admin\CategoryController; |
6 | use App\Http\Controllers\Admin\CategoryEmpController; | 6 | use App\Http\Controllers\Admin\CategoryEmpController; |
7 | use App\Http\Controllers\Admin\EducationController; | 7 | use App\Http\Controllers\Admin\EducationController; |
8 | use App\Http\Controllers\Admin\EmployersController; | 8 | use App\Http\Controllers\Admin\EmployersController; |
9 | use App\Http\Controllers\EmployerController as FrontEmployersController; | 9 | use App\Http\Controllers\EmployerController as FrontEmployersController; |
10 | use App\Http\Controllers\Admin\InfoBloksController; | 10 | use App\Http\Controllers\Admin\InfoBloksController; |
11 | use App\Http\Controllers\Admin\JobTitlesController; | 11 | use App\Http\Controllers\Admin\JobTitlesController; |
12 | use App\Http\Controllers\Admin\UsersController; | 12 | use App\Http\Controllers\Admin\UsersController; |
13 | use App\Http\Controllers\Admin\WorkersController; | 13 | use App\Http\Controllers\Admin\WorkersController; |
14 | use App\Http\Controllers\Auth\ForgotPasswordController; | 14 | use App\Http\Controllers\Auth\ForgotPasswordController; |
15 | use App\Http\Controllers\Auth\LoginController; | 15 | use App\Http\Controllers\Auth\LoginController; |
16 | use App\Http\Controllers\Auth\RegisterController; | 16 | use App\Http\Controllers\Auth\RegisterController; |
17 | use App\Http\Controllers\CKEditorController; | 17 | use App\Http\Controllers\CKEditorController; |
18 | use App\Http\Controllers\MediaController; | 18 | use App\Http\Controllers\MediaController; |
19 | use App\Http\Controllers\WorkerController; | 19 | use App\Http\Controllers\WorkerController; |
20 | use App\Models\User; | 20 | use App\Models\User; |
21 | use App\Http\Controllers\MainController; | 21 | use App\Http\Controllers\MainController; |
22 | use App\Http\Controllers\HomeController; | 22 | use App\Http\Controllers\HomeController; |
23 | use Illuminate\Support\Facades\Route; | 23 | use Illuminate\Support\Facades\Route; |
24 | use App\Http\Controllers\Admin\CompanyController; | 24 | use App\Http\Controllers\Admin\CompanyController; |
25 | use App\Http\Controllers\Admin\Ad_EmployersController; | 25 | use App\Http\Controllers\Admin\Ad_EmployersController; |
26 | use App\Http\Controllers\Admin\MsgAnswersController; | 26 | use App\Http\Controllers\Admin\MsgAnswersController; |
27 | use App\Http\Controllers\Admin\GroupsController; | 27 | use App\Http\Controllers\Admin\GroupsController; |
28 | use App\Http\Controllers\PagesController; | 28 | use App\Http\Controllers\PagesController; |
29 | use Illuminate\Support\Facades\Storage; | 29 | use Illuminate\Support\Facades\Storage; |
30 | use App\Http\Controllers\EmployerController; | 30 | use App\Http\Controllers\EmployerController; |
31 | use App\Http\Controllers\CompanyController as FrontCompanyController; | 31 | use App\Http\Controllers\CompanyController as FrontCompanyController; |
32 | 32 | ||
33 | 33 | ||
34 | /* | 34 | /* |
35 | |-------------------------------------------------------------------------- | 35 | |-------------------------------------------------------------------------- |
36 | | Web Routes | 36 | | Web Routes |
37 | |-------------------------------------------------------------------------- | 37 | |-------------------------------------------------------------------------- |
38 | | | 38 | | |
39 | | Here is where you can register web routes for your application. These | 39 | | Here is where you can register web routes for your application. These |
40 | | routes are loaded by the RouteServiceProvider within a group which | 40 | | routes are loaded by the RouteServiceProvider within a group which |
41 | | contains the "web" middleware group. Now create something great! | 41 | | contains the "web" middleware group. Now create something great! |
42 | | | 42 | | |
43 | */ | 43 | */ |
44 | /* | 44 | /* |
45 | Route::get('/', function () { | 45 | Route::get('/', function () { |
46 | return view('welcome'); | 46 | return view('welcome'); |
47 | })->name('index'); | 47 | })->name('index'); |
48 | */ | 48 | */ |
49 | Route::get('/', [MainController::class, 'index'])->name('index'); | 49 | Route::get('/', [MainController::class, 'index'])->name('index'); |
50 | 50 | ||
51 | //Роуты авторизации, регистрации, восстановления, аутентификации | 51 | //Роуты авторизации, регистрации, восстановления, аутентификации |
52 | Auth::routes(['verify' => true]); | 52 | Auth::routes(['verify' => true]); |
53 | 53 | ||
54 | // роуты регистрации, авторизации, восстановления пароля, верификации почты | 54 | // роуты регистрации, авторизации, восстановления пароля, верификации почты |
55 | /*Route::group([ | 55 | /*Route::group([ |
56 | 'as' => 'auth.', //имя маршрута, например auth.index | 56 | 'as' => 'auth.', //имя маршрута, например auth.index |
57 | 'prefix' => 'auth', // префикс маршрута, например, auth/index | 57 | 'prefix' => 'auth', // префикс маршрута, например, auth/index |
58 | ], function () { | 58 | ], function () { |
59 | //форма регистрации | 59 | //форма регистрации |
60 | Route::get('register', [RegisterController::class, 'register'])->name('register'); | 60 | Route::get('register', [RegisterController::class, 'register'])->name('register'); |
61 | 61 | ||
62 | //создание пользователя | 62 | //создание пользователя |
63 | Route::post('register', [RegisterController::class, 'create'])->name('create'); | 63 | Route::post('register', [RegisterController::class, 'create'])->name('create'); |
64 | 64 | ||
65 | //форма входа авторизации | 65 | //форма входа авторизации |
66 | Route::get('login', [LoginController::class, 'login'])->name('login'); | 66 | Route::get('login', [LoginController::class, 'login'])->name('login'); |
67 | 67 | ||
68 | //аутентификация | 68 | //аутентификация |
69 | Route::post('login', [LoginController::class, 'authenticate'])->name('auth'); | 69 | Route::post('login', [LoginController::class, 'authenticate'])->name('auth'); |
70 | 70 | ||
71 | //выход | 71 | //выход |
72 | Route::get('logout', [LoginController::class, 'logout'])->name('logout'); | 72 | Route::get('logout', [LoginController::class, 'logout'])->name('logout'); |
73 | 73 | ||
74 | //форма ввода адреса почты | 74 | //форма ввода адреса почты |
75 | Route::get('forgot-password', [ForgotPasswordController::class, 'form'])->name('forgot-form'); | 75 | Route::get('forgot-password', [ForgotPasswordController::class, 'form'])->name('forgot-form'); |
76 | 76 | ||
77 | //письмо на почту | 77 | //письмо на почту |
78 | Route::post('forgot-password', [ForgotPasswordController::class, 'mail'])->name('forgot-mail'); | 78 | Route::post('forgot-password', [ForgotPasswordController::class, 'mail'])->name('forgot-mail'); |
79 | 79 | ||
80 | //форма восстановления пароля | 80 | //форма восстановления пароля |
81 | Route::get('reset-password/token/{token}/email/{email}', | 81 | Route::get('reset-password/token/{token}/email/{email}', |
82 | [ResetPasswordController::class, 'form'] | 82 | [ResetPasswordController::class, 'form'] |
83 | )->name('reset-form'); | 83 | )->name('reset-form'); |
84 | 84 | ||
85 | //восстановление пароля | 85 | //восстановление пароля |
86 | Route::post('reset-password', | 86 | Route::post('reset-password', |
87 | [ResetPasswordController::class, 'reset'] | 87 | [ResetPasswordController::class, 'reset'] |
88 | )->name('reset-password'); | 88 | )->name('reset-password'); |
89 | 89 | ||
90 | //сообщение о необходимости проверки адреса почты | 90 | //сообщение о необходимости проверки адреса почты |
91 | Route::get('verify-message', [VerifyEmailController::class, 'message'])->name('verify-message'); | 91 | Route::get('verify-message', [VerifyEmailController::class, 'message'])->name('verify-message'); |
92 | 92 | ||
93 | //подтверждение адреса почты нового пользователя | 93 | //подтверждение адреса почты нового пользователя |
94 | Route::get('verify-email/token/{token}/id/{id}', [VerifyEmailController::class, 'verify']) | 94 | Route::get('verify-email/token/{token}/id/{id}', [VerifyEmailController::class, 'verify']) |
95 | ->where('token', '[a-f0-9]{32}') | 95 | ->where('token', '[a-f0-9]{32}') |
96 | ->where('id', '[0-9]+') | 96 | ->where('id', '[0-9]+') |
97 | ->name('verify-email'); | 97 | ->name('verify-email'); |
98 | });*/ | 98 | });*/ |
99 | 99 | ||
100 | //Личный кабинет пользователя | 100 | //Личный кабинет пользователя |
101 | Route::get('/home', [HomeController::class, 'index'])->name('home'); | 101 | Route::get('/home', [HomeController::class, 'index'])->name('home'); |
102 | 102 | ||
103 | /* | 103 | /* |
104 | Route::post('resend/verification-email', function (\Illuminate\Http\Request $request) { | 104 | Route::post('resend/verification-email', function (\Illuminate\Http\Request $request) { |
105 | $user = User::where('email',$request->input('email'))->first(); | 105 | $user = User::where('email',$request->input('email'))->first(); |
106 | 106 | ||
107 | $user->sendEmailVerificationNotification(); | 107 | $user->sendEmailVerificationNotification(); |
108 | 108 | ||
109 | return 'your response'; | 109 | return 'your response'; |
110 | })->middleware('throttle:6,1')->name('verification.resend'); | 110 | })->middleware('throttle:6,1')->name('verification.resend'); |
111 | */ | 111 | */ |
112 | 112 | ||
113 | // Авторизация, регистрация в админку | 113 | // Авторизация, регистрация в админку |
114 | Route::group([ | 114 | Route::group([ |
115 | 'as' => 'admin.', // имя маршрута, например auth.index | 115 | 'as' => 'admin.', // имя маршрута, например auth.index |
116 | 'prefix' => 'admin', // префикс маршрута, например auth/index | 116 | 'prefix' => 'admin', // префикс маршрута, например auth/index |
117 | 'middleware' => ['guest'], | 117 | 'middleware' => ['guest'], |
118 | ], function () { | 118 | ], function () { |
119 | // Форма регистрации | 119 | // Форма регистрации |
120 | Route::get('register', [AdminController::class, 'register'])->name('register'); | 120 | Route::get('register', [AdminController::class, 'register'])->name('register'); |
121 | // Создание пользователя | 121 | // Создание пользователя |
122 | Route::post('register', [AdminController::class, 'create'])->name('create'); | 122 | Route::post('register', [AdminController::class, 'create'])->name('create'); |
123 | 123 | ||
124 | //Форма входа | 124 | //Форма входа |
125 | Route::get('login', [AdminController::class, 'login'])->name('login'); | 125 | Route::get('login', [AdminController::class, 'login'])->name('login'); |
126 | 126 | ||
127 | // аутентификация | 127 | // аутентификация |
128 | Route::post('login', [AdminController::class, 'autenticate'])->name('auth'); | 128 | Route::post('login', [AdminController::class, 'autenticate'])->name('auth'); |
129 | 129 | ||
130 | }); | 130 | }); |
131 | 131 | ||
132 | // Личный кабинет админки | 132 | // Личный кабинет админки |
133 | Route::group([ | 133 | Route::group([ |
134 | 'as' => 'admin.', // имя маршрута, например auth.index | 134 | 'as' => 'admin.', // имя маршрута, например auth.index |
135 | 'prefix' => 'admin', // префикс маршрута, например auth/index | 135 | 'prefix' => 'admin', // префикс маршрута, например auth/index |
136 | 'middleware' => ['auth'], ['admin'], | 136 | 'middleware' => ['auth'], ['admin'], |
137 | ], function() { | 137 | ], function() { |
138 | 138 | ||
139 | // выход | 139 | // выход |
140 | Route::get('logout', [AdminController::class, 'logout'])->name('logout'); | 140 | Route::get('logout', [AdminController::class, 'logout'])->name('logout'); |
141 | 141 | ||
142 | // кабинет главная страница | 142 | // кабинет главная страница |
143 | Route::get('cabinet', [AdminController::class, 'index'])->name('index'); | 143 | Route::get('cabinet', [AdminController::class, 'index'])->name('index'); |
144 | 144 | ||
145 | // кабинет профиль админа - форма | 145 | // кабинет профиль админа - форма |
146 | Route::get('profile', [AdminController::class, 'profile'])->name('profile'); | 146 | Route::get('profile', [AdminController::class, 'profile'])->name('profile'); |
147 | // кабинет профиль админа - сохранение формы | 147 | // кабинет профиль админа - сохранение формы |
148 | Route::post('profile', [AdminController::class, 'store_profile'])->name('store_profile'); | 148 | Route::post('profile', [AdminController::class, 'store_profile'])->name('store_profile'); |
149 | 149 | ||
150 | //кабинет сообщения админа | 150 | //кабинет сообщения админа |
151 | //Route::get('messages', [AdminController::class, 'profile'])->name('profile'); | 151 | //Route::get('messages', [AdminController::class, 'profile'])->name('profile'); |
152 | 152 | ||
153 | 153 | ||
154 | // кабинет профиль - форма пароли | 154 | // кабинет профиль - форма пароли |
155 | Route::get('password', [AdminController::class, 'profile_password'])->name('password'); | 155 | Route::get('password', [AdminController::class, 'profile_password'])->name('password'); |
156 | // кабинет профиль - сохранение формы пароля | 156 | // кабинет профиль - сохранение формы пароля |
157 | Route::post('password', [AdminController::class, 'profile_password_new'])->name('password'); | 157 | Route::post('password', [AdminController::class, 'profile_password_new'])->name('password'); |
158 | 158 | ||
159 | 159 | ||
160 | // кабинет профиль пользователя - форма | 160 | // кабинет профиль пользователя - форма |
161 | Route::get('user-profile/{user}', [AdminController::class, 'profile_user'])->name('user-profile'); | 161 | Route::get('user-profile/{user}', [AdminController::class, 'profile_user'])->name('user-profile'); |
162 | // кабинет профиль пользователя - сохранение формы | 162 | // кабинет профиль пользователя - сохранение формы |
163 | Route::post('user-profile/{user}', [AdminController::class, 'store_profile_user'])->name('user-store_profile'); | 163 | Route::post('user-profile/{user}', [AdminController::class, 'store_profile_user'])->name('user-store_profile'); |
164 | 164 | ||
165 | // кабинет профиль работодатель - форма | 165 | // кабинет профиль работодатель - форма |
166 | Route::get('employer-profile/{employer}', [EmployersController::class, 'form_update_employer'])->name('employer-profile'); | 166 | Route::get('employer-profile/{employer}', [EmployersController::class, 'form_update_employer'])->name('employer-profile'); |
167 | // кабинет профиль работодатель - сохранение формы | 167 | // кабинет профиль работодатель - сохранение формы |
168 | Route::post('employer-profile/{employer}', [EmployersController::class, 'update_employer'])->name('update-employer-profile'); | 168 | Route::post('employer-profile/{employer}', [EmployersController::class, 'update_employer'])->name('update-employer-profile'); |
169 | // кабинет удаление профиль работодателя и юзера | 169 | // кабинет удаление профиль работодателя и юзера |
170 | Route::delete('employers/delete/{employer}/{user}', [EmployersController::class, 'delete_employer'])->name('delete-employer'); | 170 | Route::delete('employers/delete/{employer}/{user}', [EmployersController::class, 'delete_employer'])->name('delete-employer'); |
171 | 171 | ||
172 | // кабинет профиль работник - форма | 172 | // кабинет профиль работник - форма |
173 | Route::get('worker-profile/add/{user}', [WorkersController::class, 'form_add_worker'])->name('worker-profile-add'); | 173 | Route::get('worker-profile/add/{user}', [WorkersController::class, 'form_add_worker'])->name('worker-profile-add'); |
174 | Route::post('worker-profile/add/{user}', [WorkersController::class, 'form_store_worker'])->name('worker-profile-store'); | 174 | Route::post('worker-profile/add/{user}', [WorkersController::class, 'form_store_worker'])->name('worker-profile-store'); |
175 | Route::get('worker-profile/{worker}', [WorkersController::class, 'form_edit_worker'])->name('worker-profile-edit'); | 175 | Route::get('worker-profile/{worker}', [WorkersController::class, 'form_edit_worker'])->name('worker-profile-edit'); |
176 | // кабинет профиль работник - сохранение формы | 176 | // кабинет профиль работник - сохранение формы |
177 | Route::post('worker-profile/{worker}', [WorkersController::class, 'form_update_worker'])->name('worker-profile-update'); | 177 | Route::post('worker-profile/{worker}', [WorkersController::class, 'form_update_worker'])->name('worker-profile-update'); |
178 | 178 | ||
179 | // Медиа | 179 | // Медиа |
180 | Route::get('media', [MediaController::class, 'index'])->name('media'); | 180 | Route::get('media', [MediaController::class, 'index'])->name('media'); |
181 | Route::delete('media/{media}', [MediaController::class, 'delete'])->name('delete-media'); | 181 | Route::delete('media/{media}', [MediaController::class, 'delete'])->name('delete-media'); |
182 | 182 | ||
183 | // кабинет настройки сайта - форма | 183 | // кабинет настройки сайта - форма |
184 | Route::get('config', [AdminController::class, 'config_form'])->name('config'); | 184 | Route::get('config', [AdminController::class, 'config_form'])->name('config'); |
185 | // кабинет настройки сайта сохранение формы | 185 | // кабинет настройки сайта сохранение формы |
186 | Route::post('config', [AdminController::class, 'store_config'])->name('store_config'); | 186 | Route::post('config', [AdminController::class, 'store_config'])->name('store_config'); |
187 | 187 | ||
188 | // кабинет - пользователи | 188 | // кабинет - пользователи |
189 | Route::get('users', [UsersController::class, 'index'])->name('users'); | 189 | Route::get('users', [UsersController::class, 'index'])->name('users'); |
190 | 190 | ||
191 | // кабинет - пользователи | 191 | // кабинет - пользователи |
192 | Route::get('admin-users', [AdminController::class, 'index_admin'])->name('admin-users'); | 192 | Route::get('admin-users', [AdminController::class, 'index_admin'])->name('admin-users'); |
193 | 193 | ||
194 | // кабинет - работодатели | 194 | // кабинет - работодатели |
195 | Route::get('employers', [EmployersController::class, 'index'])->name('employers'); | 195 | Route::get('employers', [EmployersController::class, 'index'])->name('employers'); |
196 | 196 | ||
197 | Route::get('employers/comment/{employer}', [EmployersController::class, 'comment_read'])->name('comment-employer'); | 197 | Route::get('employers/comment/{employer}', [EmployersController::class, 'comment_read'])->name('comment-employer'); |
198 | 198 | ||
199 | Route::get('flot/add/{employer}', [EmployersController::class, 'add_flot'])->name('flot_add'); | 199 | Route::get('flot/add/{employer}', [EmployersController::class, 'add_flot'])->name('flot_add'); |
200 | Route::post('flot/add', [EmployersController::class, 'save_add_flot'])->name('flot_add_save'); | 200 | Route::post('flot/add', [EmployersController::class, 'save_add_flot'])->name('flot_add_save'); |
201 | Route::get('flot/{flot}/{employer}', [EmployersController::class, 'edit_flot'])->name('flot'); | 201 | Route::get('flot/{flot}/{employer}', [EmployersController::class, 'edit_flot'])->name('flot'); |
202 | Route::put('flot/{flot}', [EmployersController::class, 'edit_save_flot'])->name('flot_edit'); | 202 | Route::put('flot/{flot}', [EmployersController::class, 'edit_save_flot'])->name('flot_edit'); |
203 | Route::get('flot/{flot}/{employer_id}/delete', [EmployersController::class, 'delete_flot'])->name('flot_delete'); | 203 | Route::get('flot/{flot}/{employer_id}/delete', [EmployersController::class, 'delete_flot'])->name('flot_delete'); |
204 | 204 | ||
205 | // кабинет - соискатели | 205 | // кабинет - соискатели |
206 | Route::get('workers', [WorkersController::class, 'index'])->name('workers'); | 206 | Route::get('workers', [WorkersController::class, 'index'])->name('workers'); |
207 | 207 | ||
208 | // кабинет - база данных | 208 | // кабинет - база данных |
209 | Route::get('basedata', [UsersController::class, 'index_bd'])->name('basedata'); | 209 | Route::get('basedata', [UsersController::class, 'index_bd'])->name('basedata'); |
210 | Route::get('basedata/add', [UsersController::class, 'add_bd'])->name('add-basedata'); | 210 | Route::get('basedata/add', [UsersController::class, 'add_bd'])->name('add-basedata'); |
211 | Route::post('basedata/add', [UsersController::class, 'add_store_bd'])->name('add-store-basedata'); | 211 | Route::post('basedata/add', [UsersController::class, 'add_store_bd'])->name('add-store-basedata'); |
212 | Route::get('basedata/edit/{user}', [UsersController::class, 'edit_bd'])->name('edit-basedata'); | 212 | Route::get('basedata/edit/{user}', [UsersController::class, 'edit_bd'])->name('edit-basedata'); |
213 | Route::put('basedata/edit/{user}', [UsersController::class, 'update_bd'])->name('update-basedata'); | 213 | Route::put('basedata/edit/{user}', [UsersController::class, 'update_bd'])->name('update-basedata'); |
214 | Route::delete('basedata/delete/{user}', [UsersController::class, 'destroy_bd'])->name('delete-basedata'); | 214 | Route::delete('basedata/delete/{user}', [UsersController::class, 'destroy_bd'])->name('delete-basedata'); |
215 | Route::get('basedata/doc/{user}', [UsersController::class, 'doc_bd'])->name('doc-basedata'); | 215 | Route::get('basedata/doc/{user}', [UsersController::class, 'doc_bd'])->name('doc-basedata'); |
216 | 216 | ||
217 | // кабинет - вакансии | 217 | // кабинет - вакансии |
218 | Route::get('ad-employers', [Ad_EmployersController::class, 'index'])->name('ad-employers'); | 218 | Route::get('ad-employers', [Ad_EmployersController::class, 'index'])->name('ad-employers'); |
219 | Route::get('ad-employers/add', [Ad_EmployersController::class, 'create'])->name('add-ad-employers'); | 219 | Route::get('ad-employers/add', [Ad_EmployersController::class, 'create'])->name('add-ad-employers'); |
220 | Route::post('ad-employers/add', [Ad_EmployersController::class, 'store'])->name('store-ad-employers'); | 220 | Route::post('ad-employers/add', [Ad_EmployersController::class, 'store'])->name('store-ad-employers'); |
221 | Route::get('ad-employers/edit/{ad_employer}', [Ad_EmployersController::class, 'edit'])->name('edit-ad-employers'); | 221 | Route::get('ad-employers/edit/{ad_employer}', [Ad_EmployersController::class, 'edit'])->name('edit-ad-employers'); |
222 | Route::post('ad-employers/edit/{ad_employer}', [Ad_EmployersController::class, 'update'])->name('update-ad-employers'); | 222 | Route::post('ad-employers/edit/{ad_employer}', [Ad_EmployersController::class, 'update'])->name('update-ad-employers'); |
223 | Route::delete('ad-employers/delete/{ad_employer}', [Ad_EmployersController::class, 'destroy'])->name('delete-ad-employer'); | 223 | Route::delete('ad-employers/delete/{ad_employer}', [Ad_EmployersController::class, 'destroy'])->name('delete-ad-employer'); |
224 | 224 | ||
225 | // Редактирование должности в вакансии | 225 | // Редактирование должности в вакансии |
226 | Route::put('update-jobs/{ad_jobs}', [Ad_EmployersController::class, 'update_ad_jobs'])->name('update_jobs'); | 226 | Route::put('update-jobs/{ad_jobs}', [Ad_EmployersController::class, 'update_ad_jobs'])->name('update_jobs'); |
227 | Route::get('edit-jobs/{ad_jobs}', [Ad_EmployersController::class, 'edit_jobs'])->name('edit_jobs'); | 227 | Route::get('edit-jobs/{ad_jobs}', [Ad_EmployersController::class, 'edit_jobs'])->name('edit_jobs'); |
228 | 228 | ||
229 | 229 | ||
230 | // кабинет - категории | 230 | // кабинет - категории |
231 | //Route::get('categories', [AdminController::class, 'index'])->name('categories'); | 231 | //Route::get('categories', [AdminController::class, 'index'])->name('categories'); |
232 | /* | 232 | /* |
233 | * CRUD-операции над Справочником Категории | 233 | * CRUD-операции над Справочником Категории |
234 | */ | 234 | */ |
235 | Route::resource('categories', CategoryController::class, ['except' => ['show']]); | 235 | Route::resource('categories', CategoryController::class, ['except' => ['show']]); |
236 | 236 | ||
237 | // CRUD-операции над справочником Категории для работодателей | 237 | // CRUD-операции над справочником Категории для работодателей |
238 | Route::resource('category-emp', CategoryEmpController::class, ['except' => ['show']]); | 238 | Route::resource('category-emp', CategoryEmpController::class, ['except' => ['show']]); |
239 | 239 | ||
240 | // CRUD-операции над справочником Образование | 240 | // CRUD-операции над справочником Образование |
241 | Route::resource('education', EducationController::class, ['except' => ['show']]); | 241 | Route::resource('education', EducationController::class, ['except' => ['show']]); |
242 | 242 | ||
243 | Route::get('rename-program-education', [EducationController::class, 'rename_program'])->name('rename-program-education'); | 243 | Route::get('rename-program-education', [EducationController::class, 'rename_program'])->name('rename-program-education'); |
244 | Route::get('program-education', [EducationController::class, 'add_program'])->name('add-program-education'); | 244 | Route::get('program-education', [EducationController::class, 'add_program'])->name('add-program-education'); |
245 | Route::post('program-education', [EducationController::class, 'store_program'])->name('store-program-education'); | 245 | Route::post('program-education', [EducationController::class, 'store_program'])->name('store-program-education'); |
246 | 246 | ||
247 | Route::get('program-education/edit/{program}/{education}', [EducationController::class, 'edit_program'])->name('edit-program-education'); | 247 | Route::get('program-education/edit/{program}/{education}', [EducationController::class, 'edit_program'])->name('edit-program-education'); |
248 | Route::post('program-education/edit/{program}/{education}', [EducationController::class, 'update_program'])->name('update-program-education'); | 248 | Route::post('program-education/edit/{program}/{education}', [EducationController::class, 'update_program'])->name('update-program-education'); |
249 | 249 | ||
250 | Route::get('program-education/delete/{program}/{education}', [EducationController::class, 'delete_program'])->name('delete-program-education'); | 250 | Route::get('program-education/delete/{program}/{education}', [EducationController::class, 'delete_program'])->name('delete-program-education'); |
251 | 251 | ||
252 | //Route::get('job-titles', [AdminController::class, 'index'])->name('job-titles'); | 252 | //Route::get('job-titles', [AdminController::class, 'index'])->name('job-titles'); |
253 | /* | 253 | /* |
254 | * кабинет - CRUD-операции по справочнику должности | 254 | * кабинет - CRUD-операции по справочнику должности |
255 | * | 255 | * |
256 | */ | 256 | */ |
257 | Route::resource('job-titles', JobTitlesController::class, ['except' => ['show']]); | 257 | Route::resource('job-titles', JobTitlesController::class, ['except' => ['show']]); |
258 | 258 | ||
259 | // кабинет - сообщения (чтение чужих) | 259 | // кабинет - сообщения (чтение чужих) |
260 | Route::get('messages', [MsgAnswersController::class, 'messages'])->name('messages'); | 260 | Route::get('messages', [MsgAnswersController::class, 'messages'])->name('messages'); |
261 | // кабинет - просмотр сообщения чужого (чтение) | 261 | // кабинет - просмотр сообщения чужого (чтение) |
262 | Route::get('messages/{message}', [MsgAnswersController::class, 'read_message'])->name('read-message'); | 262 | Route::get('messages/{message}', [MsgAnswersController::class, 'read_message'])->name('read-message'); |
263 | 263 | ||
264 | // кабинет - сообщения (админские) | 264 | // кабинет - сообщения (админские) |
265 | Route::get('admin-messages', [MsgAnswersController::class, 'admin_messages'])->name('admin-messages'); | 265 | Route::get('admin-messages', [MsgAnswersController::class, 'admin_messages'])->name('admin-messages'); |
266 | // кабинет - сообщения (админские) | 266 | // кабинет - сообщения (админские) |
267 | Route::post('admin-messages', [MsgAnswersController::class, 'admin_messages_post'])->name('admin-messages-post'); | 267 | Route::post('admin-messages', [MsgAnswersController::class, 'admin_messages_post'])->name('admin-messages-post'); |
268 | // кабинет - sql - конструкция запросов | 268 | // кабинет - sql - конструкция запросов |
269 | Route::get('messages-sql', [MsgAnswersController::class, 'messages_sql'])->name('messages-sql'); | 269 | Route::get('messages-sql', [MsgAnswersController::class, 'messages_sql'])->name('messages-sql'); |
270 | 270 | ||
271 | /* | 271 | /* |
272 | * Расписанный подход в описании каждой директорий групп пользователей. | 272 | * Расписанный подход в описании каждой директорий групп пользователей. |
273 | */ | 273 | */ |
274 | // кабинет - группы пользователей | 274 | // кабинет - группы пользователей |
275 | Route::get('groups', [GroupsController::class, 'index'])->name('groups'); | 275 | Route::get('groups', [GroupsController::class, 'index'])->name('groups'); |
276 | // кабинет - добавление форма группы пользователей | 276 | // кабинет - добавление форма группы пользователей |
277 | Route::get('groups/add', [GroupsController::class, 'add'])->name('add-group'); | 277 | Route::get('groups/add', [GroupsController::class, 'add'])->name('add-group'); |
278 | // кабинет - сохранение формы группы пользователей | 278 | // кабинет - сохранение формы группы пользователей |
279 | Route::post('groups/add', [GroupsController::class, 'store'])->name('add-group-store'); | 279 | Route::post('groups/add', [GroupsController::class, 'store'])->name('add-group-store'); |
280 | // кабинет - редактирование форма группы пользователей | 280 | // кабинет - редактирование форма группы пользователей |
281 | Route::get('groups/edit/{group}', [GroupsController::class, 'edit'])->name('edit-group'); | 281 | Route::get('groups/edit/{group}', [GroupsController::class, 'edit'])->name('edit-group'); |
282 | // кабинет - сохранение редактированной формы группы пользователей | 282 | // кабинет - сохранение редактированной формы группы пользователей |
283 | Route::post('groups/edit/{group}', [GroupsController::class, 'update'])->name('update-group'); | 283 | Route::post('groups/edit/{group}', [GroupsController::class, 'update'])->name('update-group'); |
284 | // кабинет - удаление группы пользователей | 284 | // кабинет - удаление группы пользователей |
285 | Route::delete('groups/delete/{group}', [GroupsController::class, 'destroy'])->name('delete-group'); | 285 | Route::delete('groups/delete/{group}', [GroupsController::class, 'destroy'])->name('delete-group'); |
286 | 286 | ||
287 | 287 | ||
288 | // кабинет - список админов | 288 | // кабинет - список админов |
289 | Route::get('group-admin', [AdminController::class, 'index'])->name('group-admin'); | 289 | Route::get('group-admin', [AdminController::class, 'index'])->name('group-admin'); |
290 | 290 | ||
291 | 291 | ||
292 | /////редактор////// кабинет - редактор сайта//////////////////////// | 292 | /////редактор////// кабинет - редактор сайта//////////////////////// |
293 | Route::get('editor-site', function() { | 293 | Route::get('editor-site', function() { |
294 | return view('admin.editor.index'); | 294 | return view('admin.editor.index'); |
295 | })->name('editor-site'); | 295 | })->name('editor-site'); |
296 | 296 | ||
297 | 297 | ||
298 | // кабинет - редактор шапки-футера сайта | 298 | // кабинет - редактор шапки-футера сайта |
299 | Route::get('edit-blocks', [CompanyController::class, 'editblocks'])->name('edit-blocks'); | 299 | Route::get('edit-blocks', [CompanyController::class, 'editblocks'])->name('edit-blocks'); |
300 | Route::get('edit-bloks/add', [CompanyController::class, 'editblock_add'])->name('add-block'); | 300 | Route::get('edit-bloks/add', [CompanyController::class, 'editblock_add'])->name('add-block'); |
301 | Route::post('edit-bloks/add', [CompanyController::class, 'editblock_store'])->name('add-block-store'); | 301 | Route::post('edit-bloks/add', [CompanyController::class, 'editblock_store'])->name('add-block-store'); |
302 | Route::get('edit-bloks/ajax', [CompanyController::class, 'editblock_ajax'])->name('ajax.block'); | 302 | Route::get('edit-bloks/ajax', [CompanyController::class, 'editblock_ajax'])->name('ajax.block'); |
303 | Route::get('edit-bloks/edit/{block}', [CompanyController::class, 'editblock_edit'])->name('edit-block'); | 303 | Route::get('edit-bloks/edit/{block}', [CompanyController::class, 'editblock_edit'])->name('edit-block'); |
304 | Route::put('edit-bloks/edit/{block}', [CompanyController::class, 'editblock_update'])->name('update-block'); | 304 | Route::put('edit-bloks/edit/{block}', [CompanyController::class, 'editblock_update'])->name('update-block'); |
305 | Route::delete('edit-bloks/delete/{block}', [CompanyController::class, 'editblock_destroy'])->name('delete-block'); | 305 | Route::delete('edit-bloks/delete/{block}', [CompanyController::class, 'editblock_destroy'])->name('delete-block'); |
306 | 306 | ||
307 | 307 | ||
308 | // кабинет - редактор должности на главной | 308 | // кабинет - редактор должности на главной |
309 | Route::get('job-titles-main', [CompanyController::class, 'job_titles_main'])->name('job-titles-main'); | 309 | Route::get('job-titles-main', [CompanyController::class, 'job_titles_main'])->name('job-titles-main'); |
310 | 310 | ||
311 | // кабинет - редактор работодатели на главной | 311 | // кабинет - редактор работодатели на главной |
312 | Route::get('employers-main', [CompanyController::class, 'employers_main'])->name('employers-main'); | 312 | Route::get('employers-main', [CompanyController::class, 'employers_main'])->name('employers-main'); |
313 | 313 | ||
314 | 314 | ||
315 | // кабинет - редактор seo-сайта | 315 | // кабинет - редактор seo-сайта |
316 | Route::get('editor-seo', [CompanyController::class, 'editor_seo'])->name('editor-seo'); | 316 | Route::get('editor-seo', [CompanyController::class, 'editor_seo'])->name('editor-seo'); |
317 | Route::get('editor-seo/add', [CompanyController::class, 'editor_seo_add'])->name('add-seo'); | 317 | Route::get('editor-seo/add', [CompanyController::class, 'editor_seo_add'])->name('add-seo'); |
318 | Route::post('editor-seo/add', [CompanyController::class, 'editor_seo_store'])->name('add-seo-store'); | 318 | Route::post('editor-seo/add', [CompanyController::class, 'editor_seo_store'])->name('add-seo-store'); |
319 | Route::get('editor-seo/ajax', [CompanyController::class, 'editor_seo_ajax'])->name('ajax.seo'); | 319 | Route::get('editor-seo/ajax', [CompanyController::class, 'editor_seo_ajax'])->name('ajax.seo'); |
320 | Route::get('editor-seo/edit/{page}', [CompanyController::class, 'editor_seo_edit'])->name('edit-seo'); | 320 | Route::get('editor-seo/edit/{page}', [CompanyController::class, 'editor_seo_edit'])->name('edit-seo'); |
321 | Route::put('editor-seo/edit/{page}', [CompanyController::class, 'editor_seo_update'])->name('update-seo'); | 321 | Route::put('editor-seo/edit/{page}', [CompanyController::class, 'editor_seo_update'])->name('update-seo'); |
322 | Route::delete('editor-seo/delete/{page}', [CompanyController::class, 'editor_seo_destroy'])->name('delete-seo'); | 322 | Route::delete('editor-seo/delete/{page}', [CompanyController::class, 'editor_seo_destroy'])->name('delete-seo'); |
323 | 323 | ||
324 | 324 | ||
325 | // кабинет - редактор страниц | 325 | // кабинет - редактор страниц |
326 | Route::get('editor-pages', [CompanyController::class, 'editor_pages'])->name('editor-pages'); | 326 | Route::get('editor-pages', [CompanyController::class, 'editor_pages'])->name('editor-pages'); |
327 | // кабинет - добавление страницы | 327 | // кабинет - добавление страницы |
328 | Route::get('editor-pages/add', [CompanyController::class, 'editor_pages_add'])->name('add-page'); | 328 | Route::get('editor-pages/add', [CompanyController::class, 'editor_pages_add'])->name('add-page'); |
329 | // кабинет - сохранение формы страницы | 329 | // кабинет - сохранение формы страницы |
330 | Route::post('editor-page/add', [CompanyController::class, 'editor_pages_store'])->name('add-page-store'); | 330 | Route::post('editor-page/add', [CompanyController::class, 'editor_pages_store'])->name('add-page-store'); |
331 | // кабинет - редактирование форма страницы | 331 | // кабинет - редактирование форма страницы |
332 | Route::get('editor-pages/edit/{page}', [CompanyController::class, 'editor_pages_edit'])->name('edit-page'); | 332 | Route::get('editor-pages/edit/{page}', [CompanyController::class, 'editor_pages_edit'])->name('edit-page'); |
333 | // кабинет - сохранение редактированной формы страницы | 333 | // кабинет - сохранение редактированной формы страницы |
334 | Route::put('editor-pages/edit/{page}', [CompanyController::class, 'editor_pages_update'])->name('update-page'); | 334 | Route::put('editor-pages/edit/{page}', [CompanyController::class, 'editor_pages_update'])->name('update-page'); |
335 | // кабинет - удаление страницы | 335 | // кабинет - удаление страницы |
336 | Route::delete('editor-pages/delete/{page}', [CompanyController::class, 'editor_pages_destroy'])->name('delete-page'); | 336 | Route::delete('editor-pages/delete/{page}', [CompanyController::class, 'editor_pages_destroy'])->name('delete-page'); |
337 | 337 | ||
338 | 338 | ||
339 | // кабинет - реклама сайта | 339 | // кабинет - реклама сайта |
340 | Route::get('reclames', [CompanyController::class, 'reclames'])->name('reclames'); | 340 | Route::get('reclames', [CompanyController::class, 'reclames'])->name('reclames'); |
341 | Route::get('reclames/add', [CompanyController::class, 'reclames_add'])->name('add-reclames'); | 341 | Route::get('reclames/add', [CompanyController::class, 'reclames_add'])->name('add-reclames'); |
342 | Route::post('reclames/add', [CompanyController::class, 'reclames_store'])->name('add-reclames-store'); | 342 | Route::post('reclames/add', [CompanyController::class, 'reclames_store'])->name('add-reclames-store'); |
343 | Route::get('reclames/edit/{reclame}', [CompanyController::class, 'reclames_edit'])->name('edit-reclames'); | 343 | Route::get('reclames/edit/{reclame}', [CompanyController::class, 'reclames_edit'])->name('edit-reclames'); |
344 | Route::put('reclames/edit/{reclame}', [CompanyController::class, 'reclames_update'])->name('update-reclames'); | 344 | Route::put('reclames/edit/{reclame}', [CompanyController::class, 'reclames_update'])->name('update-reclames'); |
345 | Route::delete('reclames/delete/{reclame}', [CompanyController::class, 'reclames_destroy'])->name('delete-reclames'); | 345 | Route::delete('reclames/delete/{reclame}', [CompanyController::class, 'reclames_destroy'])->name('delete-reclames'); |
346 | //////////////////////////////////////////////////////////////////////// | 346 | //////////////////////////////////////////////////////////////////////// |
347 | 347 | ||
348 | 348 | ||
349 | // кабинет - отзывы о работодателе для модерации | 349 | // кабинет - отзывы о работодателе для модерации |
350 | Route::get('answers', [EmployersController::class, 'answers'])->name('answers'); | 350 | Route::get('answers', [EmployersController::class, 'answers'])->name('answers'); |
351 | 351 | ||
352 | // Общая страница статистики | 352 | // Общая страница статистики |
353 | Route::get('statics', function () { | 353 | Route::get('statics', function () { |
354 | return view('admin.static.index'); | 354 | return view('admin.static.index'); |
355 | })->name('statics'); | 355 | })->name('statics'); |
356 | 356 | ||
357 | // кабинет - статистика работников | 357 | // кабинет - статистика работников |
358 | Route::get('static-workers', [WorkersController::class, 'static_workers'])->name('static-workers'); | 358 | Route::get('static-workers', [WorkersController::class, 'static_workers'])->name('static-workers'); |
359 | 359 | ||
360 | // кабинет - статистика вакансий работодателя | 360 | // кабинет - статистика вакансий работодателя |
361 | Route::get('static-ads', [EmployersController::class, 'static_ads'])->name('static-ads'); | 361 | Route::get('static-ads', [EmployersController::class, 'static_ads'])->name('static-ads'); |
362 | 362 | ||
363 | // кабинет - справочник - блоки информации (дипломы и документы) для резюме работника | 363 | // кабинет - справочник - блоки информации (дипломы и документы) для резюме работника |
364 | /* | 364 | /* |
365 | * CRUD-операции над справочником дипломы и документы | 365 | * CRUD-операции над справочником дипломы и документы |
366 | */ | 366 | */ |
367 | //Route::get('infobloks', [WorkersController::class, 'infobloks'])->name('infobloks'); | 367 | //Route::get('infobloks', [WorkersController::class, 'infobloks'])->name('infobloks'); |
368 | Route::resource('infobloks', InfoBloksController::class, ['except' => ['show']]); | 368 | Route::resource('infobloks', InfoBloksController::class, ['except' => ['show']]); |
369 | 369 | ||
370 | // кабинет - роли пользователя | 370 | // кабинет - роли пользователя |
371 | Route::get('roles', [UsersController::class, 'roles'])->name('roles'); | 371 | Route::get('roles', [UsersController::class, 'roles'])->name('roles'); |
372 | 372 | ||
373 | Route::get('admin_roles', [UsersController::class, 'admin_roles'])->name('admin_roles'); | 373 | Route::get('admin_roles', [UsersController::class, 'admin_roles'])->name('admin_roles'); |
374 | 374 | ||
375 | Route::get('logs', function() { | 375 | Route::get('logs', function() { |
376 | $files = Storage::files('logs/laravel.log'); | 376 | $files = Storage::files('logs/laravel.log'); |
377 | print_r($files); | 377 | print_r($files); |
378 | })->name('logs'); | 378 | })->name('logs'); |
379 | }); | 379 | }); |
380 | 380 | ||
381 | // Инструментальные страницы | 381 | // Инструментальные страницы |
382 | Route::post('ckeditor/upload', [CKEditorController::class, 'upload'])->name('ckeditor.image-upload'); | 382 | Route::post('ckeditor/upload', [CKEditorController::class, 'upload'])->name('ckeditor.image-upload'); |
383 | 383 | ||
384 | Route::get('redis/', [PagesController::class, 'redis'])->name('redis'); | 384 | Route::get('redis/', [PagesController::class, 'redis'])->name('redis'); |
385 | 385 | ||
386 | Route::get('excel/', [PagesController::class, 'excel'])->name('excel'); | 386 | Route::get('excel/', [PagesController::class, 'excel'])->name('excel'); |
387 | 387 | ||
388 | // Страницы с произвольным контентом | 388 | // Страницы с произвольным контентом |
389 | Route::get('pages/{pages:slug}', [PagesController::class, 'pages'])->name('page'); | 389 | Route::get('pages/{pages:slug}', [PagesController::class, 'pages'])->name('page'); |
390 | 390 | ||
391 | // Публичные страницы соискателя | 391 | // Публичные страницы соискателя |
392 | Route::get('workers/profile/{worker}', [WorkerController::class, 'profile'])->name('worker_page'); | 392 | Route::get('workers/profile/{worker}', [WorkerController::class, 'profile'])->name('worker_page'); |
393 | 393 | ||
394 | //Страница вакансии | 394 | //Страница вакансии |
395 | Route::get('employer/ad/{ad_employer}', [AdEmployerController::class, 'ad_employer'])->name('ad-employer'); | 395 | Route::get('employer/ad/{ad_employer}', [AdEmployerController::class, 'ad_employer'])->name('ad-employer'); |
396 | 396 | ||
397 | //Вакансии | 397 | //Вакансии |
398 | Route::get('vacancies', [MainController::class, 'vacancies'])->name('vacancies'); | 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 | Route::get('list-vacancies/{categories}', [MainController::class, 'list_vacancies'])->name('list-vacancies'); | 404 | Route::get('list-vacancies/{categories}', [MainController::class, 'list_vacancies'])->name('list-vacancies'); |
402 | 405 | ||
403 | //Детальная страница вакансии - работодателя | 406 | //Детальная страница вакансии - работодателя |
404 | Route::get('vacancie/{vacancy}', [FrontEmployersController::class, 'vacancie'])->name('vacancie'); | 407 | Route::get('vacancie/{vacancy}', [FrontEmployersController::class, 'vacancie'])->name('vacancie'); |
405 | 408 | ||
406 | //Судоходные компании | 409 | //Судоходные компании |
407 | Route::get('shipping-companies', [FrontCompanyController::class, 'shipping_companies'])->name('shipping_companies'); | 410 | Route::get('shipping-companies', [FrontCompanyController::class, 'shipping_companies'])->name('shipping_companies'); |
408 | 411 | ||
409 | //Детальная инфа о компании | 412 | //Детальная инфа о компании |
410 | Route::get('info-company/{company}', [FrontCompanyController::class, 'info_company'])->name('info_company'); | 413 | Route::get('info-company/{company}', [FrontCompanyController::class, 'info_company'])->name('info_company'); |
411 | 414 | ||
412 | //Образование | 415 | //Образование |
413 | Route::get('education', [MainController::class, 'education'])->name('education'); | 416 | Route::get('education', [MainController::class, 'education'])->name('education'); |
414 | 417 | ||
415 | //Новости | 418 | //Новости |
416 | Route::get('news', [MainController::class, 'news'])->name('news'); | 419 | Route::get('news', [MainController::class, 'news'])->name('news'); |
417 | 420 | ||
418 | //Контакты | 421 | //Контакты |
419 | Route::get('contacts', [MainController::class, 'contacts'])->name('contacts'); | 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 | }); | ||
423 | 456 |