Commit f060aa75b26e4219843abdd286118db933005718
1 parent
93a3f79f0c
Exists in
master
and in
1 other branch
Счетчик сообщений, метки непрочитанных сообщений администратора
Showing 6 changed files with 137 additions and 33 deletions Inline Diff
app/Http/Controllers/Admin/AdminController.php
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace App\Http\Controllers\Admin; | 3 | namespace App\Http\Controllers\Admin; |
4 | 4 | ||
5 | use App\Http\Controllers\Controller; | 5 | use App\Http\Controllers\Controller; |
6 | use App\Http\Requests\CompanyRequest; | 6 | use App\Http\Requests\CompanyRequest; |
7 | use App\Models\Company; | 7 | use App\Models\Company; |
8 | use App\Models\Employer; | 8 | use App\Models\Employer; |
9 | use App\Models\User; | 9 | use App\Models\User; |
10 | use Illuminate\Http\Request; | 10 | use Illuminate\Http\Request; |
11 | use Illuminate\Support\Facades\Auth; | 11 | use Illuminate\Support\Facades\Auth; |
12 | use Illuminate\Support\Facades\Hash; | 12 | use Illuminate\Support\Facades\Hash; |
13 | use Illuminate\Support\Facades\Storage; | 13 | use Illuminate\Support\Facades\Storage; |
14 | use Illuminate\Support\Facades\Validator; | 14 | use Illuminate\Support\Facades\Validator; |
15 | 15 | ||
16 | class AdminController extends Controller | 16 | class AdminController extends Controller |
17 | { | 17 | { |
18 | /** | 18 | /** |
19 | * Handle the incoming request. | 19 | * Handle the incoming request. |
20 | * | 20 | * |
21 | * @param \Illuminate\Http\Request $request | 21 | * @param \Illuminate\Http\Request $request |
22 | * @return \Illuminate\Http\Response | 22 | * @return \Illuminate\Http\Response |
23 | */ | 23 | */ |
24 | public function __invoke(Request $request) | 24 | public function __invoke(Request $request) |
25 | { | 25 | { |
26 | // | 26 | // |
27 | } | 27 | } |
28 | 28 | ||
29 | public function register() { | 29 | public function register() { |
30 | return view('admin.register'); | 30 | return view('admin.register'); |
31 | } | 31 | } |
32 | 32 | ||
33 | public function create(Request $request) { | 33 | public function create(Request $request) { |
34 | 34 | ||
35 | $rules = [ | 35 | $rules = [ |
36 | 'name' => 'required|string|max:255', | 36 | 'name' => 'required|string|max:255', |
37 | 'email' => 'required|string|email|max:255|unique:users', | 37 | 'email' => 'required|string|email|max:255|unique:users', |
38 | 'password' => 'required|string|min:8|confirmed', | 38 | 'password' => 'required|string|min:8|confirmed', |
39 | ]; | 39 | ]; |
40 | 40 | ||
41 | $messages = [ | 41 | $messages = [ |
42 | 'required' => 'Укажите обязательное поле «:attribute»', | 42 | 'required' => 'Укажите обязательное поле «:attribute»', |
43 | 'confirmed' => 'Пароли не совпадают', | 43 | 'confirmed' => 'Пароли не совпадают', |
44 | 'email' => 'Введите корректный email', | 44 | 'email' => 'Введите корректный email', |
45 | 'min' => [ | 45 | 'min' => [ |
46 | 'string' => 'Поле «:attribute» должно быть не меньше :min символов', | 46 | 'string' => 'Поле «:attribute» должно быть не меньше :min символов', |
47 | 'file' => 'Файл «:attribute» должен быть не меньше :min Кбайт' | 47 | 'file' => 'Файл «:attribute» должен быть не меньше :min Кбайт' |
48 | ], | 48 | ], |
49 | 'max' => [ | 49 | 'max' => [ |
50 | 'string' => 'Поле «:attribute» должно быть не больше :max символов', | 50 | 'string' => 'Поле «:attribute» должно быть не больше :max символов', |
51 | 'file' => 'Файл «:attribute» должен быть не больше :max Кбайт' | 51 | 'file' => 'Файл «:attribute» должен быть не больше :max Кбайт' |
52 | ], | 52 | ], |
53 | ]; | 53 | ]; |
54 | 54 | ||
55 | $validator = Validator::make($request->all(), $rules, $messages); | 55 | $validator = Validator::make($request->all(), $rules, $messages); |
56 | 56 | ||
57 | if ($validator->fails()) { | 57 | if ($validator->fails()) { |
58 | return back()->withErrors($validator)->withInput(); //->route('admin.register') | 58 | return back()->withErrors($validator)->withInput(); //->route('admin.register') |
59 | 59 | ||
60 | } else { | 60 | } else { |
61 | $params = $request->all(); | 61 | $params = $request->all(); |
62 | 62 | ||
63 | User::create([ | 63 | User::create([ |
64 | 'name' => $request->name, | 64 | 'name' => $request->name, |
65 | 'email' => $request->email, | 65 | 'email' => $request->email, |
66 | 'password' => Hash::make($request->password), | 66 | 'password' => Hash::make($request->password), |
67 | ]); | 67 | ]); |
68 | return redirect() | 68 | return redirect() |
69 | ->route('admin.login') | 69 | ->route('admin.login') |
70 | ->with('success', 'Вы успешно зарегистрировались'); | 70 | ->with('success', 'Вы успешно зарегистрировались'); |
71 | } | 71 | } |
72 | } | 72 | } |
73 | 73 | ||
74 | public function login() { | 74 | public function login() { |
75 | return view('admin.login'); | 75 | return view('admin.login'); |
76 | } | 76 | } |
77 | 77 | ||
78 | // Аутентификация | 78 | // Аутентификация |
79 | public function autenticate(Request $request) { | 79 | public function autenticate(Request $request) { |
80 | //$request->validate( | 80 | //$request->validate( |
81 | $rules = [ | 81 | $rules = [ |
82 | 'email' => 'required|string|email', | 82 | 'email' => 'required|string|email', |
83 | 'password' => 'required|string', | 83 | 'password' => 'required|string', |
84 | ]; | 84 | ]; |
85 | 85 | ||
86 | $messages = [ | 86 | $messages = [ |
87 | 'required' => 'Укажите обязательное поле «:attribute»', | 87 | 'required' => 'Укажите обязательное поле «:attribute»', |
88 | 'email' => 'Введите корректный email', | 88 | 'email' => 'Введите корректный email', |
89 | 'min' => [ | 89 | 'min' => [ |
90 | 'string' => 'Поле «:attribute» должно быть не меньше :min символов', | 90 | 'string' => 'Поле «:attribute» должно быть не меньше :min символов', |
91 | 'file' => 'Файл «:attribute» должен быть не меньше :min Кбайт' | 91 | 'file' => 'Файл «:attribute» должен быть не меньше :min Кбайт' |
92 | ], | 92 | ], |
93 | 'max' => [ | 93 | 'max' => [ |
94 | 'string' => 'Поле «:attribute» должно быть не больше :max символов', | 94 | 'string' => 'Поле «:attribute» должно быть не больше :max символов', |
95 | 'file' => 'Файл «:attribute» должен быть не больше :max Кбайт' | 95 | 'file' => 'Файл «:attribute» должен быть не больше :max Кбайт' |
96 | ], | 96 | ], |
97 | ]; | 97 | ]; |
98 | 98 | ||
99 | 99 | ||
100 | $validator = Validator::make($request->all(), $rules, $messages); | 100 | $validator = Validator::make($request->all(), $rules, $messages); |
101 | 101 | ||
102 | if ($validator->fails()) { | 102 | if ($validator->fails()) { |
103 | return back()->withErrors($validator)->withInput(); | 103 | return back()->withErrors($validator)->withInput(); |
104 | 104 | ||
105 | } else { | 105 | } else { |
106 | 106 | ||
107 | $credentials = $request->only('email', 'password'); | 107 | $credentials = $request->only('email', 'password'); |
108 | 108 | ||
109 | if (Auth::attempt($credentials, $request->has('remember'))) { | 109 | if (Auth::attempt($credentials, $request->has('remember'))) { |
110 | 110 | ||
111 | if (is_null(Auth::user()->email_verified_at)) { | 111 | if (is_null(Auth::user()->email_verified_at)) { |
112 | Auth::logout(); | 112 | Auth::logout(); |
113 | return back()->withErrors('Адрес почты не подтвержден')->withInput(); | 113 | return back()->withErrors('Адрес почты не подтвержден')->withInput(); |
114 | } | 114 | } |
115 | 115 | ||
116 | if (!Auth::user()->admin) { | 116 | if (!Auth::user()->admin) { |
117 | Auth::logout(); | 117 | Auth::logout(); |
118 | return //redirect()->route('admin.login') | 118 | return //redirect()->route('admin.login') |
119 | back()->withErrors('Вы не являетесь админом!')->withInput();; | 119 | back()->withErrors('Вы не являетесь админом!')->withInput();; |
120 | 120 | ||
121 | } | 121 | } |
122 | 122 | ||
123 | return redirect() | 123 | return redirect() |
124 | ->route('admin.index') | 124 | ->route('admin.index') |
125 | ->with('success', 'Вы вошли в личный кабинет.'); | 125 | ->with('success', 'Вы вошли в личный кабинет.'); |
126 | } | 126 | } |
127 | } | 127 | } |
128 | 128 | ||
129 | return redirect() | 129 | return redirect() |
130 | ->route('admin.login') | 130 | ->route('admin.login') |
131 | ->withErrors('Неверный логин или пароль!')->withInput(); | 131 | ->withErrors('Неверный логин или пароль!')->withInput(); |
132 | 132 | ||
133 | } | 133 | } |
134 | 134 | ||
135 | public function logout() { | 135 | public function logout() { |
136 | Auth::logout(); | 136 | Auth::logout(); |
137 | return redirect()->route('index') | 137 | return redirect()->route('index') |
138 | ->with('success', 'Вы вышли из личного кабинета'); | 138 | ->with('success', 'Вы вышли из личного кабинета'); |
139 | } | 139 | } |
140 | 140 | ||
141 | public function index() { | 141 | public function index() { |
142 | $all_user = User::query()->count(); | 142 | $all_user = User::query()->count(); |
143 | $all_employer = User::where('is_worker', '0')->count(); | 143 | $all_employer = User::where('is_worker', '0')->count(); |
144 | $all_worker = User::where('is_worker', '1')->count(); | 144 | $all_worker = User::where('is_worker', '1')->count(); |
145 | $all_admin = User::where('admin', '1')->count(); | 145 | $all_admin = User::where('admin', '1')->count(); |
146 | return view('admin.index', compact('all_employer', 'all_user', 'all_worker', 'all_admin')); | 146 | return view('admin.index', compact('all_employer', 'all_user', 'all_worker', 'all_admin')); |
147 | } | 147 | } |
148 | 148 | ||
149 | public function index_admin(Request $request) { | 149 | public function index_admin(Request $request) { |
150 | $title = 'Админка - Администраторы системы'; | 150 | $title = 'Админка - Администраторы системы'; |
151 | $id_admin = Auth::user()->id; | 151 | $id_admin = Auth::user()->id; |
152 | 152 | ||
153 | if ($request->ajax()) { | 153 | if ($request->ajax()) { |
154 | $user = User::find($request->id); | 154 | $user = User::find($request->id); |
155 | $request->offsetUnset('id'); | 155 | $request->offsetUnset('id'); |
156 | $user->update($request->all()); | 156 | $user->update($request->all()); |
157 | } | 157 | } |
158 | 158 | $find_key = ''; | |
159 | $users = User::where('admin', '1')->paginate(15); | 159 | $users = User::where('admin', '1'); |
160 | if (isset($request->find)) { | ||
161 | $find_key = $request->find; | ||
162 | $users = $users->where(function($query) use($find_key) { | ||
163 | $query->Where('name', 'LIKE', "%$find_key%") | ||
164 | ->orWhere('email', 'LIKE', "%$find_key%"); | ||
165 | }); | ||
166 | } | ||
167 | $users = $users->paginate(15); | ||
160 | 168 | ||
161 | if ($request->ajax()) { | 169 | if ($request->ajax()) { |
162 | return view('admin.users.index_ajax', compact('users', 'id_admin')); | 170 | return view('admin.users.index_ajax', compact('users', 'id_admin')); |
163 | } else { | 171 | } else { |
164 | return view('admin.users.index', compact('users', 'title', 'id_admin')); | 172 | return view('admin.users.index', compact('users', 'title', 'id_admin', 'find_key')); |
165 | } | 173 | } |
166 | } | 174 | } |
167 | 175 | ||
168 | //Страница профиль пользователя - форма | 176 | //Страница профиль пользователя - форма |
169 | public function profile_user(User $user) { | 177 | public function profile_user(User $user) { |
170 | $visible = false; | 178 | $visible = false; |
171 | if($user->is_worker) { | 179 | if($user->is_worker) { |
172 | $caption = "Карточка работника"; | 180 | $caption = "Карточка работника"; |
173 | if (isset($user->workers[0]->id)) { | 181 | if (isset($user->workers[0]->id)) { |
174 | $link = route('admin.worker-profile', ['worker' => $user->workers[0]->id]); | 182 | $link = route('admin.worker-profile', ['worker' => $user->workers[0]->id]); |
175 | //$visible = true; | 183 | //$visible = true; |
176 | } else { | 184 | } else { |
177 | $link = ""; | 185 | $link = ""; |
178 | } | 186 | } |
179 | 187 | ||
180 | } else { | 188 | } else { |
181 | $caption = "Карточка работодателя"; | 189 | $caption = "Карточка работодателя"; |
182 | if (isset($user->employers[0]->id)) { | 190 | if (isset($user->employers[0]->id)) { |
183 | 191 | ||
184 | $link = route('admin.employer-profile', ['employer' => $user->employers[0]->id]); | 192 | $link = route('admin.employer-profile', ['employer' => $user->employers[0]->id]); |
185 | //$visible = true; | 193 | //$visible = true; |
186 | } else { | 194 | } else { |
187 | $link = ""; | 195 | $link = ""; |
188 | } | 196 | } |
189 | } | 197 | } |
190 | 198 | ||
191 | return view('admin.users.profile', compact('user', 'visible', 'link', 'caption')); | 199 | return view('admin.users.profile', compact('user', 'visible', 'link', 'caption')); |
192 | } | 200 | } |
193 | 201 | ||
194 | //Страница профиль пользователя - сохранение формы | 202 | //Страница профиль пользователя - сохранение формы |
195 | public function store_profile_user(User $user, Request $request) { | 203 | public function store_profile_user(User $user, Request $request) { |
196 | $rules = [ | 204 | $rules = [ |
197 | 'name' => 'required|min:3', | 205 | 'name' => 'required|min:3', |
198 | ]; | 206 | ]; |
199 | $messages = [ | 207 | $messages = [ |
200 | 'required' => 'Укажите обязательное поле', | 208 | 'required' => 'Укажите обязательное поле', |
201 | 'email' => 'Это поле должно быть определено, как Email' | 209 | 'email' => 'Это поле должно быть определено, как Email' |
202 | ]; | 210 | ]; |
203 | $validator = Validator::make($request->all(), $rules, $messages); | 211 | $validator = Validator::make($request->all(), $rules, $messages); |
204 | 212 | ||
205 | if ($validator->fails()) { | 213 | if ($validator->fails()) { |
206 | return redirect()->route('admin.user-profile', ['user' => $user->id]) | 214 | return redirect()->route('admin.user-profile', ['user' => $user->id]) |
207 | ->withErrors($validator); | 215 | ->withErrors($validator); |
208 | } else { | 216 | } else { |
209 | $user->update($request->all()); | 217 | $user->update($request->all()); |
210 | return redirect()->route('admin.user-profile', ['user' => $user->id]) | 218 | return redirect()->route('admin.user-profile', ['user' => $user->id]) |
211 | ->with('success', 'Данные были успешно сохранены'); | 219 | ->with('success', 'Данные были успешно сохранены'); |
212 | } | 220 | } |
213 | return redirect()->route('admin.user-profile', ['user' => $user->id]); | 221 | return redirect()->route('admin.user-profile', ['user' => $user->id]); |
214 | } | 222 | } |
215 | 223 | ||
216 | // Страница профиль админа - форма | 224 | // Страница профиль админа - форма |
217 | public function profile() { | 225 | public function profile() { |
218 | $id = Auth::user()->id; | 226 | $id = Auth::user()->id; |
219 | $user = User::find($id); | 227 | $user = User::find($id); |
220 | 228 | ||
221 | return view('admin.profile', compact('user')); | 229 | return view('admin.profile', compact('user')); |
222 | } | 230 | } |
223 | 231 | ||
224 | // Страница профиль админа - сохранение формы | 232 | // Страница профиль админа - сохранение формы |
225 | public function store_profile(Request $request) { | 233 | public function store_profile(Request $request) { |
226 | $id = Auth::user()->id; | 234 | $id = Auth::user()->id; |
227 | $user = User::find($id); | 235 | $user = User::find($id); |
228 | 236 | ||
229 | $rules = [ | 237 | $rules = [ |
230 | 'name' => 'required|min:3', | 238 | 'name' => 'required|min:3', |
231 | 'email' => 'required|email|min:3', | 239 | 'email' => 'required|email|min:3', |
232 | ]; | 240 | ]; |
233 | $messages = [ | 241 | $messages = [ |
234 | 'required' => 'Укажите обязательное поле', | 242 | 'required' => 'Укажите обязательное поле', |
235 | 'email' => 'Это поле должно быть определено, как Email' | 243 | 'email' => 'Это поле должно быть определено, как Email' |
236 | ]; | 244 | ]; |
237 | $validator = Validator::make($request->all(), $rules, $messages); | 245 | $validator = Validator::make($request->all(), $rules, $messages); |
238 | 246 | ||
239 | if ($validator->fails()) { | 247 | if ($validator->fails()) { |
240 | return redirect()->route('admin.profile') | 248 | return redirect()->route('admin.profile') |
241 | ->withErrors($validator); | 249 | ->withErrors($validator); |
242 | } else { | 250 | } else { |
243 | $user->update($request->all()); | 251 | $user->update($request->all()); |
244 | return redirect()->route('admin.profile') | 252 | return redirect()->route('admin.profile') |
245 | ->with('success', 'Данные были успешно сохранены'); | 253 | ->with('success', 'Данные были успешно сохранены'); |
246 | } | 254 | } |
247 | return redirect()->route('admin.profile'); | 255 | return redirect()->route('admin.profile'); |
248 | } | 256 | } |
249 | 257 | ||
250 | // Форма смены пароля администоратора | 258 | // Форма смены пароля администоратора |
251 | public function profile_password() { | 259 | public function profile_password() { |
252 | $id = Auth::user()->id; | 260 | $id = Auth::user()->id; |
253 | $user = User::find($id); | 261 | $user = User::find($id); |
254 | $username = $user->name; | 262 | $username = $user->name; |
255 | 263 | ||
256 | return view('admin.password', compact('username')); | 264 | return view('admin.password', compact('username')); |
257 | } | 265 | } |
258 | 266 | ||
259 | // Сохранение формы смены пароля администоратора | 267 | // Сохранение формы смены пароля администоратора |
260 | public function profile_password_new(Request $request) { | 268 | public function profile_password_new(Request $request) { |
261 | 269 | ||
262 | $rules = [ | 270 | $rules = [ |
263 | 'old_password' => 'required|min:6', //|current_password:api', | 271 | 'old_password' => 'required|min:6', //|current_password:api', |
264 | 'password' => 'required|min:6|confirmed', | 272 | 'password' => 'required|min:6|confirmed', |
265 | ]; | 273 | ]; |
266 | $messages = [ | 274 | $messages = [ |
267 | 'required' => 'Укажите обязательное поле', | 275 | 'required' => 'Укажите обязательное поле', |
268 | 'confirmed' => 'Пароли не совпадают' | 276 | 'confirmed' => 'Пароли не совпадают' |
269 | ]; | 277 | ]; |
270 | 278 | ||
271 | $validator = Validator::make($request->all(), $rules, $messages); | 279 | $validator = Validator::make($request->all(), $rules, $messages); |
272 | 280 | ||
273 | if (! Hash::check($request->old_password, $request->user()->password)) { | 281 | if (! Hash::check($request->old_password, $request->user()->password)) { |
274 | return back()->withErrors([ | 282 | return back()->withErrors([ |
275 | 'old_password' => ['Неверный предыдущий пароль'] | 283 | 'old_password' => ['Неверный предыдущий пароль'] |
276 | ]); | 284 | ]); |
277 | } | 285 | } |
278 | 286 | ||
279 | if ($validator->fails()) { | 287 | if ($validator->fails()) { |
280 | return redirect()->route('admin.password') | 288 | return redirect()->route('admin.password') |
281 | ->withErrors($validator); | 289 | ->withErrors($validator); |
282 | } else { | 290 | } else { |
283 | $params = $request->all(); | 291 | $params = $request->all(); |
284 | // устанавливаем новый пароль для пользователя | 292 | // устанавливаем новый пароль для пользователя |
285 | User::where('id', Auth::id()) | 293 | User::where('id', Auth::id()) |
286 | ->update(['password' => Hash::make($request->password)]); | 294 | ->update(['password' => Hash::make($request->password)]); |
287 | session()->flash('success', 'Успешно изменен пароль!'); | 295 | session()->flash('success', 'Успешно изменен пароль!'); |
288 | 296 | ||
289 | return redirect()->route('admin.password'); | 297 | return redirect()->route('admin.password'); |
290 | } | 298 | } |
291 | } | 299 | } |
292 | 300 | ||
293 | // Страница конфигурация сайта - форма | 301 | // Страница конфигурация сайта - форма |
294 | public function config_form() { | 302 | public function config_form() { |
295 | $config = Company::find(1); | 303 | $config = Company::find(1); |
296 | return view('admin.config', compact('config')); | 304 | return view('admin.config', compact('config')); |
297 | } | 305 | } |
298 | 306 | ||
299 | // Страница конфигурация сайта - сохранение формы | 307 | // Страница конфигурация сайта - сохранение формы |
300 | public function store_config(CompanyRequest $request) { | 308 | public function store_config(CompanyRequest $request) { |
301 | $config = Company::find(1); | 309 | $config = Company::find(1); |
302 | 310 | ||
303 | $params = $request->all(); | 311 | $params = $request->all(); |
304 | unset($params['logo']); | 312 | unset($params['logo']); |
305 | unset($params['image']); | 313 | unset($params['image']); |
306 | 314 | ||
307 | if ($request->has('logo')) { | 315 | if ($request->has('logo')) { |
308 | Storage::delete($config->logo); | 316 | Storage::delete($config->logo); |
309 | $params['logo'] = $request->file('logo')->store('config', 'public'); | 317 | $params['logo'] = $request->file('logo')->store('config', 'public'); |
310 | } | 318 | } |
311 | 319 | ||
312 | if ($request->has('image')) { | 320 | if ($request->has('image')) { |
313 | Storage::delete($config->image); | 321 | Storage::delete($config->image); |
314 | $params['image'] = $request->file('image')->store('config', 'public'); | 322 | $params['image'] = $request->file('image')->store('config', 'public'); |
315 | } | 323 | } |
316 | 324 | ||
317 | if (is_null($config)) { | 325 | if (is_null($config)) { |
318 | Company::create($params); | 326 | Company::create($params); |
319 | } else { | 327 | } else { |
320 | $config->update($params); | 328 | $config->update($params); |
321 | } | 329 | } |
322 | 330 | ||
323 | return redirect()->route('admin.config'); | 331 | return redirect()->route('admin.config'); |
324 | } | 332 | } |
325 | 333 | ||
326 | 334 | ||
327 | } | 335 | } |
328 | 336 |
app/Http/Controllers/Admin/MsgAnswersController.php
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace App\Http\Controllers\Admin; | 3 | namespace App\Http\Controllers\Admin; |
4 | 4 | ||
5 | use App\Http\Controllers\Controller; | 5 | use App\Http\Controllers\Controller; |
6 | use App\Models\Message; | 6 | use App\Models\Message; |
7 | use App\Models\User; | 7 | use App\Models\User; |
8 | use Illuminate\Http\Request; | 8 | use Illuminate\Http\Request; |
9 | use Illuminate\Support\Facades\Auth; | 9 | use Illuminate\Support\Facades\Auth; |
10 | use Illuminate\Support\Facades\DB; | 10 | use Illuminate\Support\Facades\DB; |
11 | use Illuminate\Support\Facades\Validator; | 11 | use Illuminate\Support\Facades\Validator; |
12 | 12 | ||
13 | class MsgAnswersController extends Controller | 13 | class MsgAnswersController extends Controller |
14 | { | 14 | { |
15 | public function messages() { | 15 | public function messages() { |
16 | $Msgs = Message::query()->orderByDesc('created_at')->paginate(25); | 16 | $Msgs = Message::query()->orderByDesc('created_at')->paginate(25); |
17 | 17 | ||
18 | return view('admin.messages', compact('Msgs')); | 18 | return view('admin.messages', compact('Msgs')); |
19 | } | 19 | } |
20 | 20 | ||
21 | public function admin_messages(Request $request) { | 21 | public function admin_messages(Request $request) { |
22 | if ($request->ajax()) { | ||
23 | $msg = Message::find($request->id); | ||
24 | $msg->flag_new = !($request->flag_new); | ||
25 | $msg->save(); | ||
26 | } | ||
27 | |||
22 | $id_admin = Auth::user()->id; | 28 | $id_admin = Auth::user()->id; |
23 | $users = User::query()->OrderBy('name')->get(); | 29 | $users = User::query()->OrderBy('name')->get(); |
24 | 30 | ||
25 | $Msgs = Message::query()->where('user_id', '=', $id_admin) | 31 | $Msgs = Message::query()->where('user_id', '=', $id_admin) |
26 | ->orWhere('to_user_id', '=', $id_admin) | 32 | ->orWhere('to_user_id', '=', $id_admin) |
27 | ->orderByDesc('created_at')->paginate(5); | 33 | ->orderByDesc('created_at')->paginate(5); |
28 | 34 | ||
29 | return view('admin.message.index', compact('Msgs', 'id_admin', 'users')); | 35 | if ($request->ajax()) |
36 | return view('admin.message.index_ajax', compact('Msgs', 'id_admin', 'users')); | ||
37 | else | ||
38 | return view('admin.message.index', compact('Msgs', 'id_admin', 'users')); | ||
30 | } | 39 | } |
31 | 40 | ||
32 | public function messages_sql(Request $request) { | 41 | public function messages_sql(Request $request) { |
33 | $id = Auth::user()->id; | 42 | $id = Auth::user()->id; |
34 | DB::enableQueryLog(); | 43 | DB::enableQueryLog(); |
35 | //$query = DB::select('select * from users where id = :id', ['id' => 1]); | 44 | //$query = DB::select('select * from users where id = :id', ['id' => 1]); |
36 | $query = DB::select(DB::raw('SELECT u1.name as "To-user", u2.name as "From-user", m1.`text`, m1.created_at | 45 | $query = DB::select(DB::raw('SELECT u1.name as "To-user", u2.name as "From-user", m1.`text`, m1.created_at |
37 | FROM messages m1 | 46 | FROM messages m1 |
38 | JOIN (SELECT MAX(id) id FROM messages | 47 | JOIN (SELECT MAX(id) id FROM messages |
39 | GROUP BY LEAST(user_id, to_user_id), | 48 | GROUP BY LEAST(user_id, to_user_id), |
40 | GREATEST(user_id, to_user_id) | 49 | GREATEST(user_id, to_user_id) |
41 | ) m2 USING (id) | 50 | ) m2 USING (id) |
42 | JOIN users u1 ON u1.id = m1.user_id | 51 | JOIN users u1 ON u1.id = m1.user_id |
43 | JOIN users u2 ON u2.id = m1.to_user_id | 52 | JOIN users u2 ON u2.id = m1.to_user_id |
44 | Where ((m1.user_id = :uid) or (m1.to_user_id = :uid2)) | 53 | Where ((m1.user_id = :uid) or (m1.to_user_id = :uid2)) |
45 | '), ['uid' => $id, 'uid2' => $id]); | 54 | '), ['uid' => $id, 'uid2' => $id]); |
46 | //dump(DB::getQueryLog()); | 55 | //dump(DB::getQueryLog()); |
47 | dd($query); | 56 | dd($query); |
48 | return; | 57 | return; |
49 | } | 58 | } |
50 | 59 | ||
51 | public function admin_messages_post(Request $request) { | 60 | public function admin_messages_post(Request $request) { |
52 | $rules = [ | 61 | $rules = [ |
53 | 'title' => 'required|min:3|max:255', | 62 | 'title' => 'required|min:3|max:255', |
54 | 'text' => 'required|min:1' | 63 | 'text' => 'required|min:1' |
55 | ]; | 64 | ]; |
56 | 65 | ||
57 | $messages = [ | 66 | $messages = [ |
58 | 'required' => 'Поле не может быть пустым!', | 67 | 'required' => 'Поле не может быть пустым!', |
59 | ]; | 68 | ]; |
60 | 69 | ||
61 | $validator = Validator::make($request->all(), $rules, $messages); | 70 | $validator = Validator::make($request->all(), $rules, $messages); |
62 | 71 | ||
63 | if ($validator->fails()) { | 72 | if ($validator->fails()) { |
64 | return redirect()->route('admin.admin-messages')->withErrors($validator); | 73 | return redirect()->route('admin.admin-messages')->withErrors($validator); |
65 | } else { | 74 | } else { |
66 | $params = $request->all(); | 75 | $params = $request->all(); |
67 | $id_admin = Auth::user()->id; | 76 | $id_admin = Auth::user()->id; |
68 | if ($request->has('file')) { | 77 | if ($request->has('file')) { |
69 | $params['file'] = $request->file('file')->store("upload/".$id_admin, 'public'); | 78 | $params['file'] = $request->file('file')->store("upload/".$id_admin, 'public'); |
70 | } | 79 | } |
71 | Message::create($params); | 80 | Message::create($params); |
72 | return redirect()->route('admin.admin-messages'); | 81 | return redirect()->route('admin.admin-messages'); |
73 | } | 82 | } |
74 | } | 83 | } |
75 | } | 84 | } |
76 | 85 |
app/Providers/MyServiceProvider.php
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace App\Providers; | 3 | namespace App\Providers; |
4 | 4 | ||
5 | use App\Models\Job_title; | 5 | use App\Models\Job_title; |
6 | use Illuminate\Support\Facades\Auth; | ||
7 | use Illuminate\Support\Facades\DB; | ||
6 | use Illuminate\Support\Facades\View; | 8 | use Illuminate\Support\Facades\View; |
7 | use Illuminate\Support\ServiceProvider; | 9 | use Illuminate\Support\ServiceProvider; |
8 | 10 | ||
9 | class MyServiceProvider extends ServiceProvider | 11 | class MyServiceProvider extends ServiceProvider |
10 | { | 12 | { |
11 | /** | 13 | /** |
12 | * Register services. | 14 | * Register services. |
13 | * | 15 | * |
14 | * @return void | 16 | * @return void |
15 | */ | 17 | */ |
16 | public function register() | 18 | public function register() |
17 | { | 19 | { |
18 | // | 20 | // |
19 | } | 21 | } |
20 | 22 | ||
21 | /** | 23 | /** |
22 | * Bootstrap services. | 24 | * Bootstrap services. |
23 | * | 25 | * |
24 | * @return void | 26 | * @return void |
25 | */ | 27 | */ |
26 | public function boot() | 28 | public function boot() |
27 | { | 29 | { |
28 | $views = ['admin.job_titles.parent_id']; | 30 | $views = ['admin.job_titles.parent_id']; |
29 | View::composer($views, | 31 | View::composer($views, |
30 | function($view) | 32 | function($view) |
31 | { | 33 | { |
32 | static $items = null; | 34 | static $items = null; |
33 | 35 | ||
34 | if (is_null($items)) { | 36 | if (is_null($items)) { |
35 | $items = Job_title::query()-> | 37 | $items = Job_title::query()-> |
36 | orderByDesc('sort')-> | 38 | orderByDesc('sort')-> |
37 | orderBy('name')-> | 39 | orderBy('name')-> |
38 | active()-> | 40 | active()-> |
39 | get(); | 41 | get(); |
40 | $parent = 0; | 42 | $parent = 0; |
41 | $view->with(['items' => $items, 'parent' => $parent]); | 43 | $view->with(['items' => $items, 'parent' => $parent]); |
42 | } else { | 44 | } else { |
43 | $view->with(['items' => $items]); | 45 | $view->with(['items' => $items]); |
44 | } | 46 | } |
45 | 47 | ||
46 | } | 48 | } |
47 | ); | 49 | ); |
50 | |||
51 | $views2 = ['layout.admin']; | ||
52 | |||
53 | View::composer($views2, | ||
54 | function($view){ | ||
55 | $id = Auth::user()->id; | ||
56 | $query = DB::select(DB::raw('SELECT count(*) as MsgCount | ||
57 | FROM messages m1 | ||
58 | Where ((m1.flag_new = 1) and (m1.to_user_id = :uid)) | ||
59 | '), ['uid' => $id] | ||
60 | ); | ||
61 | |||
62 | $view->with(['MsgCount' => $query[0]->MsgCount]); | ||
63 | } | ||
64 | ); | ||
48 | } | 65 | } |
49 | } | 66 | } |
50 | 67 |
resources/views/admin/message/index.blade.php
1 | @extends('layout.admin', ['title' => 'Админка - Сообщения адмистратора']) | 1 | @extends('layout.admin', ['title' => 'Админка - Сообщения адмистратора']) |
2 | 2 | ||
3 | @section('script') | 3 | @section('script') |
4 | <script> | ||
5 | $(document).ready(function() { | ||
6 | $(document).on('change', '.checkread', function () { | ||
7 | var this_ = $(this); | ||
8 | var value = this_.val(); | ||
9 | var ajax_block = $('#ajax_block'); | ||
10 | var bool = 0; | ||
11 | |||
12 | if(this.checked){ | ||
13 | bool = 1; | ||
14 | } else { | ||
15 | bool = 0; | ||
16 | } | ||
17 | |||
18 | $.ajax({ | ||
19 | type: "GET", | ||
20 | url: "{{ url()->full()}}", | ||
21 | data: "id=" + value + "&flag_new=" + bool, | ||
22 | success: function (data) { | ||
23 | console.log('Обновление таблицы сообщений администратора '); | ||
24 | //data = JSON.parse(data); | ||
25 | //console.log(data); | ||
26 | ajax_block.html(data); | ||
27 | }, | ||
28 | headers: { | ||
29 | 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') | ||
30 | }, | ||
31 | error: function (data) { | ||
32 | console.log('Error: ' + data); | ||
33 | } | ||
34 | }); | ||
35 | }); | ||
36 | |||
37 | }); | ||
38 | </script> | ||
4 | @endsection | 39 | @endsection |
5 | 40 | ||
6 | @section('search') | 41 | @section('search') |
7 | <!--<div class="absolute inset-y-0 flex items-center pl-2"> | 42 | |
8 | <svg | ||
9 | class="w-4 h-4" | ||
10 | aria-hidden="true" | ||
11 | fill="currentColor" | ||
12 | viewBox="0 0 20 20" | ||
13 | > | ||
14 | <path | ||
15 | fill-rule="evenodd" | ||
16 | d="M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z" | ||
17 | clip-rule="evenodd" | ||
18 | ></path> | ||
19 | </svg> | ||
20 | </div> | ||
21 | <form action="" method="POST"> | ||
22 | <div style="float:left;"><input | ||
23 | class="w-full pl-8 pr-2 text-sm text-gray-700 placeholder-gray-600 bg-gray-100 border-0 rounded-md dark:placeholder-gray-500 dark:focus:shadow-outline-gray dark:focus:placeholder-gray-600 dark:bg-gray-700 dark:text-gray-200 focus:placeholder-gray-500 focus:bg-white focus:border-purple-300 focus:outline-none focus:shadow-outline-purple form-input" | ||
24 | style="width: 400px" | ||
25 | type="text" | ||
26 | placeholder="Искать компанию или вакансию" | ||
27 | aria-label="Search" | ||
28 | /></div> | ||
29 | <div style="float: left"> | ||
30 | <button type="submit" class="px-3 py-1 rounded-md focus:outline-none focus:shadow-outline-purple">Поиск</button> | ||
31 | </div> | ||
32 | </form>--> | ||
33 | @endsection | 43 | @endsection |
34 | 44 | ||
35 | @section('content') | 45 | @section('content') |
36 | <div class="w-full overflow-hidden rounded-lg shadow-xs" id="ajax_block"> | 46 | <div class="w-full overflow-hidden rounded-lg shadow-xs" id="ajax_block"> |
37 | <div class="w-full overflow-x-auto"> | 47 | <div class="w-full overflow-x-auto"> |
38 | <table class="w-full whitespace-no-wrap"> | 48 | <table class="w-full whitespace-no-wrap"> |
39 | <thead> | 49 | <thead> |
40 | <tr | 50 | <tr |
41 | class="text-xs font-semibold tracking-wide text-left text-gray-500 uppercase border-b dark:border-gray-700 bg-gray-50 dark:text-gray-400 dark:bg-gray-800" | 51 | class="text-xs font-semibold tracking-wide text-left text-gray-500 uppercase border-b dark:border-gray-700 bg-gray-50 dark:text-gray-400 dark:bg-gray-800" |
42 | > | 52 | > |
43 | <th class="px-4 py-3">№</th> | 53 | <th class="px-4 py-3">№</th> |
44 | <th class="px-4 py-3">От юзера</th> | 54 | <th class="px-4 py-3">От юзера</th> |
45 | <th class="px-4 py-3">К юзеру</th> | 55 | <th class="px-4 py-3">К юзеру</th> |
46 | <th class="px-4 py-3">Текст</th> | 56 | <th class="px-4 py-3">Текст</th> |
47 | <th class="px-4 py-3">Дата</th> | 57 | <th class="px-4 py-3">Дата</th> |
58 | <th class="px-4 py-3">Прочтено</th> | ||
48 | </tr> | 59 | </tr> |
49 | </thead> | 60 | </thead> |
50 | <tbody class="bg-white divide-y dark:divide-gray-700 dark:bg-gray-800"> | 61 | <tbody class="bg-white divide-y dark:divide-gray-700 dark:bg-gray-800"> |
51 | @foreach($Msgs as $msg) | 62 | @foreach($Msgs as $msg) |
52 | <tr class="text-gray-700 dark:text-gray-400"> | 63 | <tr class="text-gray-700 dark:text-gray-400" |
64 | @if (($msg->user_to->id == $id_admin) && ($msg->flag_new == 1)) style="background-color: #403998;" @endif> | ||
53 | <td class="px-4 py-3"> | 65 | <td class="px-4 py-3"> |
54 | {{$msg->id}} | 66 | {{$msg->id}} |
55 | </td> | 67 | </td> |
56 | <td class="px-4 py-3"> | 68 | <td class="px-4 py-3"> |
57 | {{$msg->user_from->name}} ({{$msg->user_from->id}}) | 69 | {{$msg->user_from->name}} ({{$msg->user_from->id}}) |
58 | </td> | 70 | </td> |
59 | <td class="px-4 py-3"> | 71 | <td class="px-4 py-3"> |
60 | {{$msg->user_to->name}} ({{$msg->user_to->id}}) | 72 | {{$msg->user_to->name}} ({{$msg->user_to->id}}) |
61 | </td> | 73 | </td> |
62 | <td class="px-4 py-3"> | 74 | <td class="px-4 py-3"> |
63 | {{$msg->title}} | 75 | {{$msg->title}} |
64 | <div class="flex items-center text-sm"> | 76 | <div class="flex items-center text-sm"> |
65 | <textarea cols="7" style="width:250px;">{{ $msg->text }}</textarea> | 77 | <textarea cols="7" style="width:250px;">{{ $msg->text }}</textarea> |
66 | </div> | 78 | </div> |
67 | </td> | 79 | </td> |
68 | <td class="px-4 py-3 text-sm"> | 80 | <td class="px-4 py-3 text-sm"> |
69 | {{ $msg->created_at }} | 81 | {{ $msg->created_at }} |
70 | </td> | 82 | </td> |
83 | <td class="px-4 py-3 text-sm"> | ||
84 | @if (($msg->user_to->id == $id_admin) && ($msg->flag_new == 1)) | ||
85 | <input type="checkbox" class="checkread" value="{{$msg->id}}" name="read_{{$msg->id}}"/> | ||
86 | @endif | ||
87 | </td> | ||
71 | </tr> | 88 | </tr> |
72 | @endforeach | 89 | @endforeach |
73 | </tbody> | 90 | </tbody> |
74 | </table> | 91 | </table> |
75 | </div> | 92 | </div> |
76 | 93 | ||
77 | <div class="grid px-4 py-3 text-xs font-semibold tracking-wide text-gray-500 uppercase border-t dark:border-gray-700 bg-gray-50 sm:grid-cols-9 dark:text-gray-400 dark:bg-gray-800"> | 94 | <div class="grid px-4 py-3 text-xs font-semibold tracking-wide text-gray-500 uppercase border-t dark:border-gray-700 bg-gray-50 sm:grid-cols-9 dark:text-gray-400 dark:bg-gray-800"> |
78 | <?=$Msgs->appends($_GET)->links('admin.pagginate'); ?> | 95 | <?=$Msgs->appends($_GET)->links('admin.pagginate'); ?> |
79 | </div> | 96 | </div> |
80 | </div><br> | 97 | </div><br> |
81 | 98 | ||
82 | <div class="w-full overflow-hidden rounded-lg shadow-xs" id="ajax_block2"> | 99 | <div class="w-full overflow-hidden rounded-lg shadow-xs" id="ajax_block2"> |
83 | 100 | ||
84 | <form method="POST" action="{{ route('admin.admin-messages-post') }}" enctype="multipart/form-data"> | 101 | <form method="POST" action="{{ route('admin.admin-messages-post') }}" enctype="multipart/form-data"> |
85 | @csrf | 102 | @csrf |
86 | <div class="px-4 py-3 mb-8 bg-white rounded-lg shadow-md dark:bg-gray-800"> | 103 | <div class="px-4 py-3 mb-8 bg-white rounded-lg shadow-md dark:bg-gray-800"> |
87 | <h3 class="text-gray-700 dark:text-gray-400">Отправка сообщения</h3> | 104 | <h3 class="text-gray-700 dark:text-gray-400">Отправка сообщения</h3> |
88 | <hr> | 105 | <hr> |
89 | <label for="ad_employer_id" class="block text-sm"> | 106 | <label for="ad_employer_id" class="block text-sm"> |
90 | <input type="hidden" name="user_id" id="user_id" value="{{ $id_admin }}"/> | 107 | <input type="hidden" name="user_id" id="user_id" value="{{ $id_admin }}"/> |
91 | 108 | ||
92 | <span class="text-gray-700 dark:text-gray-400">Кому:</span> | 109 | <span class="text-gray-700 dark:text-gray-400">Кому:</span> |
93 | 110 | ||
94 | <select name="to_user_id" id="to_user_id" class="block change_js mt-1 text-sm dark:text-gray-300 dark:border-gray-600 dark:bg-gray-700 form-select focus:border-purple-400 focus:outline-none focus:shadow-outline-purple dark:focus:shadow-outline-gray"> | 111 | <select name="to_user_id" id="to_user_id" class="block change_js mt-1 text-sm dark:text-gray-300 dark:border-gray-600 dark:bg-gray-700 form-select focus:border-purple-400 focus:outline-none focus:shadow-outline-purple dark:focus:shadow-outline-gray"> |
95 | @foreach($users as $user) | 112 | @foreach($users as $user) |
96 | <option value="{{ $user->id }}">{{ $user->name }} ({{ $user->id }})</option> | 113 | <option value="{{ $user->id }}">{{ $user->name }} ({{ $user->id }})</option> |
97 | @endforeach | 114 | @endforeach |
98 | </select> | 115 | </select> |
99 | </label><br> | 116 | </label><br> |
100 | 117 | ||
101 | <label class="block text-sm"> | 118 | <label class="block text-sm"> |
102 | <span class="text-gray-700 dark:text-gray-400">Заголовок</span> | 119 | <span class="text-gray-700 dark:text-gray-400">Заголовок</span> |
103 | <input name="title" id="title" | 120 | <input name="title" id="title" |
104 | class="block w-full mt-1 text-sm dark:border-gray-600 dark:bg-gray-700 focus:border-purple-400 focus:outline-none focus:shadow-outline-purple dark:text-gray-300 dark:focus:shadow-outline-gray form-input" | 121 | class="block w-full mt-1 text-sm dark:border-gray-600 dark:bg-gray-700 focus:border-purple-400 focus:outline-none focus:shadow-outline-purple dark:text-gray-300 dark:focus:shadow-outline-gray form-input" |
105 | placeholder="Заголовок" value="{{ old('title') ?? '' }}" | 122 | placeholder="Заголовок" value="{{ old('title') ?? '' }}" |
106 | /> | 123 | /> |
107 | @error('title') | 124 | @error('title') |
108 | <span class="text-xs text-red-600 dark:text-red-400"> | 125 | <span class="text-xs text-red-600 dark:text-red-400"> |
109 | {{ $message }} | 126 | {{ $message }} |
110 | </span> | 127 | </span> |
111 | @enderror | 128 | @enderror |
112 | </label><br> | 129 | </label><br> |
113 | 130 | ||
114 | <label class="block text-sm"> | 131 | <label class="block text-sm"> |
115 | <span class="text-gray-700 dark:text-gray-400">Текст</span> | 132 | <span class="text-gray-700 dark:text-gray-400">Текст</span> |
116 | <textarea class="block w-full mt-1 text-sm dark:text-gray-300 dark:border-gray-600 dark:bg-gray-700 form-textarea focus:border-purple-400 focus:outline-none focus:shadow-outline-purple dark:focus:shadow-outline-gray" name="text" placeholder="Текст" required | 133 | <textarea class="block w-full mt-1 text-sm dark:text-gray-300 dark:border-gray-600 dark:bg-gray-700 form-textarea focus:border-purple-400 focus:outline-none focus:shadow-outline-purple dark:focus:shadow-outline-gray" name="text" placeholder="Текст" required |
117 | rows="4">{{ old('text') ?? '' }}</textarea> | 134 | rows="4">{{ old('text') ?? '' }}</textarea> |
118 | @error('text') | 135 | @error('text') |
119 | <span class="text-xs text-red-600 dark:text-red-400"> | 136 | <span class="text-xs text-red-600 dark:text-red-400"> |
120 | {{ $message }} | 137 | {{ $message }} |
121 | </span> | 138 | </span> |
122 | @enderror | 139 | @enderror |
123 | </label><br> | 140 | </label><br> |
124 | 141 | ||
125 | 142 |
resources/views/admin/message/index_ajax.blade.php
File was created | 1 | <div class="w-full overflow-x-auto"> | |
2 | <table class="w-full whitespace-no-wrap"> | ||
3 | <thead> | ||
4 | <tr | ||
5 | class="text-xs font-semibold tracking-wide text-left text-gray-500 uppercase border-b dark:border-gray-700 bg-gray-50 dark:text-gray-400 dark:bg-gray-800" | ||
6 | > | ||
7 | <th class="px-4 py-3">№</th> | ||
8 | <th class="px-4 py-3">От юзера</th> | ||
9 | <th class="px-4 py-3">К юзеру</th> | ||
10 | <th class="px-4 py-3">Текст</th> | ||
11 | <th class="px-4 py-3">Дата</th> | ||
12 | <th class="px-4 py-3">Прочтено</th> | ||
13 | </tr> | ||
14 | </thead> | ||
15 | <tbody class="bg-white divide-y dark:divide-gray-700 dark:bg-gray-800"> | ||
16 | @foreach($Msgs as $msg) | ||
17 | <tr class="text-gray-700 dark:text-gray-400" | ||
18 | @if (($msg->user_to->id == $id_admin) && ($msg->flag_new == 1)) style="background-color: #403998;" @endif> | ||
19 | <td class="px-4 py-3"> | ||
20 | {{$msg->id}} | ||
21 | </td> | ||
22 | <td class="px-4 py-3"> | ||
23 | {{$msg->user_from->name}} ({{$msg->user_from->id}}) | ||
24 | </td> | ||
25 | <td class="px-4 py-3"> | ||
26 | {{$msg->user_to->name}} ({{$msg->user_to->id}}) | ||
27 | </td> | ||
28 | <td class="px-4 py-3"> | ||
29 | {{$msg->title}} | ||
30 | <div class="flex items-center text-sm"> | ||
31 | <textarea cols="7" style="width:250px;">{{ $msg->text }}</textarea> | ||
32 | </div> | ||
33 | </td> | ||
34 | <td class="px-4 py-3 text-sm"> | ||
35 | {{ $msg->created_at }} | ||
36 | </td> | ||
37 | <td class="px-4 py-3 text-sm"> | ||
38 | @if (($msg->user_to->id == $id_admin) && ($msg->flag_new == 1)) | ||
39 | <input type="checkbox" class="checkread" value="{{$msg->id}}" name="read_{{$msg->id}}"/> | ||
40 | @endif | ||
41 | </td> | ||
42 | </tr> | ||
43 | @endforeach | ||
44 | </tbody> | ||
45 | </table> | ||
46 | </div> | ||
47 | |||
48 | <div class="grid px-4 py-3 text-xs font-semibold tracking-wide text-gray-500 uppercase border-t dark:border-gray-700 bg-gray-50 sm:grid-cols-9 dark:text-gray-400 dark:bg-gray-800"> | ||
49 | <?=$Msgs->appends($_GET)->links('admin.pagginate'); ?> | ||
50 | </div> | ||
51 |
resources/views/layout/admin.blade.php
1 | <!DOCTYPE html> | 1 | <!DOCTYPE html> |
2 | <html :class="{ 'theme-dark': dark }" x-data="data()" lang="{{ str_replace('_', '-', app()->getLocale()) }}"> | 2 | <html :class="{ 'theme-dark': dark }" x-data="data()" lang="{{ str_replace('_', '-', app()->getLocale()) }}"> |
3 | <head> | 3 | <head> |
4 | <meta charset="UTF-8" /> | 4 | <meta charset="UTF-8" /> |
5 | <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | 5 | <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
6 | <title>{{$title}}</title> | 6 | <title>{{$title}}</title> |
7 | <link | 7 | <link |
8 | href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" | 8 | href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" |
9 | rel="stylesheet" | 9 | rel="stylesheet" |
10 | /> | 10 | /> |
11 | <link rel="stylesheet" href="{{ asset('./assets/css/tailwind.output.css')}}" /> | 11 | <link rel="stylesheet" href="{{ asset('./assets/css/tailwind.output.css')}}" /> |
12 | <script | 12 | <script |
13 | src="https://cdn.jsdelivr.net/gh/alpinejs/alpine@v2.x.x/dist/alpine.min.js" | 13 | src="https://cdn.jsdelivr.net/gh/alpinejs/alpine@v2.x.x/dist/alpine.min.js" |
14 | defer | 14 | defer |
15 | ></script> | 15 | ></script> |
16 | <script src="{{ asset('./assets/js/init-alpine.js') }}"></script> | 16 | <script src="{{ asset('./assets/js/init-alpine.js') }}"></script> |
17 | <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.css"/> | 17 | <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.css"/> |
18 | <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.js" defer></script> | 18 | <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.js" defer></script> |
19 | <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script> | 19 | <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script> |
20 | <script src="{{ asset('./assets/js/charts-lines.js') }}" defer></script> | 20 | <script src="{{ asset('./assets/js/charts-lines.js') }}" defer></script> |
21 | <script src="{{ asset('./assets/js/charts-pie.js') }}" defer></script> | 21 | <script src="{{ asset('./assets/js/charts-pie.js') }}" defer></script> |
22 | </head> | 22 | </head> |
23 | <body> | 23 | <body> |
24 | <div class="flex h-screen bg-gray-50 dark:bg-gray-900" :class="{ 'overflow-hidden': isSideMenuOpen }"> | 24 | <div class="flex h-screen bg-gray-50 dark:bg-gray-900" :class="{ 'overflow-hidden': isSideMenuOpen }"> |
25 | <!-- Desktop sidebar --> | 25 | <!-- Desktop sidebar --> |
26 | <aside | 26 | <aside |
27 | class="z-20 hidden w-64 overflow-y-auto bg-white dark:bg-gray-800 md:block flex-shrink-0" | 27 | class="z-20 hidden w-64 overflow-y-auto bg-white dark:bg-gray-800 md:block flex-shrink-0" |
28 | > | 28 | > |
29 | <div class="py-4 text-gray-500 dark:text-gray-400"> | 29 | <div class="py-4 text-gray-500 dark:text-gray-400"> |
30 | <a class="ml-6 text-lg font-bold text-gray-800 dark:text-gray-200" | 30 | <a class="ml-6 text-lg font-bold text-gray-800 dark:text-gray-200" |
31 | href="{{ route('admin.index') }}"> | 31 | href="{{ route('admin.index') }}"> |
32 | Админка | 32 | Админка |
33 | </a> | 33 | </a> |
34 | <ul class="mt-6"> | 34 | <ul class="mt-6"> |
35 | <li class="relative px-6 py-3"> | 35 | <li class="relative px-6 py-3"> |
36 | <span | 36 | <span |
37 | class="absolute inset-y-0 left-0 w-1 bg-purple-600 rounded-tr-lg rounded-br-lg" | 37 | class="absolute inset-y-0 left-0 w-1 bg-purple-600 rounded-tr-lg rounded-br-lg" |
38 | aria-hidden="true" | 38 | aria-hidden="true" |
39 | ></span> | 39 | ></span> |
40 | <a | 40 | <a |
41 | class="inline-flex items-center w-full text-sm font-semibold text-gray-800 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200 dark:text-gray-100" | 41 | class="inline-flex items-center w-full text-sm font-semibold text-gray-800 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200 dark:text-gray-100" |
42 | href="{{ route('admin.index') }}" | 42 | href="{{ route('admin.index') }}" |
43 | > | 43 | > |
44 | <svg | 44 | <svg |
45 | class="w-5 h-5" | 45 | class="w-5 h-5" |
46 | aria-hidden="true" | 46 | aria-hidden="true" |
47 | fill="none" | 47 | fill="none" |
48 | stroke-linecap="round" | 48 | stroke-linecap="round" |
49 | stroke-linejoin="round" | 49 | stroke-linejoin="round" |
50 | stroke-width="2" | 50 | stroke-width="2" |
51 | viewBox="0 0 24 24" | 51 | viewBox="0 0 24 24" |
52 | stroke="currentColor" | 52 | stroke="currentColor" |
53 | > | 53 | > |
54 | <path | 54 | <path |
55 | d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" | 55 | d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" |
56 | ></path> | 56 | ></path> |
57 | </svg> | 57 | </svg> |
58 | <span class="ml-4">Главная страница</span> | 58 | <span class="ml-4">Главная страница</span> |
59 | </a> | 59 | </a> |
60 | </li> | 60 | </li> |
61 | </ul> | 61 | </ul> |
62 | <ul> | 62 | <ul> |
63 | <li class="relative px-6 py-3"> | 63 | <li class="relative px-6 py-3"> |
64 | <a | 64 | <a |
65 | class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" | 65 | class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" |
66 | href="{{ route('admin.users') }}" | 66 | href="{{ route('admin.users') }}" |
67 | > | 67 | > |
68 | <svg | 68 | <svg |
69 | class="w-5 h-5" | 69 | class="w-5 h-5" |
70 | aria-hidden="true" | 70 | aria-hidden="true" |
71 | fill="none" | 71 | fill="none" |
72 | stroke-linecap="round" | 72 | stroke-linecap="round" |
73 | stroke-linejoin="round" | 73 | stroke-linejoin="round" |
74 | stroke-width="2" | 74 | stroke-width="2" |
75 | viewBox="0 0 24 24" | 75 | viewBox="0 0 24 24" |
76 | stroke="currentColor" | 76 | stroke="currentColor" |
77 | > | 77 | > |
78 | <path | 78 | <path |
79 | d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01" | 79 | d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01" |
80 | ></path> | 80 | ></path> |
81 | </svg> | 81 | </svg> |
82 | <span class="ml-4">Пользователи</span> | 82 | <span class="ml-4">Пользователи</span> |
83 | </a> | 83 | </a> |
84 | </li> | 84 | </li> |
85 | <li class="relative px-6 py-3"> | 85 | <li class="relative px-6 py-3"> |
86 | <a | 86 | <a |
87 | class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" | 87 | class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" |
88 | href="{{ route('admin.employers') }}" | 88 | href="{{ route('admin.employers') }}" |
89 | > | 89 | > |
90 | <svg | 90 | <svg |
91 | class="w-5 h-5" | 91 | class="w-5 h-5" |
92 | aria-hidden="true" | 92 | aria-hidden="true" |
93 | fill="none" | 93 | fill="none" |
94 | stroke-linecap="round" | 94 | stroke-linecap="round" |
95 | stroke-linejoin="round" | 95 | stroke-linejoin="round" |
96 | stroke-width="2" | 96 | stroke-width="2" |
97 | viewBox="0 0 24 24" | 97 | viewBox="0 0 24 24" |
98 | stroke="currentColor" | 98 | stroke="currentColor" |
99 | > | 99 | > |
100 | <path | 100 | <path |
101 | d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10" | 101 | d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10" |
102 | ></path> | 102 | ></path> |
103 | </svg> | 103 | </svg> |
104 | <span class="ml-4">Работодатели</span> | 104 | <span class="ml-4">Работодатели</span> |
105 | </a> | 105 | </a> |
106 | </li> | 106 | </li> |
107 | <li class="relative px-6 py-3"> | 107 | <li class="relative px-6 py-3"> |
108 | <a | 108 | <a |
109 | class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" | 109 | class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" |
110 | href="{{ route('admin.workers') }}" | 110 | href="{{ route('admin.workers') }}" |
111 | > | 111 | > |
112 | <svg | 112 | <svg |
113 | class="w-5 h-5" | 113 | class="w-5 h-5" |
114 | aria-hidden="true" | 114 | aria-hidden="true" |
115 | fill="none" | 115 | fill="none" |
116 | stroke-linecap="round" | 116 | stroke-linecap="round" |
117 | stroke-linejoin="round" | 117 | stroke-linejoin="round" |
118 | stroke-width="2" | 118 | stroke-width="2" |
119 | viewBox="0 0 24 24" | 119 | viewBox="0 0 24 24" |
120 | stroke="currentColor" | 120 | stroke="currentColor" |
121 | > | 121 | > |
122 | <path | 122 | <path |
123 | d="M11 3.055A9.001 9.001 0 1020.945 13H11V3.055z" | 123 | d="M11 3.055A9.001 9.001 0 1020.945 13H11V3.055z" |
124 | ></path> | 124 | ></path> |
125 | <path d="M20.488 9H15V3.512A9.025 9.025 0 0120.488 9z"></path> | 125 | <path d="M20.488 9H15V3.512A9.025 9.025 0 0120.488 9z"></path> |
126 | </svg> | 126 | </svg> |
127 | <span class="ml-4">Соискатели</span> | 127 | <span class="ml-4">Соискатели</span> |
128 | </a> | 128 | </a> |
129 | </li> | 129 | </li> |
130 | <li class="relative px-6 py-3"> | 130 | <li class="relative px-6 py-3"> |
131 | <a | 131 | <a |
132 | class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" | 132 | class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" |
133 | href="{{ route('admin.ad-employers') }}" | 133 | href="{{ route('admin.ad-employers') }}" |
134 | > | 134 | > |
135 | <svg | 135 | <svg |
136 | class="w-5 h-5" | 136 | class="w-5 h-5" |
137 | aria-hidden="true" | 137 | aria-hidden="true" |
138 | fill="none" | 138 | fill="none" |
139 | stroke-linecap="round" | 139 | stroke-linecap="round" |
140 | stroke-linejoin="round" | 140 | stroke-linejoin="round" |
141 | stroke-width="2" | 141 | stroke-width="2" |
142 | viewBox="0 0 24 24" | 142 | viewBox="0 0 24 24" |
143 | stroke="currentColor" | 143 | stroke="currentColor" |
144 | > | 144 | > |
145 | <path | 145 | <path |
146 | d="M15 15l-2 5L9 9l11 4-5 2zm0 0l5 5M7.188 2.239l.777 2.897M5.136 7.965l-2.898-.777M13.95 4.05l-2.122 2.122m-5.657 5.656l-2.12 2.122" | 146 | d="M15 15l-2 5L9 9l11 4-5 2zm0 0l5 5M7.188 2.239l.777 2.897M5.136 7.965l-2.898-.777M13.95 4.05l-2.122 2.122m-5.657 5.656l-2.12 2.122" |
147 | ></path> | 147 | ></path> |
148 | </svg> | 148 | </svg> |
149 | <span class="ml-4">Вакансии</span> | 149 | <span class="ml-4">Вакансии</span> |
150 | </a> | 150 | </a> |
151 | </li> | 151 | </li> |
152 | 152 | ||
153 | <li class="relative px-6 py-3"> | 153 | <li class="relative px-6 py-3"> |
154 | <a | 154 | <a |
155 | class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" | 155 | class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" |
156 | href="{{ route('admin.messages') }}" | 156 | href="{{ route('admin.messages') }}" |
157 | > | 157 | > |
158 | <svg | 158 | <svg |
159 | class="w-5 h-5" | 159 | class="w-5 h-5" |
160 | aria-hidden="true" | 160 | aria-hidden="true" |
161 | fill="none" | 161 | fill="none" |
162 | stroke-linecap="round" | 162 | stroke-linecap="round" |
163 | stroke-linejoin="round" | 163 | stroke-linejoin="round" |
164 | stroke-width="2" | 164 | stroke-width="2" |
165 | viewBox="0 0 24 24" | 165 | viewBox="0 0 24 24" |
166 | stroke="currentColor" | 166 | stroke="currentColor" |
167 | > | 167 | > |
168 | <path d="M4 6h16M4 10h16M4 14h16M4 18h16"></path> | 168 | <path d="M4 6h16M4 10h16M4 14h16M4 18h16"></path> |
169 | </svg> | 169 | </svg> |
170 | <span class="ml-4">Сообщения</span> | 170 | <span class="ml-4">Сообщения</span> |
171 | </a> | 171 | </a> |
172 | </li> | 172 | </li> |
173 | <li class="relative px-6 py-3"> | 173 | <li class="relative px-6 py-3"> |
174 | <a | 174 | <a |
175 | class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" | 175 | class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" |
176 | href="{{ route('admin.groups') }}" | 176 | href="{{ route('admin.groups') }}" |
177 | > | 177 | > |
178 | <svg | 178 | <svg |
179 | class="w-5 h-5" | 179 | class="w-5 h-5" |
180 | aria-hidden="true" | 180 | aria-hidden="true" |
181 | fill="none" | 181 | fill="none" |
182 | stroke-linecap="round" | 182 | stroke-linecap="round" |
183 | stroke-linejoin="round" | 183 | stroke-linejoin="round" |
184 | stroke-width="2" | 184 | stroke-width="2" |
185 | viewBox="0 0 24 24" | 185 | viewBox="0 0 24 24" |
186 | stroke="currentColor" | 186 | stroke="currentColor" |
187 | > | 187 | > |
188 | <path | 188 | <path |
189 | d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01" | 189 | d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01" |
190 | ></path> | 190 | ></path> |
191 | </svg> | 191 | </svg> |
192 | <span class="ml-4">Группы пользователей</span> | 192 | <span class="ml-4">Группы пользователей</span> |
193 | </a> | 193 | </a> |
194 | </li> | 194 | </li> |
195 | <li class="relative px-6 py-3"> | 195 | <li class="relative px-6 py-3"> |
196 | <a class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" | 196 | <a class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" |
197 | href="{{ route('admin.roles') }}"> | 197 | href="{{ route('admin.roles') }}"> |
198 | <svg | 198 | <svg |
199 | class="w-5 h-5" | 199 | class="w-5 h-5" |
200 | aria-hidden="true" | 200 | aria-hidden="true" |
201 | fill="none" | 201 | fill="none" |
202 | stroke-linecap="round" | 202 | stroke-linecap="round" |
203 | stroke-linejoin="round" | 203 | stroke-linejoin="round" |
204 | stroke-width="2" | 204 | stroke-width="2" |
205 | viewBox="0 0 24 24" | 205 | viewBox="0 0 24 24" |
206 | stroke="currentColor" | 206 | stroke="currentColor" |
207 | > | 207 | > |
208 | <path | 208 | <path |
209 | d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01" | 209 | d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01" |
210 | ></path> | 210 | ></path> |
211 | </svg> | 211 | </svg> |
212 | <span class="ml-4">Роли пользователей</span> | 212 | <span class="ml-4">Роли пользователей</span> |
213 | </a> | 213 | </a> |
214 | </li> | 214 | </li> |
215 | <li class="relative px-6 py-3"> | 215 | <li class="relative px-6 py-3"> |
216 | <a | 216 | <a |
217 | class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" | 217 | class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" |
218 | href="{{ route('admin.statics') }}" | 218 | href="{{ route('admin.statics') }}" |
219 | > | 219 | > |
220 | <svg | 220 | <svg |
221 | class="w-5 h-5" | 221 | class="w-5 h-5" |
222 | aria-hidden="true" | 222 | aria-hidden="true" |
223 | fill="none" | 223 | fill="none" |
224 | stroke-linecap="round" | 224 | stroke-linecap="round" |
225 | stroke-linejoin="round" | 225 | stroke-linejoin="round" |
226 | stroke-width="2" | 226 | stroke-width="2" |
227 | viewBox="0 0 24 24" | 227 | viewBox="0 0 24 24" |
228 | stroke="currentColor" | 228 | stroke="currentColor" |
229 | > | 229 | > |
230 | <path | 230 | <path |
231 | d="M11 3.055A9.001 9.001 0 1020.945 13H11V3.055z" | 231 | d="M11 3.055A9.001 9.001 0 1020.945 13H11V3.055z" |
232 | ></path> | 232 | ></path> |
233 | <path d="M20.488 9H15V3.512A9.025 9.025 0 0120.488 9z"></path> | 233 | <path d="M20.488 9H15V3.512A9.025 9.025 0 0120.488 9z"></path> |
234 | </svg> | 234 | </svg> |
235 | <span class="ml-4">Статистика</span> | 235 | <span class="ml-4">Статистика</span> |
236 | </a> | 236 | </a> |
237 | </li> | 237 | </li> |
238 | <li class="relative px-6 py-3"> | 238 | <li class="relative px-6 py-3"> |
239 | <a | 239 | <a |
240 | class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" | 240 | class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" |
241 | href="{{ route('admin.answers') }}" | 241 | href="{{ route('admin.answers') }}" |
242 | > | 242 | > |
243 | <svg | 243 | <svg |
244 | class="w-5 h-5" | 244 | class="w-5 h-5" |
245 | aria-hidden="true" | 245 | aria-hidden="true" |
246 | fill="none" | 246 | fill="none" |
247 | stroke-linecap="round" | 247 | stroke-linecap="round" |
248 | stroke-linejoin="round" | 248 | stroke-linejoin="round" |
249 | stroke-width="2" | 249 | stroke-width="2" |
250 | viewBox="0 0 24 24" | 250 | viewBox="0 0 24 24" |
251 | stroke="currentColor" | 251 | stroke="currentColor" |
252 | > | 252 | > |
253 | <path d="M4 6h16M4 10h16M4 14h16M4 18h16"></path> | 253 | <path d="M4 6h16M4 10h16M4 14h16M4 18h16"></path> |
254 | </svg> | 254 | </svg> |
255 | <span class="ml-4">Модерация</span> | 255 | <span class="ml-4">Модерация</span> |
256 | </a> | 256 | </a> |
257 | </li> | 257 | </li> |
258 | <!-- Справочники --> | 258 | <!-- Справочники --> |
259 | <li class="relative px-6 py-3" x-data="{ open1: false }"> | 259 | <li class="relative px-6 py-3" x-data="{ open1: false }"> |
260 | <button | 260 | <button |
261 | class="inline-flex items-center justify-between w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" | 261 | class="inline-flex items-center justify-between w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" |
262 | @click="open1=!open1" | 262 | @click="open1=!open1" |
263 | aria-haspopup="true"> | 263 | aria-haspopup="true"> |
264 | <span class="inline-flex items-center"> | 264 | <span class="inline-flex items-center"> |
265 | <svg | 265 | <svg |
266 | class="w-5 h-5" | 266 | class="w-5 h-5" |
267 | aria-hidden="true" | 267 | aria-hidden="true" |
268 | fill="none" | 268 | fill="none" |
269 | stroke-linecap="round" | 269 | stroke-linecap="round" |
270 | stroke-linejoin="round" | 270 | stroke-linejoin="round" |
271 | stroke-width="2" | 271 | stroke-width="2" |
272 | viewBox="0 0 24 24" | 272 | viewBox="0 0 24 24" |
273 | stroke="currentColor"> | 273 | stroke="currentColor"> |
274 | <path | 274 | <path |
275 | d="M4 5a1 1 0 011-1h14a1 1 0 011 1v2a1 1 0 01-1 1H5a1 1 0 01-1-1V5zM4 13a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H5a1 1 0 01-1-1v-6zM16 13a1 1 0 011-1h2a1 1 0 011 1v6a1 1 0 01-1 1h-2a1 1 0 01-1-1v-6z" | 275 | d="M4 5a1 1 0 011-1h14a1 1 0 011 1v2a1 1 0 01-1 1H5a1 1 0 01-1-1V5zM4 13a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H5a1 1 0 01-1-1v-6zM16 13a1 1 0 011-1h2a1 1 0 011 1v6a1 1 0 01-1 1h-2a1 1 0 01-1-1v-6z" |
276 | ></path> | 276 | ></path> |
277 | </svg> | 277 | </svg> |
278 | <span class="ml-4">Справочники</span> | 278 | <span class="ml-4">Справочники</span> |
279 | </span> | 279 | </span> |
280 | <svg | 280 | <svg |
281 | class="w-4 h-4" | 281 | class="w-4 h-4" |
282 | aria-hidden="true" | 282 | aria-hidden="true" |
283 | fill="currentColor" | 283 | fill="currentColor" |
284 | viewBox="0 0 20 20" | 284 | viewBox="0 0 20 20" |
285 | > | 285 | > |
286 | <path | 286 | <path |
287 | fill-rule="evenodd" | 287 | fill-rule="evenodd" |
288 | d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" | 288 | d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" |
289 | clip-rule="evenodd" | 289 | clip-rule="evenodd" |
290 | ></path> | 290 | ></path> |
291 | </svg> | 291 | </svg> |
292 | </button> | 292 | </button> |
293 | <template x-if="open1"> | 293 | <template x-if="open1"> |
294 | <ul | 294 | <ul |
295 | x-transition:enter="transition-all ease-in-out duration-300" | 295 | x-transition:enter="transition-all ease-in-out duration-300" |
296 | x-transition:enter-start="opacity-25 max-h-0" | 296 | x-transition:enter-start="opacity-25 max-h-0" |
297 | x-transition:enter-end="opacity-100 max-h-xl" | 297 | x-transition:enter-end="opacity-100 max-h-xl" |
298 | x-transition:leave="transition-all ease-in-out duration-300" | 298 | x-transition:leave="transition-all ease-in-out duration-300" |
299 | x-transition:leave-start="opacity-100 max-h-xl" | 299 | x-transition:leave-start="opacity-100 max-h-xl" |
300 | x-transition:leave-end="opacity-0 max-h-0" | 300 | x-transition:leave-end="opacity-0 max-h-0" |
301 | class="p-2 mt-2 space-y-2 overflow-hidden text-sm font-medium text-gray-500 rounded-md shadow-inner bg-gray-50 dark:text-gray-400 dark:bg-gray-900" | 301 | class="p-2 mt-2 space-y-2 overflow-hidden text-sm font-medium text-gray-500 rounded-md shadow-inner bg-gray-50 dark:text-gray-400 dark:bg-gray-900" |
302 | aria-label="submenu" | 302 | aria-label="submenu" |
303 | > | 303 | > |
304 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> | 304 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> |
305 | <a class="w-full" href="{{ route('admin.job-titles.index') }}">Должности</a> | 305 | <a class="w-full" href="{{ route('admin.job-titles.index') }}">Должности</a> |
306 | </li> | 306 | </li> |
307 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> | 307 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> |
308 | <a class="w-full" href="{{ route('admin.categories.index') }}">Категории</a> | 308 | <a class="w-full" href="{{ route('admin.categories.index') }}">Категории</a> |
309 | </li> | 309 | </li> |
310 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> | 310 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> |
311 | <a class="w-full" href="{{ route('admin.infobloks.index') }}">Блоки-Дипломы</a> | 311 | <a class="w-full" href="{{ route('admin.infobloks.index') }}">Блоки-Дипломы</a> |
312 | </li> | 312 | </li> |
313 | 313 | ||
314 | </ul> | 314 | </ul> |
315 | </template> | 315 | </template> |
316 | </li> | 316 | </li> |
317 | 317 | ||
318 | 318 | ||
319 | <!-- Редактор --> | 319 | <!-- Редактор --> |
320 | <li class="relative px-6 py-3"> | 320 | <li class="relative px-6 py-3"> |
321 | <button | 321 | <button |
322 | class="inline-flex items-center justify-between w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" | 322 | class="inline-flex items-center justify-between w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" |
323 | @click="togglePagesMenu" | 323 | @click="togglePagesMenu" |
324 | aria-haspopup="true"> | 324 | aria-haspopup="true"> |
325 | <span class="inline-flex items-center"> | 325 | <span class="inline-flex items-center"> |
326 | <svg | 326 | <svg |
327 | class="w-5 h-5" | 327 | class="w-5 h-5" |
328 | aria-hidden="true" | 328 | aria-hidden="true" |
329 | fill="none" | 329 | fill="none" |
330 | stroke-linecap="round" | 330 | stroke-linecap="round" |
331 | stroke-linejoin="round" | 331 | stroke-linejoin="round" |
332 | stroke-width="2" | 332 | stroke-width="2" |
333 | viewBox="0 0 24 24" | 333 | viewBox="0 0 24 24" |
334 | stroke="currentColor"> | 334 | stroke="currentColor"> |
335 | <path | 335 | <path |
336 | d="M4 5a1 1 0 011-1h14a1 1 0 011 1v2a1 1 0 01-1 1H5a1 1 0 01-1-1V5zM4 13a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H5a1 1 0 01-1-1v-6zM16 13a1 1 0 011-1h2a1 1 0 011 1v6a1 1 0 01-1 1h-2a1 1 0 01-1-1v-6z" | 336 | d="M4 5a1 1 0 011-1h14a1 1 0 011 1v2a1 1 0 01-1 1H5a1 1 0 01-1-1V5zM4 13a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H5a1 1 0 01-1-1v-6zM16 13a1 1 0 011-1h2a1 1 0 011 1v6a1 1 0 01-1 1h-2a1 1 0 01-1-1v-6z" |
337 | ></path> | 337 | ></path> |
338 | </svg> | 338 | </svg> |
339 | <span class="ml-4">Редактор</span> | 339 | <span class="ml-4">Редактор</span> |
340 | </span> | 340 | </span> |
341 | <svg | 341 | <svg |
342 | class="w-4 h-4" | 342 | class="w-4 h-4" |
343 | aria-hidden="true" | 343 | aria-hidden="true" |
344 | fill="currentColor" | 344 | fill="currentColor" |
345 | viewBox="0 0 20 20" | 345 | viewBox="0 0 20 20" |
346 | > | 346 | > |
347 | <path | 347 | <path |
348 | fill-rule="evenodd" | 348 | fill-rule="evenodd" |
349 | d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" | 349 | d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" |
350 | clip-rule="evenodd" | 350 | clip-rule="evenodd" |
351 | ></path> | 351 | ></path> |
352 | </svg> | 352 | </svg> |
353 | </button> | 353 | </button> |
354 | <template x-if="isPagesMenuOpen"> | 354 | <template x-if="isPagesMenuOpen"> |
355 | <ul | 355 | <ul |
356 | x-transition:enter="transition-all ease-in-out duration-300" | 356 | x-transition:enter="transition-all ease-in-out duration-300" |
357 | x-transition:enter-start="opacity-25 max-h-0" | 357 | x-transition:enter-start="opacity-25 max-h-0" |
358 | x-transition:enter-end="opacity-100 max-h-xl" | 358 | x-transition:enter-end="opacity-100 max-h-xl" |
359 | x-transition:leave="transition-all ease-in-out duration-300" | 359 | x-transition:leave="transition-all ease-in-out duration-300" |
360 | x-transition:leave-start="opacity-100 max-h-xl" | 360 | x-transition:leave-start="opacity-100 max-h-xl" |
361 | x-transition:leave-end="opacity-0 max-h-0" | 361 | x-transition:leave-end="opacity-0 max-h-0" |
362 | class="p-2 mt-2 space-y-2 overflow-hidden text-sm font-medium text-gray-500 rounded-md shadow-inner bg-gray-50 dark:text-gray-400 dark:bg-gray-900" | 362 | class="p-2 mt-2 space-y-2 overflow-hidden text-sm font-medium text-gray-500 rounded-md shadow-inner bg-gray-50 dark:text-gray-400 dark:bg-gray-900" |
363 | aria-label="submenu" | 363 | aria-label="submenu" |
364 | > | 364 | > |
365 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> | 365 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> |
366 | <a class="w-full" href="{{ route('admin.editor-site') }}">Редактор сайта</a> | 366 | <a class="w-full" href="{{ route('admin.editor-site') }}">Редактор сайта</a> |
367 | </li> | 367 | </li> |
368 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> | 368 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> |
369 | <a class="w-full" href="{{ route('admin.edit-blocks') }}">Шапка-футер сайта</a> | 369 | <a class="w-full" href="{{ route('admin.edit-blocks') }}">Шапка-футер сайта</a> |
370 | </li> | 370 | </li> |
371 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> | 371 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> |
372 | <a class="w-full" href="{{ route('admin.reclames') }}">Реклама</a> | 372 | <a class="w-full" href="{{ route('admin.reclames') }}">Реклама</a> |
373 | </li> | 373 | </li> |
374 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> | 374 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> |
375 | <a class="w-full" href="{{ route('admin.editor-seo') }}">SEO сайта</a> | 375 | <a class="w-full" href="{{ route('admin.editor-seo') }}">SEO сайта</a> |
376 | </li> | 376 | </li> |
377 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> | 377 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> |
378 | <a class="w-full" href="{{ route('admin.editor-pages') }}">Редактор страниц</a> | 378 | <a class="w-full" href="{{ route('admin.editor-pages') }}">Редактор страниц</a> |
379 | </li> | 379 | </li> |
380 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> | 380 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> |
381 | <a class="w-full" href="{{ route('admin.job-titles-main') }}">Должности на главной</a> | 381 | <a class="w-full" href="{{ route('admin.job-titles-main') }}">Должности на главной</a> |
382 | </li> | 382 | </li> |
383 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> | 383 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> |
384 | <a class="w-full" href="{{ route('admin.employers-main') }}">Работодатели на главной</a> | 384 | <a class="w-full" href="{{ route('admin.employers-main') }}">Работодатели на главной</a> |
385 | </li> | 385 | </li> |
386 | </ul> | 386 | </ul> |
387 | </template> | 387 | </template> |
388 | </li> | 388 | </li> |
389 | 389 | ||
390 | </ul> | 390 | </ul> |
391 | <!--<div class="px-6 my-6"> | 391 | <!--<div class="px-6 my-6"> |
392 | <button | 392 | <button |
393 | class="flex items-center justify-between w-full px-4 py-2 text-sm font-medium leading-5 text-white transition-colors duration-150 bg-purple-600 border border-transparent rounded-lg active:bg-purple-600 hover:bg-purple-700 focus:outline-none focus:shadow-outline-purple" | 393 | class="flex items-center justify-between w-full px-4 py-2 text-sm font-medium leading-5 text-white transition-colors duration-150 bg-purple-600 border border-transparent rounded-lg active:bg-purple-600 hover:bg-purple-700 focus:outline-none focus:shadow-outline-purple" |
394 | > | 394 | > |
395 | Create account | 395 | Create account |
396 | <span class="ml-2" aria-hidden="true">+</span> | 396 | <span class="ml-2" aria-hidden="true">+</span> |
397 | </button> | 397 | </button> |
398 | </div>--> | 398 | </div>--> |
399 | </div> | 399 | </div> |
400 | </aside> | 400 | </aside> |
401 | <!-- Mobile sidebar --> | 401 | <!-- Mobile sidebar --> |
402 | <!-- Backdrop --> | 402 | <!-- Backdrop --> |
403 | <div | 403 | <div |
404 | x-show="isSideMenuOpen" | 404 | x-show="isSideMenuOpen" |
405 | x-transition:enter="transition ease-in-out duration-150" | 405 | x-transition:enter="transition ease-in-out duration-150" |
406 | x-transition:enter-start="opacity-0" | 406 | x-transition:enter-start="opacity-0" |
407 | x-transition:enter-end="opacity-100" | 407 | x-transition:enter-end="opacity-100" |
408 | x-transition:leave="transition ease-in-out duration-150" | 408 | x-transition:leave="transition ease-in-out duration-150" |
409 | x-transition:leave-start="opacity-100" | 409 | x-transition:leave-start="opacity-100" |
410 | x-transition:leave-end="opacity-0" | 410 | x-transition:leave-end="opacity-0" |
411 | class="fixed inset-0 z-10 flex items-end bg-black bg-opacity-50 sm:items-center sm:justify-center" | 411 | class="fixed inset-0 z-10 flex items-end bg-black bg-opacity-50 sm:items-center sm:justify-center" |
412 | ></div> | 412 | ></div> |
413 | <aside | 413 | <aside |
414 | class="fixed inset-y-0 z-20 flex-shrink-0 w-64 mt-16 overflow-y-auto bg-white dark:bg-gray-800 md:hidden" | 414 | class="fixed inset-y-0 z-20 flex-shrink-0 w-64 mt-16 overflow-y-auto bg-white dark:bg-gray-800 md:hidden" |
415 | x-show="isSideMenuOpen" | 415 | x-show="isSideMenuOpen" |
416 | x-transition:enter="transition ease-in-out duration-150" | 416 | x-transition:enter="transition ease-in-out duration-150" |
417 | x-transition:enter-start="opacity-0 transform -translate-x-20" | 417 | x-transition:enter-start="opacity-0 transform -translate-x-20" |
418 | x-transition:enter-end="opacity-100" | 418 | x-transition:enter-end="opacity-100" |
419 | x-transition:leave="transition ease-in-out duration-150" | 419 | x-transition:leave="transition ease-in-out duration-150" |
420 | x-transition:leave-start="opacity-100" | 420 | x-transition:leave-start="opacity-100" |
421 | x-transition:leave-end="opacity-0 transform -translate-x-20" | 421 | x-transition:leave-end="opacity-0 transform -translate-x-20" |
422 | @click.away="closeSideMenu" | 422 | @click.away="closeSideMenu" |
423 | @keydown.escape="closeSideMenu" | 423 | @keydown.escape="closeSideMenu" |
424 | > | 424 | > |
425 | <div class="py-4 text-gray-500 dark:text-gray-400"> | 425 | <div class="py-4 text-gray-500 dark:text-gray-400"> |
426 | <a | 426 | <a |
427 | class="ml-6 text-lg font-bold text-gray-800 dark:text-gray-200" | 427 | class="ml-6 text-lg font-bold text-gray-800 dark:text-gray-200" |
428 | href="{{ route('admin.index') }}" | 428 | href="{{ route('admin.index') }}" |
429 | > | 429 | > |
430 | Админка | 430 | Админка |
431 | </a> | 431 | </a> |
432 | <ul class="mt-6"> | 432 | <ul class="mt-6"> |
433 | <li class="relative px-6 py-3"> | 433 | <li class="relative px-6 py-3"> |
434 | <span | 434 | <span |
435 | class="absolute inset-y-0 left-0 w-1 bg-purple-600 rounded-tr-lg rounded-br-lg" | 435 | class="absolute inset-y-0 left-0 w-1 bg-purple-600 rounded-tr-lg rounded-br-lg" |
436 | aria-hidden="true" | 436 | aria-hidden="true" |
437 | ></span> | 437 | ></span> |
438 | <a | 438 | <a |
439 | class="inline-flex items-center w-full text-sm font-semibold text-gray-800 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200 dark:text-gray-100" | 439 | class="inline-flex items-center w-full text-sm font-semibold text-gray-800 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200 dark:text-gray-100" |
440 | href="{{ route('admin.index') }}" | 440 | href="{{ route('admin.index') }}" |
441 | > | 441 | > |
442 | <svg | 442 | <svg |
443 | class="w-5 h-5" | 443 | class="w-5 h-5" |
444 | aria-hidden="true" | 444 | aria-hidden="true" |
445 | fill="none" | 445 | fill="none" |
446 | stroke-linecap="round" | 446 | stroke-linecap="round" |
447 | stroke-linejoin="round" | 447 | stroke-linejoin="round" |
448 | stroke-width="2" | 448 | stroke-width="2" |
449 | viewBox="0 0 24 24" | 449 | viewBox="0 0 24 24" |
450 | stroke="currentColor" | 450 | stroke="currentColor" |
451 | > | 451 | > |
452 | <path | 452 | <path |
453 | d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" | 453 | d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" |
454 | ></path> | 454 | ></path> |
455 | </svg> | 455 | </svg> |
456 | <span class="ml-4">Главная страница</span> | 456 | <span class="ml-4">Главная страница</span> |
457 | </a> | 457 | </a> |
458 | </li> | 458 | </li> |
459 | </ul> | 459 | </ul> |
460 | <ul> | 460 | <ul> |
461 | <li class="relative px-6 py-3"> | 461 | <li class="relative px-6 py-3"> |
462 | <a class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" | 462 | <a class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" |
463 | href="{{ route('admin.users') }}"> | 463 | href="{{ route('admin.users') }}"> |
464 | <svg | 464 | <svg |
465 | class="w-5 h-5" | 465 | class="w-5 h-5" |
466 | aria-hidden="true" | 466 | aria-hidden="true" |
467 | fill="none" | 467 | fill="none" |
468 | stroke-linecap="round" | 468 | stroke-linecap="round" |
469 | stroke-linejoin="round" | 469 | stroke-linejoin="round" |
470 | stroke-width="2" | 470 | stroke-width="2" |
471 | viewBox="0 0 24 24" | 471 | viewBox="0 0 24 24" |
472 | stroke="currentColor" | 472 | stroke="currentColor" |
473 | > | 473 | > |
474 | <path | 474 | <path |
475 | d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01" | 475 | d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01" |
476 | ></path> | 476 | ></path> |
477 | </svg> | 477 | </svg> |
478 | <span class="ml-4">Пользователи</span> | 478 | <span class="ml-4">Пользователи</span> |
479 | </a> | 479 | </a> |
480 | </li> | 480 | </li> |
481 | <li class="relative px-6 py-3"> | 481 | <li class="relative px-6 py-3"> |
482 | <a | 482 | <a |
483 | class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" | 483 | class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" |
484 | href="{{ route('admin.employers') }}" | 484 | href="{{ route('admin.employers') }}" |
485 | > | 485 | > |
486 | <svg | 486 | <svg |
487 | class="w-5 h-5" | 487 | class="w-5 h-5" |
488 | aria-hidden="true" | 488 | aria-hidden="true" |
489 | fill="none" | 489 | fill="none" |
490 | stroke-linecap="round" | 490 | stroke-linecap="round" |
491 | stroke-linejoin="round" | 491 | stroke-linejoin="round" |
492 | stroke-width="2" | 492 | stroke-width="2" |
493 | viewBox="0 0 24 24" | 493 | viewBox="0 0 24 24" |
494 | stroke="currentColor" | 494 | stroke="currentColor" |
495 | > | 495 | > |
496 | <path | 496 | <path |
497 | d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10" | 497 | d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10" |
498 | ></path> | 498 | ></path> |
499 | </svg> | 499 | </svg> |
500 | <span class="ml-4">Работодатели</span> | 500 | <span class="ml-4">Работодатели</span> |
501 | </a> | 501 | </a> |
502 | </li> | 502 | </li> |
503 | <li class="relative px-6 py-3"> | 503 | <li class="relative px-6 py-3"> |
504 | <a | 504 | <a |
505 | class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" | 505 | class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" |
506 | href="{{ route('admin.workers') }}" | 506 | href="{{ route('admin.workers') }}" |
507 | > | 507 | > |
508 | <svg | 508 | <svg |
509 | class="w-5 h-5" | 509 | class="w-5 h-5" |
510 | aria-hidden="true" | 510 | aria-hidden="true" |
511 | fill="none" | 511 | fill="none" |
512 | stroke-linecap="round" | 512 | stroke-linecap="round" |
513 | stroke-linejoin="round" | 513 | stroke-linejoin="round" |
514 | stroke-width="2" | 514 | stroke-width="2" |
515 | viewBox="0 0 24 24" | 515 | viewBox="0 0 24 24" |
516 | stroke="currentColor" | 516 | stroke="currentColor" |
517 | > | 517 | > |
518 | <path | 518 | <path |
519 | d="M11 3.055A9.001 9.001 0 1020.945 13H11V3.055z" | 519 | d="M11 3.055A9.001 9.001 0 1020.945 13H11V3.055z" |
520 | ></path> | 520 | ></path> |
521 | <path d="M20.488 9H15V3.512A9.025 9.025 0 0120.488 9z"></path> | 521 | <path d="M20.488 9H15V3.512A9.025 9.025 0 0120.488 9z"></path> |
522 | </svg> | 522 | </svg> |
523 | <span class="ml-4">Соискатели</span> | 523 | <span class="ml-4">Соискатели</span> |
524 | </a> | 524 | </a> |
525 | </li> | 525 | </li> |
526 | <li class="relative px-6 py-3"> | 526 | <li class="relative px-6 py-3"> |
527 | <a | 527 | <a |
528 | class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" | 528 | class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" |
529 | href="{{ route('admin.ad-employers') }}" | 529 | href="{{ route('admin.ad-employers') }}" |
530 | > | 530 | > |
531 | <svg | 531 | <svg |
532 | class="w-5 h-5" | 532 | class="w-5 h-5" |
533 | aria-hidden="true" | 533 | aria-hidden="true" |
534 | fill="none" | 534 | fill="none" |
535 | stroke-linecap="round" | 535 | stroke-linecap="round" |
536 | stroke-linejoin="round" | 536 | stroke-linejoin="round" |
537 | stroke-width="2" | 537 | stroke-width="2" |
538 | viewBox="0 0 24 24" | 538 | viewBox="0 0 24 24" |
539 | stroke="currentColor" | 539 | stroke="currentColor" |
540 | > | 540 | > |
541 | <path | 541 | <path |
542 | d="M15 15l-2 5L9 9l11 4-5 2zm0 0l5 5M7.188 2.239l.777 2.897M5.136 7.965l-2.898-.777M13.95 4.05l-2.122 2.122m-5.657 5.656l-2.12 2.122" | 542 | d="M15 15l-2 5L9 9l11 4-5 2zm0 0l5 5M7.188 2.239l.777 2.897M5.136 7.965l-2.898-.777M13.95 4.05l-2.122 2.122m-5.657 5.656l-2.12 2.122" |
543 | ></path> | 543 | ></path> |
544 | </svg> | 544 | </svg> |
545 | <span class="ml-4">Вакансии</span> | 545 | <span class="ml-4">Вакансии</span> |
546 | </a> | 546 | </a> |
547 | </li> | 547 | </li> |
548 | <li class="relative px-6 py-3"> | 548 | <li class="relative px-6 py-3"> |
549 | <a | 549 | <a |
550 | class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" | 550 | class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" |
551 | href="{{ route('admin.messages') }}" | 551 | href="{{ route('admin.messages') }}" |
552 | > | 552 | > |
553 | <svg | 553 | <svg |
554 | class="w-5 h-5" | 554 | class="w-5 h-5" |
555 | aria-hidden="true" | 555 | aria-hidden="true" |
556 | fill="none" | 556 | fill="none" |
557 | stroke-linecap="round" | 557 | stroke-linecap="round" |
558 | stroke-linejoin="round" | 558 | stroke-linejoin="round" |
559 | stroke-width="2" | 559 | stroke-width="2" |
560 | viewBox="0 0 24 24" | 560 | viewBox="0 0 24 24" |
561 | stroke="currentColor" | 561 | stroke="currentColor" |
562 | > | 562 | > |
563 | <path d="M4 6h16M4 10h16M4 14h16M4 18h16"></path> | 563 | <path d="M4 6h16M4 10h16M4 14h16M4 18h16"></path> |
564 | </svg> | 564 | </svg> |
565 | <span class="ml-4">Сообщения</span> | 565 | <span class="ml-4">Сообщения</span> |
566 | </a> | 566 | </a> |
567 | </li> | 567 | </li> |
568 | <li class="relative px-6 py-3"> | 568 | <li class="relative px-6 py-3"> |
569 | <a class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" | 569 | <a class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" |
570 | href="{{ route('admin.groups') }}"> | 570 | href="{{ route('admin.groups') }}"> |
571 | <svg | 571 | <svg |
572 | class="w-5 h-5" | 572 | class="w-5 h-5" |
573 | aria-hidden="true" | 573 | aria-hidden="true" |
574 | fill="none" | 574 | fill="none" |
575 | stroke-linecap="round" | 575 | stroke-linecap="round" |
576 | stroke-linejoin="round" | 576 | stroke-linejoin="round" |
577 | stroke-width="2" | 577 | stroke-width="2" |
578 | viewBox="0 0 24 24" | 578 | viewBox="0 0 24 24" |
579 | stroke="currentColor" | 579 | stroke="currentColor" |
580 | > | 580 | > |
581 | <path | 581 | <path |
582 | d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01" | 582 | d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01" |
583 | ></path> | 583 | ></path> |
584 | </svg> | 584 | </svg> |
585 | <span class="ml-4">Группы пользователей</span> | 585 | <span class="ml-4">Группы пользователей</span> |
586 | </a> | 586 | </a> |
587 | </li> | 587 | </li> |
588 | <li class="relative px-6 py-3"> | 588 | <li class="relative px-6 py-3"> |
589 | <a class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" | 589 | <a class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" |
590 | href="{{ route('admin.roles') }}"> | 590 | href="{{ route('admin.roles') }}"> |
591 | <svg | 591 | <svg |
592 | class="w-5 h-5" | 592 | class="w-5 h-5" |
593 | aria-hidden="true" | 593 | aria-hidden="true" |
594 | fill="none" | 594 | fill="none" |
595 | stroke-linecap="round" | 595 | stroke-linecap="round" |
596 | stroke-linejoin="round" | 596 | stroke-linejoin="round" |
597 | stroke-width="2" | 597 | stroke-width="2" |
598 | viewBox="0 0 24 24" | 598 | viewBox="0 0 24 24" |
599 | stroke="currentColor" | 599 | stroke="currentColor" |
600 | > | 600 | > |
601 | <path | 601 | <path |
602 | d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01" | 602 | d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01" |
603 | ></path> | 603 | ></path> |
604 | </svg> | 604 | </svg> |
605 | <span class="ml-4">Роли пользователей</span> | 605 | <span class="ml-4">Роли пользователей</span> |
606 | </a> | 606 | </a> |
607 | </li> | 607 | </li> |
608 | <li class="relative px-6 py-3"> | 608 | <li class="relative px-6 py-3"> |
609 | <a | 609 | <a |
610 | class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" | 610 | class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" |
611 | href="{{ route('admin.statics') }}" | 611 | href="{{ route('admin.statics') }}" |
612 | > | 612 | > |
613 | <svg | 613 | <svg |
614 | class="w-5 h-5" | 614 | class="w-5 h-5" |
615 | aria-hidden="true" | 615 | aria-hidden="true" |
616 | fill="none" | 616 | fill="none" |
617 | stroke-linecap="round" | 617 | stroke-linecap="round" |
618 | stroke-linejoin="round" | 618 | stroke-linejoin="round" |
619 | stroke-width="2" | 619 | stroke-width="2" |
620 | viewBox="0 0 24 24" | 620 | viewBox="0 0 24 24" |
621 | stroke="currentColor" | 621 | stroke="currentColor" |
622 | > | 622 | > |
623 | <path | 623 | <path |
624 | d="M11 3.055A9.001 9.001 0 1020.945 13H11V3.055z" | 624 | d="M11 3.055A9.001 9.001 0 1020.945 13H11V3.055z" |
625 | ></path> | 625 | ></path> |
626 | <path d="M20.488 9H15V3.512A9.025 9.025 0 0120.488 9z"></path> | 626 | <path d="M20.488 9H15V3.512A9.025 9.025 0 0120.488 9z"></path> |
627 | </svg> | 627 | </svg> |
628 | <span class="ml-4">Статистика</span> | 628 | <span class="ml-4">Статистика</span> |
629 | </a> | 629 | </a> |
630 | </li> | 630 | </li> |
631 | <li class="relative px-6 py-3"> | 631 | <li class="relative px-6 py-3"> |
632 | <a | 632 | <a |
633 | class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" | 633 | class="inline-flex items-center w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" |
634 | href="{{ route('admin.messages') }}" | 634 | href="{{ route('admin.messages') }}" |
635 | > | 635 | > |
636 | <svg | 636 | <svg |
637 | class="w-5 h-5" | 637 | class="w-5 h-5" |
638 | aria-hidden="true" | 638 | aria-hidden="true" |
639 | fill="none" | 639 | fill="none" |
640 | stroke-linecap="round" | 640 | stroke-linecap="round" |
641 | stroke-linejoin="round" | 641 | stroke-linejoin="round" |
642 | stroke-width="2" | 642 | stroke-width="2" |
643 | viewBox="0 0 24 24" | 643 | viewBox="0 0 24 24" |
644 | stroke="currentColor" | 644 | stroke="currentColor" |
645 | > | 645 | > |
646 | <path d="M4 6h16M4 10h16M4 14h16M4 18h16"></path> | 646 | <path d="M4 6h16M4 10h16M4 14h16M4 18h16"></path> |
647 | </svg> | 647 | </svg> |
648 | <span class="ml-4">Сообщения</span> | 648 | <span class="ml-4">Сообщения</span> |
649 | </a> | 649 | </a> |
650 | </li> | 650 | </li> |
651 | <!-- Справочники --> | 651 | <!-- Справочники --> |
652 | <li class="relative px-6 py-3" x-data="{ open2: false }"> | 652 | <li class="relative px-6 py-3" x-data="{ open2: false }"> |
653 | <button | 653 | <button |
654 | class="inline-flex items-center justify-between w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" | 654 | class="inline-flex items-center justify-between w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" |
655 | @click="open2=!open2" | 655 | @click="open2=!open2" |
656 | aria-haspopup="true"> | 656 | aria-haspopup="true"> |
657 | <span class="inline-flex items-center"> | 657 | <span class="inline-flex items-center"> |
658 | <svg | 658 | <svg |
659 | class="w-5 h-5" | 659 | class="w-5 h-5" |
660 | aria-hidden="true" | 660 | aria-hidden="true" |
661 | fill="none" | 661 | fill="none" |
662 | stroke-linecap="round" | 662 | stroke-linecap="round" |
663 | stroke-linejoin="round" | 663 | stroke-linejoin="round" |
664 | stroke-width="2" | 664 | stroke-width="2" |
665 | viewBox="0 0 24 24" | 665 | viewBox="0 0 24 24" |
666 | stroke="currentColor"> | 666 | stroke="currentColor"> |
667 | <path | 667 | <path |
668 | d="M4 5a1 1 0 011-1h14a1 1 0 011 1v2a1 1 0 01-1 1H5a1 1 0 01-1-1V5zM4 13a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H5a1 1 0 01-1-1v-6zM16 13a1 1 0 011-1h2a1 1 0 011 1v6a1 1 0 01-1 1h-2a1 1 0 01-1-1v-6z" | 668 | d="M4 5a1 1 0 011-1h14a1 1 0 011 1v2a1 1 0 01-1 1H5a1 1 0 01-1-1V5zM4 13a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H5a1 1 0 01-1-1v-6zM16 13a1 1 0 011-1h2a1 1 0 011 1v6a1 1 0 01-1 1h-2a1 1 0 01-1-1v-6z" |
669 | ></path> | 669 | ></path> |
670 | </svg> | 670 | </svg> |
671 | <span class="ml-4">Справочники</span> | 671 | <span class="ml-4">Справочники</span> |
672 | </span> | 672 | </span> |
673 | <svg | 673 | <svg |
674 | class="w-4 h-4" | 674 | class="w-4 h-4" |
675 | aria-hidden="true" | 675 | aria-hidden="true" |
676 | fill="currentColor" | 676 | fill="currentColor" |
677 | viewBox="0 0 20 20" | 677 | viewBox="0 0 20 20" |
678 | > | 678 | > |
679 | <path | 679 | <path |
680 | fill-rule="evenodd" | 680 | fill-rule="evenodd" |
681 | d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" | 681 | d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" |
682 | clip-rule="evenodd" | 682 | clip-rule="evenodd" |
683 | ></path> | 683 | ></path> |
684 | </svg> | 684 | </svg> |
685 | </button> | 685 | </button> |
686 | <template x-if="open2"> | 686 | <template x-if="open2"> |
687 | <ul | 687 | <ul |
688 | x-transition:enter="transition-all ease-in-out duration-300" | 688 | x-transition:enter="transition-all ease-in-out duration-300" |
689 | x-transition:enter-start="opacity-25 max-h-0" | 689 | x-transition:enter-start="opacity-25 max-h-0" |
690 | x-transition:enter-end="opacity-100 max-h-xl" | 690 | x-transition:enter-end="opacity-100 max-h-xl" |
691 | x-transition:leave="transition-all ease-in-out duration-300" | 691 | x-transition:leave="transition-all ease-in-out duration-300" |
692 | x-transition:leave-start="opacity-100 max-h-xl" | 692 | x-transition:leave-start="opacity-100 max-h-xl" |
693 | x-transition:leave-end="opacity-0 max-h-0" | 693 | x-transition:leave-end="opacity-0 max-h-0" |
694 | class="p-2 mt-2 space-y-2 overflow-hidden text-sm font-medium text-gray-500 rounded-md shadow-inner bg-gray-50 dark:text-gray-400 dark:bg-gray-900" | 694 | class="p-2 mt-2 space-y-2 overflow-hidden text-sm font-medium text-gray-500 rounded-md shadow-inner bg-gray-50 dark:text-gray-400 dark:bg-gray-900" |
695 | aria-label="submenu" | 695 | aria-label="submenu" |
696 | > | 696 | > |
697 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> | 697 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> |
698 | <a class="w-full" href="{{ route('admin.job-titles.index') }}">Должности</a> | 698 | <a class="w-full" href="{{ route('admin.job-titles.index') }}">Должности</a> |
699 | </li> | 699 | </li> |
700 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> | 700 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> |
701 | <a class="w-full" href="{{ route('admin.categories.index') }}">Категории</a> | 701 | <a class="w-full" href="{{ route('admin.categories.index') }}">Категории</a> |
702 | </li> | 702 | </li> |
703 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> | 703 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> |
704 | <a class="w-full" href="{{ route('admin.infobloks.index') }}">Блоки-Дипломы</a> | 704 | <a class="w-full" href="{{ route('admin.infobloks.index') }}">Блоки-Дипломы</a> |
705 | </li> | 705 | </li> |
706 | 706 | ||
707 | </ul> | 707 | </ul> |
708 | </template> | 708 | </template> |
709 | </li> | 709 | </li> |
710 | 710 | ||
711 | 711 | ||
712 | <!-- Редактор --> | 712 | <!-- Редактор --> |
713 | <li class="relative px-6 py-3"> | 713 | <li class="relative px-6 py-3"> |
714 | <button | 714 | <button |
715 | class="inline-flex items-center justify-between w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" | 715 | class="inline-flex items-center justify-between w-full text-sm font-semibold transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200" |
716 | @click="togglePagesMenu" | 716 | @click="togglePagesMenu" |
717 | aria-haspopup="true" | 717 | aria-haspopup="true" |
718 | > | 718 | > |
719 | <span class="inline-flex items-center"> | 719 | <span class="inline-flex items-center"> |
720 | <svg | 720 | <svg |
721 | class="w-5 h-5" | 721 | class="w-5 h-5" |
722 | aria-hidden="true" | 722 | aria-hidden="true" |
723 | fill="none" | 723 | fill="none" |
724 | stroke-linecap="round" | 724 | stroke-linecap="round" |
725 | stroke-linejoin="round" | 725 | stroke-linejoin="round" |
726 | stroke-width="2" | 726 | stroke-width="2" |
727 | viewBox="0 0 24 24" | 727 | viewBox="0 0 24 24" |
728 | stroke="currentColor" | 728 | stroke="currentColor" |
729 | > | 729 | > |
730 | <path | 730 | <path |
731 | d="M4 5a1 1 0 011-1h14a1 1 0 011 1v2a1 1 0 01-1 1H5a1 1 0 01-1-1V5zM4 13a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H5a1 1 0 01-1-1v-6zM16 13a1 1 0 011-1h2a1 1 0 011 1v6a1 1 0 01-1 1h-2a1 1 0 01-1-1v-6z" | 731 | d="M4 5a1 1 0 011-1h14a1 1 0 011 1v2a1 1 0 01-1 1H5a1 1 0 01-1-1V5zM4 13a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H5a1 1 0 01-1-1v-6zM16 13a1 1 0 011-1h2a1 1 0 011 1v6a1 1 0 01-1 1h-2a1 1 0 01-1-1v-6z" |
732 | ></path> | 732 | ></path> |
733 | </svg> | 733 | </svg> |
734 | <span class="ml-4">Редактор</span> | 734 | <span class="ml-4">Редактор</span> |
735 | </span> | 735 | </span> |
736 | <svg | 736 | <svg |
737 | class="w-4 h-4" | 737 | class="w-4 h-4" |
738 | aria-hidden="true" | 738 | aria-hidden="true" |
739 | fill="currentColor" | 739 | fill="currentColor" |
740 | viewBox="0 0 20 20" | 740 | viewBox="0 0 20 20" |
741 | > | 741 | > |
742 | <path | 742 | <path |
743 | fill-rule="evenodd" | 743 | fill-rule="evenodd" |
744 | d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" | 744 | d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" |
745 | clip-rule="evenodd" | 745 | clip-rule="evenodd" |
746 | ></path> | 746 | ></path> |
747 | </svg> | 747 | </svg> |
748 | </button> | 748 | </button> |
749 | <template x-if="isPagesMenuOpen"> | 749 | <template x-if="isPagesMenuOpen"> |
750 | <ul | 750 | <ul |
751 | x-transition:enter="transition-all ease-in-out duration-300" | 751 | x-transition:enter="transition-all ease-in-out duration-300" |
752 | x-transition:enter-start="opacity-25 max-h-0" | 752 | x-transition:enter-start="opacity-25 max-h-0" |
753 | x-transition:enter-end="opacity-100 max-h-xl" | 753 | x-transition:enter-end="opacity-100 max-h-xl" |
754 | x-transition:leave="transition-all ease-in-out duration-300" | 754 | x-transition:leave="transition-all ease-in-out duration-300" |
755 | x-transition:leave-start="opacity-100 max-h-xl" | 755 | x-transition:leave-start="opacity-100 max-h-xl" |
756 | x-transition:leave-end="opacity-0 max-h-0" | 756 | x-transition:leave-end="opacity-0 max-h-0" |
757 | class="p-2 mt-2 space-y-2 overflow-hidden text-sm font-medium text-gray-500 rounded-md shadow-inner bg-gray-50 dark:text-gray-400 dark:bg-gray-900" | 757 | class="p-2 mt-2 space-y-2 overflow-hidden text-sm font-medium text-gray-500 rounded-md shadow-inner bg-gray-50 dark:text-gray-400 dark:bg-gray-900" |
758 | aria-label="submenu" | 758 | aria-label="submenu" |
759 | > | 759 | > |
760 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> | 760 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> |
761 | <a class="w-full" href="{{ route('admin.editor-site') }}">Редактор сайта</a> | 761 | <a class="w-full" href="{{ route('admin.editor-site') }}">Редактор сайта</a> |
762 | </li> | 762 | </li> |
763 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> | 763 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> |
764 | <a class="w-full" href="{{ route('admin.edit-blocks') }}">Шапка-футер сайта</a> | 764 | <a class="w-full" href="{{ route('admin.edit-blocks') }}">Шапка-футер сайта</a> |
765 | </li> | 765 | </li> |
766 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> | 766 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> |
767 | <a class="w-full" href="{{ route('admin.reclames') }}">Реклама</a> | 767 | <a class="w-full" href="{{ route('admin.reclames') }}">Реклама</a> |
768 | </li> | 768 | </li> |
769 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> | 769 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> |
770 | <a class="w-full" href="{{ route('admin.editor-seo') }}">SEO сайта</a> | 770 | <a class="w-full" href="{{ route('admin.editor-seo') }}">SEO сайта</a> |
771 | </li> | 771 | </li> |
772 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> | 772 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> |
773 | <a class="w-full" href="{{ route('admin.editor-pages') }}">Редактор страниц</a> | 773 | <a class="w-full" href="{{ route('admin.editor-pages') }}">Редактор страниц</a> |
774 | </li> | 774 | </li> |
775 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> | 775 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> |
776 | <a class="w-full" href="{{ route('admin.job-titles-main') }}">Должности на главной</a> | 776 | <a class="w-full" href="{{ route('admin.job-titles-main') }}">Должности на главной</a> |
777 | </li> | 777 | </li> |
778 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> | 778 | <li class="px-2 py-1 transition-colors duration-150 hover:text-gray-800 dark:hover:text-gray-200"> |
779 | <a class="w-full" href="{{ route('admin.employers-main') }}">Работодатели на главной</a> | 779 | <a class="w-full" href="{{ route('admin.employers-main') }}">Работодатели на главной</a> |
780 | </li> | 780 | </li> |
781 | 781 | ||
782 | </ul> | 782 | </ul> |
783 | </template> | 783 | </template> |
784 | </li> | 784 | </li> |
785 | </ul> | 785 | </ul> |
786 | <!--<div class="px-6 my-6"> | 786 | <!--<div class="px-6 my-6"> |
787 | <button class="flex items-center justify-between px-4 py-2 text-sm font-medium leading-5 text-white transition-colors duration-150 bg-purple-600 border border-transparent rounded-lg active:bg-purple-600 hover:bg-purple-700 focus:outline-none focus:shadow-outline-purple"> | 787 | <button class="flex items-center justify-between px-4 py-2 text-sm font-medium leading-5 text-white transition-colors duration-150 bg-purple-600 border border-transparent rounded-lg active:bg-purple-600 hover:bg-purple-700 focus:outline-none focus:shadow-outline-purple"> |
788 | Create account | 788 | Create account |
789 | <span class="ml-2" aria-hidden="true">+</span> | 789 | <span class="ml-2" aria-hidden="true">+</span> |
790 | </button> | 790 | </button> |
791 | </div>--> | 791 | </div>--> |
792 | </div> | 792 | </div> |
793 | </aside> | 793 | </aside> |
794 | <div class="flex flex-col flex-1 w-full"> | 794 | <div class="flex flex-col flex-1 w-full"> |
795 | <header class="z-10 py-4 bg-white shadow-md dark:bg-gray-800"> | 795 | <header class="z-10 py-4 bg-white shadow-md dark:bg-gray-800"> |
796 | <div | 796 | <div |
797 | class="container flex items-center justify-between h-full px-6 mx-auto text-purple-600 dark:text-purple-300" | 797 | class="container flex items-center justify-between h-full px-6 mx-auto text-purple-600 dark:text-purple-300" |
798 | > | 798 | > |
799 | <!-- Mobile hamburger --> | 799 | <!-- Mobile hamburger --> |
800 | <button | 800 | <button |
801 | class="p-1 mr-5 -ml-1 rounded-md md:hidden focus:outline-none focus:shadow-outline-purple" | 801 | class="p-1 mr-5 -ml-1 rounded-md md:hidden focus:outline-none focus:shadow-outline-purple" |
802 | @click="toggleSideMenu" | 802 | @click="toggleSideMenu" |
803 | aria-label="Menu" | 803 | aria-label="Menu" |
804 | > | 804 | > |
805 | <svg | 805 | <svg |
806 | class="w-6 h-6" | 806 | class="w-6 h-6" |
807 | aria-hidden="true" | 807 | aria-hidden="true" |
808 | fill="currentColor" | 808 | fill="currentColor" |
809 | viewBox="0 0 20 20" | 809 | viewBox="0 0 20 20" |
810 | > | 810 | > |
811 | <path | 811 | <path |
812 | fill-rule="evenodd" | 812 | fill-rule="evenodd" |
813 | d="M3 5a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zM3 10a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zM3 15a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1z" | 813 | d="M3 5a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zM3 10a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zM3 15a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1z" |
814 | clip-rule="evenodd" | 814 | clip-rule="evenodd" |
815 | ></path> | 815 | ></path> |
816 | </svg> | 816 | </svg> |
817 | </button> | 817 | </button> |
818 | <!-- Search input --> | 818 | <!-- Search input --> |
819 | <div class="flex justify-center flex-1 lg:mr-32"> | 819 | <div class="flex justify-center flex-1 lg:mr-32"> |
820 | <div | 820 | <div |
821 | class="relative w-full max-w-xl mr-6 focus-within:text-purple-500" | 821 | class="relative w-full max-w-xl mr-6 focus-within:text-purple-500" |
822 | > | 822 | > |
823 | 823 | ||
824 | @yield('search') | 824 | @yield('search') |
825 | </div> | 825 | </div> |
826 | </div> | 826 | </div> |
827 | <ul class="flex items-center flex-shrink-0 space-x-6"> | 827 | <ul class="flex items-center flex-shrink-0 space-x-6"> |
828 | <!-- Theme toggler --> | 828 | <!-- Theme toggler --> |
829 | <li class="flex"> | 829 | <li class="flex"> |
830 | <button | 830 | <button |
831 | class="rounded-md focus:outline-none focus:shadow-outline-purple" | 831 | class="rounded-md focus:outline-none focus:shadow-outline-purple" |
832 | @click="toggleTheme" | 832 | @click="toggleTheme" |
833 | aria-label="Toggle color mode" | 833 | aria-label="Toggle color mode" |
834 | > | 834 | > |
835 | <template x-if="!dark"> | 835 | <template x-if="!dark"> |
836 | <svg | 836 | <svg |
837 | class="w-5 h-5" | 837 | class="w-5 h-5" |
838 | aria-hidden="true" | 838 | aria-hidden="true" |
839 | fill="currentColor" | 839 | fill="currentColor" |
840 | viewBox="0 0 20 20" | 840 | viewBox="0 0 20 20" |
841 | > | 841 | > |
842 | <path | 842 | <path |
843 | d="M17.293 13.293A8 8 0 016.707 2.707a8.001 8.001 0 1010.586 10.586z" | 843 | d="M17.293 13.293A8 8 0 016.707 2.707a8.001 8.001 0 1010.586 10.586z" |
844 | ></path> | 844 | ></path> |
845 | </svg> | 845 | </svg> |
846 | </template> | 846 | </template> |
847 | <template x-if="dark"> | 847 | <template x-if="dark"> |
848 | <svg | 848 | <svg |
849 | class="w-5 h-5" | 849 | class="w-5 h-5" |
850 | aria-hidden="true" | 850 | aria-hidden="true" |
851 | fill="currentColor" | 851 | fill="currentColor" |
852 | viewBox="0 0 20 20" | 852 | viewBox="0 0 20 20" |
853 | > | 853 | > |
854 | <path | 854 | <path |
855 | fill-rule="evenodd" | 855 | fill-rule="evenodd" |
856 | d="M10 2a1 1 0 011 1v1a1 1 0 11-2 0V3a1 1 0 011-1zm4 8a4 4 0 11-8 0 4 4 0 018 0zm-.464 4.95l.707.707a1 1 0 001.414-1.414l-.707-.707a1 1 0 00-1.414 1.414zm2.12-10.607a1 1 0 010 1.414l-.706.707a1 1 0 11-1.414-1.414l.707-.707a1 1 0 011.414 0zM17 11a1 1 0 100-2h-1a1 1 0 100 2h1zm-7 4a1 1 0 011 1v1a1 1 0 11-2 0v-1a1 1 0 011-1zM5.05 6.464A1 1 0 106.465 5.05l-.708-.707a1 1 0 00-1.414 1.414l.707.707zm1.414 8.486l-.707.707a1 1 0 01-1.414-1.414l.707-.707a1 1 0 011.414 1.414zM4 11a1 1 0 100-2H3a1 1 0 000 2h1z" | 856 | d="M10 2a1 1 0 011 1v1a1 1 0 11-2 0V3a1 1 0 011-1zm4 8a4 4 0 11-8 0 4 4 0 018 0zm-.464 4.95l.707.707a1 1 0 001.414-1.414l-.707-.707a1 1 0 00-1.414 1.414zm2.12-10.607a1 1 0 010 1.414l-.706.707a1 1 0 11-1.414-1.414l.707-.707a1 1 0 011.414 0zM17 11a1 1 0 100-2h-1a1 1 0 100 2h1zm-7 4a1 1 0 011 1v1a1 1 0 11-2 0v-1a1 1 0 011-1zM5.05 6.464A1 1 0 106.465 5.05l-.708-.707a1 1 0 00-1.414 1.414l.707.707zm1.414 8.486l-.707.707a1 1 0 01-1.414-1.414l.707-.707a1 1 0 011.414 1.414zM4 11a1 1 0 100-2H3a1 1 0 000 2h1z" |
857 | clip-rule="evenodd" | 857 | clip-rule="evenodd" |
858 | ></path> | 858 | ></path> |
859 | </svg> | 859 | </svg> |
860 | </template> | 860 | </template> |
861 | </button> | 861 | </button> |
862 | </li> | 862 | </li> |
863 | <!-- Notifications menu --> | 863 | <!-- Notifications menu --> |
864 | <li class="relative"> | 864 | <li class="relative"> |
865 | <button | 865 | <button |
866 | class="relative align-middle rounded-md focus:outline-none focus:shadow-outline-purple" | 866 | class="relative align-middle rounded-md focus:outline-none focus:shadow-outline-purple" |
867 | @click="toggleNotificationsMenu" | 867 | @click="toggleNotificationsMenu" |
868 | @keydown.escape="closeNotificationsMenu" | 868 | @keydown.escape="closeNotificationsMenu" |
869 | aria-label="Notifications" | 869 | aria-label="Notifications" |
870 | aria-haspopup="true" | 870 | aria-haspopup="true" |
871 | > | 871 | > |
872 | <svg | 872 | <svg |
873 | class="w-5 h-5" | 873 | class="w-5 h-5" |
874 | aria-hidden="true" | 874 | aria-hidden="true" |
875 | fill="currentColor" | 875 | fill="currentColor" |
876 | viewBox="0 0 20 20" | 876 | viewBox="0 0 20 20" |
877 | > | 877 | > |
878 | <path | 878 | <path |
879 | d="M10 2a6 6 0 00-6 6v3.586l-.707.707A1 1 0 004 14h12a1 1 0 00.707-1.707L16 11.586V8a6 6 0 00-6-6zM10 18a3 3 0 01-3-3h6a3 3 0 01-3 3z" | 879 | d="M10 2a6 6 0 00-6 6v3.586l-.707.707A1 1 0 004 14h12a1 1 0 00.707-1.707L16 11.586V8a6 6 0 00-6-6zM10 18a3 3 0 01-3-3h6a3 3 0 01-3 3z" |
880 | ></path> | 880 | ></path> |
881 | </svg> | 881 | </svg> |
882 | <!-- Notification badge --> | 882 | <!-- Notification badge --> |
883 | <span | 883 | <span |
884 | aria-hidden="true" | 884 | aria-hidden="true" |
885 | class="absolute top-0 right-0 inline-block w-3 h-3 transform translate-x-1 -translate-y-1 bg-red-600 border-2 border-white rounded-full dark:border-gray-800" | 885 | class="absolute top-0 right-0 inline-block w-3 h-3 transform translate-x-1 -translate-y-1 bg-red-600 border-2 border-white rounded-full dark:border-gray-800" |
886 | ></span> | 886 | ></span> |
887 | </button> | 887 | </button> |
888 | <template x-if="isNotificationsMenuOpen"> | 888 | <template x-if="isNotificationsMenuOpen"> |
889 | <ul | 889 | <ul |
890 | x-transition:leave="transition ease-in duration-150" | 890 | x-transition:leave="transition ease-in duration-150" |
891 | x-transition:leave-start="opacity-100" | 891 | x-transition:leave-start="opacity-100" |
892 | x-transition:leave-end="opacity-0" | 892 | x-transition:leave-end="opacity-0" |
893 | @click.away="closeNotificationsMenu" | 893 | @click.away="closeNotificationsMenu" |
894 | @keydown.escape="closeNotificationsMenu" | 894 | @keydown.escape="closeNotificationsMenu" |
895 | class="absolute right-0 w-56 p-2 mt-2 space-y-2 text-gray-600 bg-white border border-gray-100 rounded-md shadow-md dark:text-gray-300 dark:border-gray-700 dark:bg-gray-700" | 895 | class="absolute right-0 w-56 p-2 mt-2 space-y-2 text-gray-600 bg-white border border-gray-100 rounded-md shadow-md dark:text-gray-300 dark:border-gray-700 dark:bg-gray-700" |
896 | > | 896 | > |
897 | <li class="flex"> | 897 | <li class="flex"> |
898 | <a | 898 | <a |
899 | class="inline-flex items-center justify-between w-full px-2 py-1 text-sm font-semibold transition-colors duration-150 rounded-md hover:bg-gray-100 hover:text-gray-800 dark:hover:bg-gray-800 dark:hover:text-gray-200" | 899 | class="inline-flex items-center justify-between w-full px-2 py-1 text-sm font-semibold transition-colors duration-150 rounded-md hover:bg-gray-100 hover:text-gray-800 dark:hover:bg-gray-800 dark:hover:text-gray-200" |
900 | href="{{ route('admin.admin-messages') }}" | 900 | href="{{ route('admin.admin-messages') }}" |
901 | > | 901 | > |
902 | <span>Сообщения</span> | 902 | <span>Сообщения</span> |
903 | @if($MsgCount > 0) | ||
903 | <span | 904 | <span |
904 | class="inline-flex items-center justify-center px-2 py-1 text-xs font-bold leading-none text-red-600 bg-red-100 rounded-full dark:text-red-100 dark:bg-red-600" | 905 | class="inline-flex items-center justify-center px-2 py-1 text-xs font-bold leading-none text-red-600 bg-red-100 rounded-full dark:text-red-100 dark:bg-red-600" |
905 | > | 906 | > |
906 | 13 | 907 | |
907 | </span> | 908 | {{ $MsgCount }} |
909 | </span> | ||
910 | @endif | ||
908 | </a> | 911 | </a> |
909 | </li> | 912 | </li> |
910 | <!--<li class="flex"> | 913 | <!--<li class="flex"> |
911 | <a | 914 | <a |
912 | class="inline-flex items-center justify-between w-full px-2 py-1 text-sm font-semibold transition-colors duration-150 rounded-md hover:bg-gray-100 hover:text-gray-800 dark:hover:bg-gray-800 dark:hover:text-gray-200" | 915 | class="inline-flex items-center justify-between w-full px-2 py-1 text-sm font-semibold transition-colors duration-150 rounded-md hover:bg-gray-100 hover:text-gray-800 dark:hover:bg-gray-800 dark:hover:text-gray-200" |
913 | href="#" | 916 | href="#" |
914 | > | 917 | > |
915 | <span>Логи</span> | 918 | <span>Логи</span> |
916 | </a> | 919 | </a> |
917 | </li>--> | 920 | </li>--> |
918 | </ul> | 921 | </ul> |
919 | </template> | 922 | </template> |
920 | </li> | 923 | </li> |
921 | <!-- Profile menu --> | 924 | <!-- Profile menu --> |
922 | <li class="relative"> | 925 | <li class="relative"> |
923 | <button | 926 | <button |
924 | class="align-middle rounded-full focus:shadow-outline-purple focus:outline-none" | 927 | class="align-middle rounded-full focus:shadow-outline-purple focus:outline-none" |
925 | @click="toggleProfileMenu" | 928 | @click="toggleProfileMenu" |
926 | @keydown.escape="closeProfileMenu" | 929 | @keydown.escape="closeProfileMenu" |
927 | aria-label="Account" | 930 | aria-label="Account" |
928 | aria-haspopup="true" | 931 | aria-haspopup="true" |
929 | > | 932 | > |
930 | <img | 933 | <img |
931 | class="object-cover w-8 h-8 rounded-full" | 934 | class="object-cover w-8 h-8 rounded-full" |
932 | src="{{ asset('assets/img/profile.jpg') }}" | 935 | src="{{ asset('assets/img/profile.jpg') }}" |
933 | alt="" | 936 | alt="" |
934 | aria-hidden="true" | 937 | aria-hidden="true" |
935 | /> | 938 | /> |
936 | </button> | 939 | </button> |
937 | <template x-if="isProfileMenuOpen"> | 940 | <template x-if="isProfileMenuOpen"> |
938 | <ul | 941 | <ul |
939 | x-transition:leave="transition ease-in duration-150" | 942 | x-transition:leave="transition ease-in duration-150" |
940 | x-transition:leave-start="opacity-100" | 943 | x-transition:leave-start="opacity-100" |
941 | x-transition:leave-end="opacity-0" | 944 | x-transition:leave-end="opacity-0" |
942 | @click.away="closeProfileMenu" | 945 | @click.away="closeProfileMenu" |
943 | @keydown.escape="closeProfileMenu" | 946 | @keydown.escape="closeProfileMenu" |
944 | class="absolute right-0 w-56 p-2 mt-2 space-y-2 text-gray-600 bg-white border border-gray-100 rounded-md shadow-md dark:border-gray-700 dark:text-gray-300 dark:bg-gray-700" | 947 | class="absolute right-0 w-56 p-2 mt-2 space-y-2 text-gray-600 bg-white border border-gray-100 rounded-md shadow-md dark:border-gray-700 dark:text-gray-300 dark:bg-gray-700" |
945 | aria-label="submenu" | 948 | aria-label="submenu" |
946 | > | 949 | > |
947 | <li class="flex"> | 950 | <li class="flex"> |
948 | <a | 951 | <a |
949 | class="inline-flex items-center w-full px-2 py-1 text-sm font-semibold transition-colors duration-150 rounded-md hover:bg-gray-100 hover:text-gray-800 dark:hover:bg-gray-800 dark:hover:text-gray-200" | 952 | class="inline-flex items-center w-full px-2 py-1 text-sm font-semibold transition-colors duration-150 rounded-md hover:bg-gray-100 hover:text-gray-800 dark:hover:bg-gray-800 dark:hover:text-gray-200" |
950 | href="{{ route('admin.profile') }}" | 953 | href="{{ route('admin.profile') }}" |
951 | > | 954 | > |
952 | <svg | 955 | <svg |
953 | class="w-4 h-4 mr-3" | 956 | class="w-4 h-4 mr-3" |
954 | aria-hidden="true" | 957 | aria-hidden="true" |
955 | fill="none" | 958 | fill="none" |
956 | stroke-linecap="round" | 959 | stroke-linecap="round" |
957 | stroke-linejoin="round" | 960 | stroke-linejoin="round" |
958 | stroke-width="2" | 961 | stroke-width="2" |
959 | viewBox="0 0 24 24" | 962 | viewBox="0 0 24 24" |
960 | stroke="currentColor" | 963 | stroke="currentColor" |
961 | > | 964 | > |
962 | <path | 965 | <path |
963 | d="M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z" | 966 | d="M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z" |
964 | ></path> | 967 | ></path> |
965 | </svg> | 968 | </svg> |
966 | <span>Профиль</span> | 969 | <span>Профиль</span> |
967 | </a> | 970 | </a> |
968 | </li> | 971 | </li> |
969 | <li class="flex"> | 972 | <li class="flex"> |
970 | <a | 973 | <a |
971 | class="inline-flex items-center w-full px-2 py-1 text-sm font-semibold transition-colors duration-150 rounded-md hover:bg-gray-100 hover:text-gray-800 dark:hover:bg-gray-800 dark:hover:text-gray-200" | 974 | class="inline-flex items-center w-full px-2 py-1 text-sm font-semibold transition-colors duration-150 rounded-md hover:bg-gray-100 hover:text-gray-800 dark:hover:bg-gray-800 dark:hover:text-gray-200" |
972 | href="{{ route('admin.config') }}" | 975 | href="{{ route('admin.config') }}" |
973 | > | 976 | > |
974 | <svg | 977 | <svg |
975 | class="w-4 h-4 mr-3" | 978 | class="w-4 h-4 mr-3" |
976 | aria-hidden="true" | 979 | aria-hidden="true" |
977 | fill="none" | 980 | fill="none" |
978 | stroke-linecap="round" | 981 | stroke-linecap="round" |
979 | stroke-linejoin="round" | 982 | stroke-linejoin="round" |
980 | stroke-width="2" | 983 | stroke-width="2" |
981 | viewBox="0 0 24 24" | 984 | viewBox="0 0 24 24" |
982 | stroke="currentColor" | 985 | stroke="currentColor" |
983 | > | 986 | > |
984 | <path | 987 | <path |
985 | d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" | 988 | d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" |
986 | ></path> | 989 | ></path> |
987 | <path d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path> | 990 | <path d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path> |
988 | </svg> | 991 | </svg> |
989 | <span>Настройки</span> | 992 | <span>Настройки</span> |
990 | </a> | 993 | </a> |
991 | </li> | 994 | </li> |
992 | <li class="flex"> | 995 | <li class="flex"> |
993 | <a | 996 | <a |
994 | class="inline-flex items-center w-full px-2 py-1 text-sm font-semibold transition-colors duration-150 rounded-md hover:bg-gray-100 hover:text-gray-800 dark:hover:bg-gray-800 dark:hover:text-gray-200" | 997 | class="inline-flex items-center w-full px-2 py-1 text-sm font-semibold transition-colors duration-150 rounded-md hover:bg-gray-100 hover:text-gray-800 dark:hover:bg-gray-800 dark:hover:text-gray-200" |
995 | href="{{ route('admin.logout') }}" | 998 | href="{{ route('admin.logout') }}" |
996 | > | 999 | > |
997 | <svg | 1000 | <svg |
998 | class="w-4 h-4 mr-3" | 1001 | class="w-4 h-4 mr-3" |
999 | aria-hidden="true" | 1002 | aria-hidden="true" |
1000 | fill="none" | 1003 | fill="none" |
1001 | stroke-linecap="round" | 1004 | stroke-linecap="round" |
1002 | stroke-linejoin="round" | 1005 | stroke-linejoin="round" |
1003 | stroke-width="2" | 1006 | stroke-width="2" |
1004 | viewBox="0 0 24 24" | 1007 | viewBox="0 0 24 24" |
1005 | stroke="currentColor" | 1008 | stroke="currentColor" |
1006 | > | 1009 | > |
1007 | <path | 1010 | <path |
1008 | d="M11 16l-4-4m0 0l4-4m-4 4h14m-5 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h7a3 3 0 013 3v1" | 1011 | d="M11 16l-4-4m0 0l4-4m-4 4h14m-5 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h7a3 3 0 013 3v1" |
1009 | ></path> | 1012 | ></path> |
1010 | </svg> | 1013 | </svg> |
1011 | <span>Выход</span> | 1014 | <span>Выход</span> |
1012 | </a> | 1015 | </a> |
1013 | </li> | 1016 | </li> |
1014 | </ul> | 1017 | </ul> |
1015 | </template> | 1018 | </template> |
1016 | </li> | 1019 | </li> |
1017 | </ul> | 1020 | </ul> |
1018 | </div> | 1021 | </div> |
1019 | </header> | 1022 | </header> |
1020 | <main class="h-full overflow-y-auto"> | 1023 | <main class="h-full overflow-y-auto"> |
1021 | <div class="container px-6 mx-auto grid"> | 1024 | <div class="container px-6 mx-auto grid"> |
1022 | <h2 | 1025 | <h2 |
1023 | class="my-6 text-2xl font-semibold text-gray-700 dark:text-gray-200" | 1026 | class="my-6 text-2xl font-semibold text-gray-700 dark:text-gray-200" |
1024 | > | 1027 | > |
1025 | {{$title}} | 1028 | {{$title}} |
1026 | </h2> | 1029 | </h2> |
1027 | <!-- CTA --> | 1030 | <!-- CTA --> |
1028 | <a | 1031 | <a |
1029 | class="flex items-center justify-between p-4 mb-8 text-sm font-semibold text-purple-100 bg-purple-600 rounded-lg shadow-md focus:outline-none focus:shadow-outline-purple" | 1032 | class="flex items-center justify-between p-4 mb-8 text-sm font-semibold text-purple-100 bg-purple-600 rounded-lg shadow-md focus:outline-none focus:shadow-outline-purple" |
1030 | href="{{ route('admin.admin-users') }}" | 1033 | href="{{ route('admin.admin-users') }}" |
1031 | > | 1034 | > |
1032 | <div class="flex items-center"> | 1035 | <div class="flex items-center"> |
1033 | <svg | 1036 | <svg |
1034 | class="w-5 h-5 mr-2" | 1037 | class="w-5 h-5 mr-2" |
1035 | fill="currentColor" | 1038 | fill="currentColor" |
1036 | viewBox="0 0 20 20" | 1039 | viewBox="0 0 20 20" |
1037 | > | 1040 | > |
1038 | <path | 1041 | <path |
1039 | d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" | 1042 | d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" |
1040 | ></path> | 1043 | ></path> |
1041 | </svg> | 1044 | </svg> |
1042 | <span>Вход в админку только для пользователей-админов</span> | 1045 | <span>Вход в админку только для пользователей-админов</span> |
1043 | </div> | 1046 | </div> |
1044 | <span>Список админов →</span> | 1047 | <span>Список админов →</span> |
1045 | </a> | 1048 | </a> |
1046 | 1049 | ||
1047 | @if ($message = Session::get('success')) | 1050 | @if ($message = Session::get('success')) |
1048 | <section> | 1051 | <section> |
1049 | <div class="alert alert-success alert-dismissible mt-0" role="alert"> | 1052 | <div class="alert alert-success alert-dismissible mt-0" role="alert"> |
1050 | <button type="button" class="close" data-dismiss="alert" aria-label="Закрыть"> | 1053 | <button type="button" class="close" data-dismiss="alert" aria-label="Закрыть"> |
1051 | <span aria-hidden="true">×</span> | 1054 | <span aria-hidden="true">×</span> |
1052 | </button> | 1055 | </button> |
1053 | {{ $message }} | 1056 | {{ $message }} |
1054 | </div> | 1057 | </div> |
1055 | </section> | 1058 | </section> |
1056 | @endif | 1059 | @endif |
1057 | 1060 | ||
1058 | @if ($errors->any()) | 1061 | @if ($errors->any()) |
1059 | <section> | 1062 | <section> |
1060 | <div class="alert alert-danger alert-dismissible mt-4" role="alert"> | 1063 | <div class="alert alert-danger alert-dismissible mt-4" role="alert"> |
1061 | <button type="button" class="close" data-dismiss="alert" aria-label="Закрыть"> | 1064 | <button type="button" class="close" data-dismiss="alert" aria-label="Закрыть"> |
1062 | <span aria-hidden="true">×</span> | 1065 | <span aria-hidden="true">×</span> |
1063 | </button> | 1066 | </button> |
1064 | <ul class="mb-0"> | 1067 | <ul class="mb-0"> |
1065 | @foreach ($errors->all() as $error) | 1068 | @foreach ($errors->all() as $error) |
1066 | <li>{{ $error }}</li> | 1069 | <li>{{ $error }}</li> |
1067 | @endforeach | 1070 | @endforeach |
1068 | </ul> | 1071 | </ul> |
1069 | </div> | 1072 | </div> |
1070 | </section> | 1073 | </section> |
1071 | @endif | 1074 | @endif |
1072 | 1075 | ||
1073 | @yield('content') | 1076 | @yield('content') |
1074 | 1077 | ||
1075 | <!-- Cards | 1078 | <!-- Cards |
1076 | <div class="grid gap-6 mb-8 md:grid-cols-2 xl:grid-cols-4"> | 1079 | <div class="grid gap-6 mb-8 md:grid-cols-2 xl:grid-cols-4"> |
1077 | 1080 | ||
1078 | <div | 1081 | <div |
1079 | class="flex items-center p-4 bg-white rounded-lg shadow-xs dark:bg-gray-800" | 1082 | class="flex items-center p-4 bg-white rounded-lg shadow-xs dark:bg-gray-800" |
1080 | > | 1083 | > |
1081 | <div | 1084 | <div |
1082 | class="p-3 mr-4 text-orange-500 bg-orange-100 rounded-full dark:text-orange-100 dark:bg-orange-500" | 1085 | class="p-3 mr-4 text-orange-500 bg-orange-100 rounded-full dark:text-orange-100 dark:bg-orange-500" |
1083 | > | 1086 | > |
1084 | <svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20"> | 1087 | <svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20"> |
1085 | <path | 1088 | <path |
1086 | d="M13 6a3 3 0 11-6 0 3 3 0 016 0zM18 8a2 2 0 11-4 0 2 2 0 014 0zM14 15a4 4 0 00-8 0v3h8v-3zM6 8a2 2 0 11-4 0 2 2 0 014 0zM16 18v-3a5.972 5.972 0 00-.75-2.906A3.005 3.005 0 0119 15v3h-3zM4.75 12.094A5.973 5.973 0 004 15v3H1v-3a3 3 0 013.75-2.906z" | 1089 | d="M13 6a3 3 0 11-6 0 3 3 0 016 0zM18 8a2 2 0 11-4 0 2 2 0 014 0zM14 15a4 4 0 00-8 0v3h8v-3zM6 8a2 2 0 11-4 0 2 2 0 014 0zM16 18v-3a5.972 5.972 0 00-.75-2.906A3.005 3.005 0 0119 15v3h-3zM4.75 12.094A5.973 5.973 0 004 15v3H1v-3a3 3 0 013.75-2.906z" |
1087 | ></path> | 1090 | ></path> |
1088 | </svg> | 1091 | </svg> |
1089 | </div> | 1092 | </div> |
1090 | <div> | 1093 | <div> |
1091 | <p | 1094 | <p |
1092 | class="mb-2 text-sm font-medium text-gray-600 dark:text-gray-400" | 1095 | class="mb-2 text-sm font-medium text-gray-600 dark:text-gray-400" |
1093 | > | 1096 | > |
1094 | Total clients | 1097 | Total clients |
1095 | </p> | 1098 | </p> |
1096 | <p | 1099 | <p |
1097 | class="text-lg font-semibold text-gray-700 dark:text-gray-200" | 1100 | class="text-lg font-semibold text-gray-700 dark:text-gray-200" |
1098 | > | 1101 | > |
1099 | 6389 | 1102 | 6389 |
1100 | </p> | 1103 | </p> |
1101 | </div> | 1104 | </div> |
1102 | </div> | 1105 | </div> |
1103 | 1106 | ||
1104 | <div | 1107 | <div |
1105 | class="flex items-center p-4 bg-white rounded-lg shadow-xs dark:bg-gray-800" | 1108 | class="flex items-center p-4 bg-white rounded-lg shadow-xs dark:bg-gray-800" |
1106 | > | 1109 | > |
1107 | <div | 1110 | <div |
1108 | class="p-3 mr-4 text-green-500 bg-green-100 rounded-full dark:text-green-100 dark:bg-green-500" | 1111 | class="p-3 mr-4 text-green-500 bg-green-100 rounded-full dark:text-green-100 dark:bg-green-500" |
1109 | > | 1112 | > |
1110 | <svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20"> | 1113 | <svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20"> |
1111 | <path | 1114 | <path |
1112 | fill-rule="evenodd" | 1115 | fill-rule="evenodd" |
1113 | d="M4 4a2 2 0 00-2 2v4a2 2 0 002 2V6h10a2 2 0 00-2-2H4zm2 6a2 2 0 012-2h8a2 2 0 012 2v4a2 2 0 01-2 2H8a2 2 0 01-2-2v-4zm6 4a2 2 0 100-4 2 2 0 000 4z" | 1116 | d="M4 4a2 2 0 00-2 2v4a2 2 0 002 2V6h10a2 2 0 00-2-2H4zm2 6a2 2 0 012-2h8a2 2 0 012 2v4a2 2 0 01-2 2H8a2 2 0 01-2-2v-4zm6 4a2 2 0 100-4 2 2 0 000 4z" |
1114 | clip-rule="evenodd" | 1117 | clip-rule="evenodd" |
1115 | ></path> | 1118 | ></path> |
1116 | </svg> | 1119 | </svg> |
1117 | </div> | 1120 | </div> |
1118 | <div> | 1121 | <div> |
1119 | <p | 1122 | <p |
1120 | class="mb-2 text-sm font-medium text-gray-600 dark:text-gray-400" | 1123 | class="mb-2 text-sm font-medium text-gray-600 dark:text-gray-400" |
1121 | > | 1124 | > |
1122 | Account balance | 1125 | Account balance |
1123 | </p> | 1126 | </p> |
1124 | <p | 1127 | <p |
1125 | class="text-lg font-semibold text-gray-700 dark:text-gray-200" | 1128 | class="text-lg font-semibold text-gray-700 dark:text-gray-200" |
1126 | > | 1129 | > |
1127 | $ 46,760.89 | 1130 | $ 46,760.89 |
1128 | </p> | 1131 | </p> |
1129 | </div> | 1132 | </div> |
1130 | </div> | 1133 | </div> |
1131 | 1134 | ||
1132 | <div | 1135 | <div |
1133 | class="flex items-center p-4 bg-white rounded-lg shadow-xs dark:bg-gray-800" | 1136 | class="flex items-center p-4 bg-white rounded-lg shadow-xs dark:bg-gray-800" |
1134 | > | 1137 | > |
1135 | <div | 1138 | <div |
1136 | class="p-3 mr-4 text-blue-500 bg-blue-100 rounded-full dark:text-blue-100 dark:bg-blue-500" | 1139 | class="p-3 mr-4 text-blue-500 bg-blue-100 rounded-full dark:text-blue-100 dark:bg-blue-500" |
1137 | > | 1140 | > |
1138 | <svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20"> | 1141 | <svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20"> |
1139 | <path | 1142 | <path |
1140 | d="M3 1a1 1 0 000 2h1.22l.305 1.222a.997.997 0 00.01.042l1.358 5.43-.893.892C3.74 11.846 4.632 14 6.414 14H15a1 1 0 000-2H6.414l1-1H14a1 1 0 00.894-.553l3-6A1 1 0 0017 3H6.28l-.31-1.243A1 1 0 005 1H3zM16 16.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM6.5 18a1.5 1.5 0 100-3 1.5 1.5 0 000 3z" | 1143 | d="M3 1a1 1 0 000 2h1.22l.305 1.222a.997.997 0 00.01.042l1.358 5.43-.893.892C3.74 11.846 4.632 14 6.414 14H15a1 1 0 000-2H6.414l1-1H14a1 1 0 00.894-.553l3-6A1 1 0 0017 3H6.28l-.31-1.243A1 1 0 005 1H3zM16 16.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM6.5 18a1.5 1.5 0 100-3 1.5 1.5 0 000 3z" |
1141 | ></path> | 1144 | ></path> |
1142 | </svg> | 1145 | </svg> |
1143 | </div> | 1146 | </div> |
1144 | <div> | 1147 | <div> |
1145 | <p | 1148 | <p |
1146 | class="mb-2 text-sm font-medium text-gray-600 dark:text-gray-400" | 1149 | class="mb-2 text-sm font-medium text-gray-600 dark:text-gray-400" |
1147 | > | 1150 | > |
1148 | New sales | 1151 | New sales |
1149 | </p> | 1152 | </p> |
1150 | <p | 1153 | <p |
1151 | class="text-lg font-semibold text-gray-700 dark:text-gray-200" | 1154 | class="text-lg font-semibold text-gray-700 dark:text-gray-200" |
1152 | > | 1155 | > |
1153 | 376 | 1156 | 376 |
1154 | </p> | 1157 | </p> |
1155 | </div> | 1158 | </div> |
1156 | </div> | 1159 | </div> |
1157 | 1160 | ||
1158 | <div | 1161 | <div |
1159 | class="flex items-center p-4 bg-white rounded-lg shadow-xs dark:bg-gray-800" | 1162 | class="flex items-center p-4 bg-white rounded-lg shadow-xs dark:bg-gray-800" |
1160 | > | 1163 | > |
1161 | <div | 1164 | <div |
1162 | class="p-3 mr-4 text-teal-500 bg-teal-100 rounded-full dark:text-teal-100 dark:bg-teal-500" | 1165 | class="p-3 mr-4 text-teal-500 bg-teal-100 rounded-full dark:text-teal-100 dark:bg-teal-500" |
1163 | > | 1166 | > |
1164 | <svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20"> | 1167 | <svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20"> |
1165 | <path | 1168 | <path |
1166 | fill-rule="evenodd" | 1169 | fill-rule="evenodd" |
1167 | d="M18 5v8a2 2 0 01-2 2h-5l-5 4v-4H4a2 2 0 01-2-2V5a2 2 0 012-2h12a2 2 0 012 2zM7 8H5v2h2V8zm2 0h2v2H9V8zm6 0h-2v2h2V8z" | 1170 | d="M18 5v8a2 2 0 01-2 2h-5l-5 4v-4H4a2 2 0 01-2-2V5a2 2 0 012-2h12a2 2 0 012 2zM7 8H5v2h2V8zm2 0h2v2H9V8zm6 0h-2v2h2V8z" |
1168 | clip-rule="evenodd" | 1171 | clip-rule="evenodd" |
1169 | ></path> | 1172 | ></path> |
1170 | </svg> | 1173 | </svg> |
1171 | </div> | 1174 | </div> |
1172 | <div> | 1175 | <div> |
1173 | <p | 1176 | <p |
1174 | class="mb-2 text-sm font-medium text-gray-600 dark:text-gray-400" | 1177 | class="mb-2 text-sm font-medium text-gray-600 dark:text-gray-400" |
1175 | > | 1178 | > |
1176 | Pending contacts | 1179 | Pending contacts |
1177 | </p> | 1180 | </p> |
1178 | <p | 1181 | <p |
1179 | class="text-lg font-semibold text-gray-700 dark:text-gray-200" | 1182 | class="text-lg font-semibold text-gray-700 dark:text-gray-200" |
1180 | > | 1183 | > |
1181 | 35 | 1184 | 35 |
1182 | </p> | 1185 | </p> |
1183 | </div> | 1186 | </div> |
1184 | </div> | 1187 | </div> |
1185 | </div> | 1188 | </div> |
1186 | --> | 1189 | --> |
1187 | <!-- New Table | 1190 | <!-- New Table |
1188 | <div class="w-full overflow-hidden rounded-lg shadow-xs"> | 1191 | <div class="w-full overflow-hidden rounded-lg shadow-xs"> |
1189 | <div class="w-full overflow-x-auto"> | 1192 | <div class="w-full overflow-x-auto"> |
1190 | <table class="w-full whitespace-no-wrap"> | 1193 | <table class="w-full whitespace-no-wrap"> |
1191 | <thead> | 1194 | <thead> |
1192 | <tr | 1195 | <tr |
1193 | class="text-xs font-semibold tracking-wide text-left text-gray-500 uppercase border-b dark:border-gray-700 bg-gray-50 dark:text-gray-400 dark:bg-gray-800" | 1196 | class="text-xs font-semibold tracking-wide text-left text-gray-500 uppercase border-b dark:border-gray-700 bg-gray-50 dark:text-gray-400 dark:bg-gray-800" |
1194 | > | 1197 | > |
1195 | <th class="px-4 py-3">Client</th> | 1198 | <th class="px-4 py-3">Client</th> |
1196 | <th class="px-4 py-3">Amount</th> | 1199 | <th class="px-4 py-3">Amount</th> |
1197 | <th class="px-4 py-3">Status</th> | 1200 | <th class="px-4 py-3">Status</th> |
1198 | <th class="px-4 py-3">Date</th> | 1201 | <th class="px-4 py-3">Date</th> |
1199 | </tr> | 1202 | </tr> |
1200 | </thead> | 1203 | </thead> |
1201 | <tbody | 1204 | <tbody |
1202 | class="bg-white divide-y dark:divide-gray-700 dark:bg-gray-800" | 1205 | class="bg-white divide-y dark:divide-gray-700 dark:bg-gray-800" |
1203 | > | 1206 | > |
1204 | <tr class="text-gray-700 dark:text-gray-400"> | 1207 | <tr class="text-gray-700 dark:text-gray-400"> |
1205 | <td class="px-4 py-3"> | 1208 | <td class="px-4 py-3"> |
1206 | <div class="flex items-center text-sm"> | 1209 | <div class="flex items-center text-sm"> |
1207 | 1210 | ||
1208 | <div | 1211 | <div |
1209 | class="relative hidden w-8 h-8 mr-3 rounded-full md:block" | 1212 | class="relative hidden w-8 h-8 mr-3 rounded-full md:block" |
1210 | > | 1213 | > |
1211 | <img | 1214 | <img |
1212 | class="object-cover w-full h-full rounded-full" | 1215 | class="object-cover w-full h-full rounded-full" |
1213 | src="https://images.unsplash.com/flagged/photo-1570612861542-284f4c12e75f?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE3Nzg0fQ" | 1216 | src="https://images.unsplash.com/flagged/photo-1570612861542-284f4c12e75f?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE3Nzg0fQ" |
1214 | alt="" | 1217 | alt="" |
1215 | loading="lazy" | 1218 | loading="lazy" |
1216 | /> | 1219 | /> |
1217 | <div | 1220 | <div |
1218 | class="absolute inset-0 rounded-full shadow-inner" | 1221 | class="absolute inset-0 rounded-full shadow-inner" |
1219 | aria-hidden="true" | 1222 | aria-hidden="true" |
1220 | ></div> | 1223 | ></div> |
1221 | </div> | 1224 | </div> |
1222 | <div> | 1225 | <div> |
1223 | <p class="font-semibold">Hans Burger</p> | 1226 | <p class="font-semibold">Hans Burger</p> |
1224 | <p class="text-xs text-gray-600 dark:text-gray-400"> | 1227 | <p class="text-xs text-gray-600 dark:text-gray-400"> |
1225 | 10x Developer | 1228 | 10x Developer |
1226 | </p> | 1229 | </p> |
1227 | </div> | 1230 | </div> |
1228 | </div> | 1231 | </div> |
1229 | </td> | 1232 | </td> |
1230 | <td class="px-4 py-3 text-sm"> | 1233 | <td class="px-4 py-3 text-sm"> |
1231 | $ 863.45 | 1234 | $ 863.45 |
1232 | </td> | 1235 | </td> |
1233 | <td class="px-4 py-3 text-xs"> | 1236 | <td class="px-4 py-3 text-xs"> |
1234 | <span | 1237 | <span |
1235 | class="px-2 py-1 font-semibold leading-tight text-green-700 bg-green-100 rounded-full dark:bg-green-700 dark:text-green-100" | 1238 | class="px-2 py-1 font-semibold leading-tight text-green-700 bg-green-100 rounded-full dark:bg-green-700 dark:text-green-100" |
1236 | > | 1239 | > |
1237 | Approved | 1240 | Approved |
1238 | </span> | 1241 | </span> |
1239 | </td> | 1242 | </td> |
1240 | <td class="px-4 py-3 text-sm"> | 1243 | <td class="px-4 py-3 text-sm"> |
1241 | 6/10/2020 | 1244 | 6/10/2020 |
1242 | </td> | 1245 | </td> |
1243 | </tr> | 1246 | </tr> |
1244 | 1247 | ||
1245 | <tr class="text-gray-700 dark:text-gray-400"> | 1248 | <tr class="text-gray-700 dark:text-gray-400"> |
1246 | <td class="px-4 py-3"> | 1249 | <td class="px-4 py-3"> |
1247 | <div class="flex items-center text-sm"> | 1250 | <div class="flex items-center text-sm"> |
1248 | 1251 | ||
1249 | <div | 1252 | <div |
1250 | class="relative hidden w-8 h-8 mr-3 rounded-full md:block" | 1253 | class="relative hidden w-8 h-8 mr-3 rounded-full md:block" |
1251 | > | 1254 | > |
1252 | <img | 1255 | <img |
1253 | class="object-cover w-full h-full rounded-full" | 1256 | class="object-cover w-full h-full rounded-full" |
1254 | src="https://images.unsplash.com/photo-1494790108377-be9c29b29330?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&facepad=3&fit=facearea&s=707b9c33066bf8808c934c8ab394dff6" | 1257 | src="https://images.unsplash.com/photo-1494790108377-be9c29b29330?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&facepad=3&fit=facearea&s=707b9c33066bf8808c934c8ab394dff6" |
1255 | alt="" | 1258 | alt="" |
1256 | loading="lazy" | 1259 | loading="lazy" |
1257 | /> | 1260 | /> |
1258 | <div | 1261 | <div |
1259 | class="absolute inset-0 rounded-full shadow-inner" | 1262 | class="absolute inset-0 rounded-full shadow-inner" |
1260 | aria-hidden="true" | 1263 | aria-hidden="true" |
1261 | ></div> | 1264 | ></div> |
1262 | </div> | 1265 | </div> |
1263 | <div> | 1266 | <div> |
1264 | <p class="font-semibold">Jolina Angelie</p> | 1267 | <p class="font-semibold">Jolina Angelie</p> |
1265 | <p class="text-xs text-gray-600 dark:text-gray-400"> | 1268 | <p class="text-xs text-gray-600 dark:text-gray-400"> |
1266 | Unemployed | 1269 | Unemployed |
1267 | </p> | 1270 | </p> |
1268 | </div> | 1271 | </div> |
1269 | </div> | 1272 | </div> |
1270 | </td> | 1273 | </td> |
1271 | <td class="px-4 py-3 text-sm"> | 1274 | <td class="px-4 py-3 text-sm"> |
1272 | $ 369.95 | 1275 | $ 369.95 |
1273 | </td> | 1276 | </td> |
1274 | <td class="px-4 py-3 text-xs"> | 1277 | <td class="px-4 py-3 text-xs"> |
1275 | <span | 1278 | <span |
1276 | class="px-2 py-1 font-semibold leading-tight text-orange-700 bg-orange-100 rounded-full dark:text-white dark:bg-orange-600" | 1279 | class="px-2 py-1 font-semibold leading-tight text-orange-700 bg-orange-100 rounded-full dark:text-white dark:bg-orange-600" |
1277 | > | 1280 | > |
1278 | Pending | 1281 | Pending |
1279 | </span> | 1282 | </span> |
1280 | </td> | 1283 | </td> |
1281 | <td class="px-4 py-3 text-sm"> | 1284 | <td class="px-4 py-3 text-sm"> |
1282 | 6/10/2020 | 1285 | 6/10/2020 |
1283 | </td> | 1286 | </td> |
1284 | </tr> | 1287 | </tr> |
1285 | 1288 | ||
1286 | <tr class="text-gray-700 dark:text-gray-400"> | 1289 | <tr class="text-gray-700 dark:text-gray-400"> |
1287 | <td class="px-4 py-3"> | 1290 | <td class="px-4 py-3"> |
1288 | <div class="flex items-center text-sm"> | 1291 | <div class="flex items-center text-sm"> |
1289 | 1292 | ||
1290 | <div | 1293 | <div |
1291 | class="relative hidden w-8 h-8 mr-3 rounded-full md:block" | 1294 | class="relative hidden w-8 h-8 mr-3 rounded-full md:block" |
1292 | > | 1295 | > |
1293 | <img | 1296 | <img |
1294 | class="object-cover w-full h-full rounded-full" | 1297 | class="object-cover w-full h-full rounded-full" |
1295 | src="https://images.unsplash.com/photo-1551069613-1904dbdcda11?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE3Nzg0fQ" | 1298 | src="https://images.unsplash.com/photo-1551069613-1904dbdcda11?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE3Nzg0fQ" |
1296 | alt="" | 1299 | alt="" |
1297 | loading="lazy" | 1300 | loading="lazy" |
1298 | /> | 1301 | /> |
1299 | <div | 1302 | <div |
1300 | class="absolute inset-0 rounded-full shadow-inner" | 1303 | class="absolute inset-0 rounded-full shadow-inner" |
1301 | aria-hidden="true" | 1304 | aria-hidden="true" |
1302 | ></div> | 1305 | ></div> |
1303 | </div> | 1306 | </div> |
1304 | <div> | 1307 | <div> |
1305 | <p class="font-semibold">Sarah Curry</p> | 1308 | <p class="font-semibold">Sarah Curry</p> |
1306 | <p class="text-xs text-gray-600 dark:text-gray-400"> | 1309 | <p class="text-xs text-gray-600 dark:text-gray-400"> |
1307 | Designer | 1310 | Designer |
1308 | </p> | 1311 | </p> |
1309 | </div> | 1312 | </div> |
1310 | </div> | 1313 | </div> |
1311 | </td> | 1314 | </td> |
1312 | <td class="px-4 py-3 text-sm"> | 1315 | <td class="px-4 py-3 text-sm"> |
1313 | $ 86.00 | 1316 | $ 86.00 |
1314 | </td> | 1317 | </td> |
1315 | <td class="px-4 py-3 text-xs"> | 1318 | <td class="px-4 py-3 text-xs"> |
1316 | <span | 1319 | <span |
1317 | class="px-2 py-1 font-semibold leading-tight text-red-700 bg-red-100 rounded-full dark:text-red-100 dark:bg-red-700" | 1320 | class="px-2 py-1 font-semibold leading-tight text-red-700 bg-red-100 rounded-full dark:text-red-100 dark:bg-red-700" |
1318 | > | 1321 | > |
1319 | Denied | 1322 | Denied |
1320 | </span> | 1323 | </span> |
1321 | </td> | 1324 | </td> |
1322 | <td class="px-4 py-3 text-sm"> | 1325 | <td class="px-4 py-3 text-sm"> |
1323 | 6/10/2020 | 1326 | 6/10/2020 |
1324 | </td> | 1327 | </td> |
1325 | </tr> | 1328 | </tr> |
1326 | 1329 | ||
1327 | <tr class="text-gray-700 dark:text-gray-400"> | 1330 | <tr class="text-gray-700 dark:text-gray-400"> |
1328 | <td class="px-4 py-3"> | 1331 | <td class="px-4 py-3"> |
1329 | <div class="flex items-center text-sm"> | 1332 | <div class="flex items-center text-sm"> |
1330 | 1333 | ||
1331 | <div | 1334 | <div |
1332 | class="relative hidden w-8 h-8 mr-3 rounded-full md:block" | 1335 | class="relative hidden w-8 h-8 mr-3 rounded-full md:block" |
1333 | > | 1336 | > |
1334 | <img | 1337 | <img |
1335 | class="object-cover w-full h-full rounded-full" | 1338 | class="object-cover w-full h-full rounded-full" |
1336 | src="https://images.unsplash.com/photo-1551006917-3b4c078c47c9?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE3Nzg0fQ" | 1339 | src="https://images.unsplash.com/photo-1551006917-3b4c078c47c9?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE3Nzg0fQ" |
1337 | alt="" | 1340 | alt="" |
1338 | loading="lazy" | 1341 | loading="lazy" |
1339 | /> | 1342 | /> |
1340 | <div | 1343 | <div |
1341 | class="absolute inset-0 rounded-full shadow-inner" | 1344 | class="absolute inset-0 rounded-full shadow-inner" |
1342 | aria-hidden="true" | 1345 | aria-hidden="true" |
1343 | ></div> | 1346 | ></div> |
1344 | </div> | 1347 | </div> |
1345 | <div> | 1348 | <div> |
1346 | <p class="font-semibold">Rulia Joberts</p> | 1349 | <p class="font-semibold">Rulia Joberts</p> |
1347 | <p class="text-xs text-gray-600 dark:text-gray-400"> | 1350 | <p class="text-xs text-gray-600 dark:text-gray-400"> |
1348 | Actress | 1351 | Actress |
1349 | </p> | 1352 | </p> |
1350 | </div> | 1353 | </div> |
1351 | </div> | 1354 | </div> |
1352 | </td> | 1355 | </td> |
1353 | <td class="px-4 py-3 text-sm"> | 1356 | <td class="px-4 py-3 text-sm"> |
1354 | $ 1276.45 | 1357 | $ 1276.45 |
1355 | </td> | 1358 | </td> |
1356 | <td class="px-4 py-3 text-xs"> | 1359 | <td class="px-4 py-3 text-xs"> |
1357 | <span | 1360 | <span |
1358 | class="px-2 py-1 font-semibold leading-tight text-green-700 bg-green-100 rounded-full dark:bg-green-700 dark:text-green-100" | 1361 | class="px-2 py-1 font-semibold leading-tight text-green-700 bg-green-100 rounded-full dark:bg-green-700 dark:text-green-100" |
1359 | > | 1362 | > |
1360 | Approved | 1363 | Approved |
1361 | </span> | 1364 | </span> |
1362 | </td> | 1365 | </td> |
1363 | <td class="px-4 py-3 text-sm"> | 1366 | <td class="px-4 py-3 text-sm"> |
1364 | 6/10/2020 | 1367 | 6/10/2020 |
1365 | </td> | 1368 | </td> |
1366 | </tr> | 1369 | </tr> |
1367 | 1370 | ||
1368 | <tr class="text-gray-700 dark:text-gray-400"> | 1371 | <tr class="text-gray-700 dark:text-gray-400"> |
1369 | <td class="px-4 py-3"> | 1372 | <td class="px-4 py-3"> |
1370 | <div class="flex items-center text-sm"> | 1373 | <div class="flex items-center text-sm"> |
1371 | 1374 | ||
1372 | <div | 1375 | <div |
1373 | class="relative hidden w-8 h-8 mr-3 rounded-full md:block" | 1376 | class="relative hidden w-8 h-8 mr-3 rounded-full md:block" |
1374 | > | 1377 | > |
1375 | <img | 1378 | <img |
1376 | class="object-cover w-full h-full rounded-full" | 1379 | class="object-cover w-full h-full rounded-full" |
1377 | src="https://images.unsplash.com/photo-1546456073-6712f79251bb?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE3Nzg0fQ" | 1380 | src="https://images.unsplash.com/photo-1546456073-6712f79251bb?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE3Nzg0fQ" |
1378 | alt="" | 1381 | alt="" |
1379 | loading="lazy" | 1382 | loading="lazy" |
1380 | /> | 1383 | /> |
1381 | <div | 1384 | <div |
1382 | class="absolute inset-0 rounded-full shadow-inner" | 1385 | class="absolute inset-0 rounded-full shadow-inner" |
1383 | aria-hidden="true" | 1386 | aria-hidden="true" |
1384 | ></div> | 1387 | ></div> |
1385 | </div> | 1388 | </div> |
1386 | <div> | 1389 | <div> |
1387 | <p class="font-semibold">Wenzel Dashington</p> | 1390 | <p class="font-semibold">Wenzel Dashington</p> |
1388 | <p class="text-xs text-gray-600 dark:text-gray-400"> | 1391 | <p class="text-xs text-gray-600 dark:text-gray-400"> |
1389 | Actor | 1392 | Actor |
1390 | </p> | 1393 | </p> |
1391 | </div> | 1394 | </div> |
1392 | </div> | 1395 | </div> |
1393 | </td> | 1396 | </td> |
1394 | <td class="px-4 py-3 text-sm"> | 1397 | <td class="px-4 py-3 text-sm"> |
1395 | $ 863.45 | 1398 | $ 863.45 |
1396 | </td> | 1399 | </td> |
1397 | <td class="px-4 py-3 text-xs"> | 1400 | <td class="px-4 py-3 text-xs"> |
1398 | <span | 1401 | <span |
1399 | class="px-2 py-1 font-semibold leading-tight text-gray-700 bg-gray-100 rounded-full dark:text-gray-100 dark:bg-gray-700" | 1402 | class="px-2 py-1 font-semibold leading-tight text-gray-700 bg-gray-100 rounded-full dark:text-gray-100 dark:bg-gray-700" |
1400 | > | 1403 | > |
1401 | Expired | 1404 | Expired |
1402 | </span> | 1405 | </span> |
1403 | </td> | 1406 | </td> |
1404 | <td class="px-4 py-3 text-sm"> | 1407 | <td class="px-4 py-3 text-sm"> |
1405 | 6/10/2020 | 1408 | 6/10/2020 |
1406 | </td> | 1409 | </td> |
1407 | </tr> | 1410 | </tr> |
1408 | 1411 | ||
1409 | <tr class="text-gray-700 dark:text-gray-400"> | 1412 | <tr class="text-gray-700 dark:text-gray-400"> |
1410 | <td class="px-4 py-3"> | 1413 | <td class="px-4 py-3"> |
1411 | <div class="flex items-center text-sm"> | 1414 | <div class="flex items-center text-sm"> |
1412 | 1415 | ||
1413 | <div | 1416 | <div |
1414 | class="relative hidden w-8 h-8 mr-3 rounded-full md:block" | 1417 | class="relative hidden w-8 h-8 mr-3 rounded-full md:block" |
1415 | > | 1418 | > |
1416 | <img | 1419 | <img |
1417 | class="object-cover w-full h-full rounded-full" | 1420 | class="object-cover w-full h-full rounded-full" |
1418 | src="https://images.unsplash.com/photo-1502720705749-871143f0e671?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&s=b8377ca9f985d80264279f277f3a67f5" | 1421 | src="https://images.unsplash.com/photo-1502720705749-871143f0e671?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&s=b8377ca9f985d80264279f277f3a67f5" |
1419 | alt="" | 1422 | alt="" |
1420 | loading="lazy" | 1423 | loading="lazy" |
1421 | /> | 1424 | /> |
1422 | <div | 1425 | <div |
1423 | class="absolute inset-0 rounded-full shadow-inner" | 1426 | class="absolute inset-0 rounded-full shadow-inner" |
1424 | aria-hidden="true" | 1427 | aria-hidden="true" |
1425 | ></div> | 1428 | ></div> |
1426 | </div> | 1429 | </div> |
1427 | <div> | 1430 | <div> |
1428 | <p class="font-semibold">Dave Li</p> | 1431 | <p class="font-semibold">Dave Li</p> |
1429 | <p class="text-xs text-gray-600 dark:text-gray-400"> | 1432 | <p class="text-xs text-gray-600 dark:text-gray-400"> |
1430 | Influencer | 1433 | Influencer |
1431 | </p> | 1434 | </p> |
1432 | </div> | 1435 | </div> |
1433 | </div> | 1436 | </div> |
1434 | </td> | 1437 | </td> |
1435 | <td class="px-4 py-3 text-sm"> | 1438 | <td class="px-4 py-3 text-sm"> |
1436 | $ 863.45 | 1439 | $ 863.45 |
1437 | </td> | 1440 | </td> |
1438 | <td class="px-4 py-3 text-xs"> | 1441 | <td class="px-4 py-3 text-xs"> |
1439 | <span | 1442 | <span |
1440 | class="px-2 py-1 font-semibold leading-tight text-green-700 bg-green-100 rounded-full dark:bg-green-700 dark:text-green-100" | 1443 | class="px-2 py-1 font-semibold leading-tight text-green-700 bg-green-100 rounded-full dark:bg-green-700 dark:text-green-100" |
1441 | > | 1444 | > |
1442 | Approved | 1445 | Approved |
1443 | </span> | 1446 | </span> |
1444 | </td> | 1447 | </td> |
1445 | <td class="px-4 py-3 text-sm"> | 1448 | <td class="px-4 py-3 text-sm"> |
1446 | 6/10/2020 | 1449 | 6/10/2020 |
1447 | </td> | 1450 | </td> |
1448 | </tr> | 1451 | </tr> |
1449 | 1452 | ||
1450 | <tr class="text-gray-700 dark:text-gray-400"> | 1453 | <tr class="text-gray-700 dark:text-gray-400"> |
1451 | <td class="px-4 py-3"> | 1454 | <td class="px-4 py-3"> |
1452 | <div class="flex items-center text-sm"> | 1455 | <div class="flex items-center text-sm"> |
1453 | 1456 | ||
1454 | <div | 1457 | <div |
1455 | class="relative hidden w-8 h-8 mr-3 rounded-full md:block" | 1458 | class="relative hidden w-8 h-8 mr-3 rounded-full md:block" |
1456 | > | 1459 | > |
1457 | <img | 1460 | <img |
1458 | class="object-cover w-full h-full rounded-full" | 1461 | class="object-cover w-full h-full rounded-full" |
1459 | src="https://images.unsplash.com/photo-1531746020798-e6953c6e8e04?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE3Nzg0fQ" | 1462 | src="https://images.unsplash.com/photo-1531746020798-e6953c6e8e04?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE3Nzg0fQ" |
1460 | alt="" | 1463 | alt="" |
1461 | loading="lazy" | 1464 | loading="lazy" |
1462 | /> | 1465 | /> |
1463 | <div | 1466 | <div |
1464 | class="absolute inset-0 rounded-full shadow-inner" | 1467 | class="absolute inset-0 rounded-full shadow-inner" |
1465 | aria-hidden="true" | 1468 | aria-hidden="true" |
1466 | ></div> | 1469 | ></div> |
1467 | </div> | 1470 | </div> |
1468 | <div> | 1471 | <div> |
1469 | <p class="font-semibold">Maria Ramovic</p> | 1472 | <p class="font-semibold">Maria Ramovic</p> |
1470 | <p class="text-xs text-gray-600 dark:text-gray-400"> | 1473 | <p class="text-xs text-gray-600 dark:text-gray-400"> |
1471 | Runner | 1474 | Runner |
1472 | </p> | 1475 | </p> |
1473 | </div> | 1476 | </div> |
1474 | </div> | 1477 | </div> |
1475 | </td> | 1478 | </td> |
1476 | <td class="px-4 py-3 text-sm"> | 1479 | <td class="px-4 py-3 text-sm"> |
1477 | $ 863.45 | 1480 | $ 863.45 |
1478 | </td> | 1481 | </td> |
1479 | <td class="px-4 py-3 text-xs"> | 1482 | <td class="px-4 py-3 text-xs"> |
1480 | <span | 1483 | <span |
1481 | class="px-2 py-1 font-semibold leading-tight text-green-700 bg-green-100 rounded-full dark:bg-green-700 dark:text-green-100" | 1484 | class="px-2 py-1 font-semibold leading-tight text-green-700 bg-green-100 rounded-full dark:bg-green-700 dark:text-green-100" |
1482 | > | 1485 | > |
1483 | Approved | 1486 | Approved |
1484 | </span> | 1487 | </span> |
1485 | </td> | 1488 | </td> |
1486 | <td class="px-4 py-3 text-sm"> | 1489 | <td class="px-4 py-3 text-sm"> |
1487 | 6/10/2020 | 1490 | 6/10/2020 |
1488 | </td> | 1491 | </td> |
1489 | </tr> | 1492 | </tr> |
1490 | 1493 | ||
1491 | <tr class="text-gray-700 dark:text-gray-400"> | 1494 | <tr class="text-gray-700 dark:text-gray-400"> |
1492 | <td class="px-4 py-3"> | 1495 | <td class="px-4 py-3"> |
1493 | <div class="flex items-center text-sm"> | 1496 | <div class="flex items-center text-sm"> |
1494 | 1497 | ||
1495 | <div | 1498 | <div |
1496 | class="relative hidden w-8 h-8 mr-3 rounded-full md:block" | 1499 | class="relative hidden w-8 h-8 mr-3 rounded-full md:block" |
1497 | > | 1500 | > |
1498 | <img | 1501 | <img |
1499 | class="object-cover w-full h-full rounded-full" | 1502 | class="object-cover w-full h-full rounded-full" |
1500 | src="https://images.unsplash.com/photo-1566411520896-01e7ca4726af?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE3Nzg0fQ" | 1503 | src="https://images.unsplash.com/photo-1566411520896-01e7ca4726af?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE3Nzg0fQ" |
1501 | alt="" | 1504 | alt="" |
1502 | loading="lazy" | 1505 | loading="lazy" |
1503 | /> | 1506 | /> |
1504 | <div | 1507 | <div |
1505 | class="absolute inset-0 rounded-full shadow-inner" | 1508 | class="absolute inset-0 rounded-full shadow-inner" |
1506 | aria-hidden="true" | 1509 | aria-hidden="true" |
1507 | ></div> | 1510 | ></div> |
1508 | </div> | 1511 | </div> |
1509 | <div> | 1512 | <div> |
1510 | <p class="font-semibold">Hitney Wouston</p> | 1513 | <p class="font-semibold">Hitney Wouston</p> |
1511 | <p class="text-xs text-gray-600 dark:text-gray-400"> | 1514 | <p class="text-xs text-gray-600 dark:text-gray-400"> |
1512 | Singer | 1515 | Singer |
1513 | </p> | 1516 | </p> |
1514 | </div> | 1517 | </div> |
1515 | </div> | 1518 | </div> |
1516 | </td> | 1519 | </td> |
1517 | <td class="px-4 py-3 text-sm"> | 1520 | <td class="px-4 py-3 text-sm"> |
1518 | $ 863.45 | 1521 | $ 863.45 |
1519 | </td> | 1522 | </td> |
1520 | <td class="px-4 py-3 text-xs"> | 1523 | <td class="px-4 py-3 text-xs"> |
1521 | <span | 1524 | <span |
1522 | class="px-2 py-1 font-semibold leading-tight text-green-700 bg-green-100 rounded-full dark:bg-green-700 dark:text-green-100" | 1525 | class="px-2 py-1 font-semibold leading-tight text-green-700 bg-green-100 rounded-full dark:bg-green-700 dark:text-green-100" |
1523 | > | 1526 | > |
1524 | Approved | 1527 | Approved |
1525 | </span> | 1528 | </span> |
1526 | </td> | 1529 | </td> |
1527 | <td class="px-4 py-3 text-sm"> | 1530 | <td class="px-4 py-3 text-sm"> |
1528 | 6/10/2020 | 1531 | 6/10/2020 |
1529 | </td> | 1532 | </td> |
1530 | </tr> | 1533 | </tr> |
1531 | 1534 | ||
1532 | <tr class="text-gray-700 dark:text-gray-400"> | 1535 | <tr class="text-gray-700 dark:text-gray-400"> |
1533 | <td class="px-4 py-3"> | 1536 | <td class="px-4 py-3"> |
1534 | <div class="flex items-center text-sm"> | 1537 | <div class="flex items-center text-sm"> |
1535 | 1538 | ||
1536 | <div | 1539 | <div |
1537 | class="relative hidden w-8 h-8 mr-3 rounded-full md:block" | 1540 | class="relative hidden w-8 h-8 mr-3 rounded-full md:block" |
1538 | > | 1541 | > |
1539 | <img | 1542 | <img |
1540 | class="object-cover w-full h-full rounded-full" | 1543 | class="object-cover w-full h-full rounded-full" |
1541 | src="https://images.unsplash.com/flagged/photo-1570612861542-284f4c12e75f?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE3Nzg0fQ" | 1544 | src="https://images.unsplash.com/flagged/photo-1570612861542-284f4c12e75f?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjE3Nzg0fQ" |
1542 | alt="" | 1545 | alt="" |
1543 | loading="lazy" | 1546 | loading="lazy" |
1544 | /> | 1547 | /> |
1545 | <div | 1548 | <div |
1546 | class="absolute inset-0 rounded-full shadow-inner" | 1549 | class="absolute inset-0 rounded-full shadow-inner" |
1547 | aria-hidden="true" | 1550 | aria-hidden="true" |
1548 | ></div> | 1551 | ></div> |
1549 | </div> | 1552 | </div> |
1550 | <div> | 1553 | <div> |
1551 | <p class="font-semibold">Hans Burger</p> | 1554 | <p class="font-semibold">Hans Burger</p> |
1552 | <p class="text-xs text-gray-600 dark:text-gray-400"> | 1555 | <p class="text-xs text-gray-600 dark:text-gray-400"> |
1553 | 10x Developer | 1556 | 10x Developer |
1554 | </p> | 1557 | </p> |
1555 | </div> | 1558 | </div> |
1556 | </div> | 1559 | </div> |
1557 | </td> | 1560 | </td> |
1558 | <td class="px-4 py-3 text-sm"> | 1561 | <td class="px-4 py-3 text-sm"> |
1559 | $ 863.45 | 1562 | $ 863.45 |
1560 | </td> | 1563 | </td> |
1561 | <td class="px-4 py-3 text-xs"> | 1564 | <td class="px-4 py-3 text-xs"> |
1562 | <span | 1565 | <span |
1563 | class="px-2 py-1 font-semibold leading-tight text-green-700 bg-green-100 rounded-full dark:bg-green-700 dark:text-green-100" | 1566 | class="px-2 py-1 font-semibold leading-tight text-green-700 bg-green-100 rounded-full dark:bg-green-700 dark:text-green-100" |
1564 | > | 1567 | > |
1565 | Approved | 1568 | Approved |
1566 | </span> | 1569 | </span> |
1567 | </td> | 1570 | </td> |
1568 | <td class="px-4 py-3 text-sm"> | 1571 | <td class="px-4 py-3 text-sm"> |
1569 | 6/10/2020 | 1572 | 6/10/2020 |
1570 | </td> | 1573 | </td> |
1571 | </tr> | 1574 | </tr> |
1572 | </tbody> | 1575 | </tbody> |
1573 | </table> | 1576 | </table> |
1574 | </div> | 1577 | </div> |
1575 | <div | 1578 | <div |
1576 | class="grid px-4 py-3 text-xs font-semibold tracking-wide text-gray-500 uppercase border-t dark:border-gray-700 bg-gray-50 sm:grid-cols-9 dark:text-gray-400 dark:bg-gray-800" | 1579 | class="grid px-4 py-3 text-xs font-semibold tracking-wide text-gray-500 uppercase border-t dark:border-gray-700 bg-gray-50 sm:grid-cols-9 dark:text-gray-400 dark:bg-gray-800" |
1577 | > | 1580 | > |
1578 | <span class="flex items-center col-span-3"> | 1581 | <span class="flex items-center col-span-3"> |
1579 | Showing 21-30 of 100 | 1582 | Showing 21-30 of 100 |
1580 | </span> | 1583 | </span> |
1581 | <span class="col-span-2"></span> | 1584 | <span class="col-span-2"></span> |
1582 | 1585 | ||
1583 | <span class="flex col-span-4 mt-2 sm:mt-auto sm:justify-end"> | 1586 | <span class="flex col-span-4 mt-2 sm:mt-auto sm:justify-end"> |
1584 | <nav aria-label="Table navigation"> | 1587 | <nav aria-label="Table navigation"> |
1585 | <ul class="inline-flex items-center"> | 1588 | <ul class="inline-flex items-center"> |
1586 | <li> | 1589 | <li> |
1587 | <button | 1590 | <button |
1588 | class="px-3 py-1 rounded-md rounded-l-lg focus:outline-none focus:shadow-outline-purple" | 1591 | class="px-3 py-1 rounded-md rounded-l-lg focus:outline-none focus:shadow-outline-purple" |
1589 | aria-label="Previous" | 1592 | aria-label="Previous" |
1590 | > | 1593 | > |
1591 | <svg | 1594 | <svg |
1592 | aria-hidden="true" | 1595 | aria-hidden="true" |
1593 | class="w-4 h-4 fill-current" | 1596 | class="w-4 h-4 fill-current" |
1594 | viewBox="0 0 20 20" | 1597 | viewBox="0 0 20 20" |
1595 | > | 1598 | > |
1596 | <path | 1599 | <path |
1597 | d="M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z" | 1600 | d="M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z" |
1598 | clip-rule="evenodd" | 1601 | clip-rule="evenodd" |
1599 | fill-rule="evenodd" | 1602 | fill-rule="evenodd" |
1600 | ></path> | 1603 | ></path> |
1601 | </svg> | 1604 | </svg> |
1602 | </button> | 1605 | </button> |
1603 | </li> | 1606 | </li> |
1604 | <li> | 1607 | <li> |
1605 | <button | 1608 | <button |
1606 | class="px-3 py-1 rounded-md focus:outline-none focus:shadow-outline-purple" | 1609 | class="px-3 py-1 rounded-md focus:outline-none focus:shadow-outline-purple" |
1607 | > | 1610 | > |
1608 | 1 | 1611 | 1 |
1609 | </button> | 1612 | </button> |
1610 | </li> | 1613 | </li> |
1611 | <li> | 1614 | <li> |
1612 | <button | 1615 | <button |
1613 | class="px-3 py-1 rounded-md focus:outline-none focus:shadow-outline-purple" | 1616 | class="px-3 py-1 rounded-md focus:outline-none focus:shadow-outline-purple" |
1614 | > | 1617 | > |
1615 | 2 | 1618 | 2 |
1616 | </button> | 1619 | </button> |
1617 | </li> | 1620 | </li> |
1618 | <li> | 1621 | <li> |
1619 | <button | 1622 | <button |
1620 | class="px-3 py-1 text-white transition-colors duration-150 bg-purple-600 border border-r-0 border-purple-600 rounded-md focus:outline-none focus:shadow-outline-purple" | 1623 | class="px-3 py-1 text-white transition-colors duration-150 bg-purple-600 border border-r-0 border-purple-600 rounded-md focus:outline-none focus:shadow-outline-purple" |
1621 | > | 1624 | > |
1622 | 3 | 1625 | 3 |
1623 | </button> | 1626 | </button> |
1624 | </li> | 1627 | </li> |
1625 | <li> | 1628 | <li> |
1626 | <button | 1629 | <button |
1627 | class="px-3 py-1 rounded-md focus:outline-none focus:shadow-outline-purple" | 1630 | class="px-3 py-1 rounded-md focus:outline-none focus:shadow-outline-purple" |
1628 | > | 1631 | > |
1629 | 4 | 1632 | 4 |
1630 | </button> | 1633 | </button> |
1631 | </li> | 1634 | </li> |
1632 | <li> | 1635 | <li> |
1633 | <span class="px-3 py-1">...</span> | 1636 | <span class="px-3 py-1">...</span> |
1634 | </li> | 1637 | </li> |
1635 | <li> | 1638 | <li> |
1636 | <button | 1639 | <button |
1637 | class="px-3 py-1 rounded-md focus:outline-none focus:shadow-outline-purple" | 1640 | class="px-3 py-1 rounded-md focus:outline-none focus:shadow-outline-purple" |
1638 | > | 1641 | > |
1639 | 8 | 1642 | 8 |
1640 | </button> | 1643 | </button> |
1641 | </li> | 1644 | </li> |
1642 | <li> | 1645 | <li> |
1643 | <button | 1646 | <button |
1644 | class="px-3 py-1 rounded-md focus:outline-none focus:shadow-outline-purple" | 1647 | class="px-3 py-1 rounded-md focus:outline-none focus:shadow-outline-purple" |
1645 | > | 1648 | > |
1646 | 9 | 1649 | 9 |
1647 | </button> | 1650 | </button> |
1648 | </li> | 1651 | </li> |
1649 | <li> | 1652 | <li> |
1650 | <button | 1653 | <button |
1651 | class="px-3 py-1 rounded-md rounded-r-lg focus:outline-none focus:shadow-outline-purple" | 1654 | class="px-3 py-1 rounded-md rounded-r-lg focus:outline-none focus:shadow-outline-purple" |
1652 | aria-label="Next" | 1655 | aria-label="Next" |
1653 | > | 1656 | > |
1654 | <svg | 1657 | <svg |
1655 | class="w-4 h-4 fill-current" | 1658 | class="w-4 h-4 fill-current" |
1656 | aria-hidden="true" | 1659 | aria-hidden="true" |
1657 | viewBox="0 0 20 20" | 1660 | viewBox="0 0 20 20" |
1658 | > | 1661 | > |
1659 | <path | 1662 | <path |
1660 | d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" | 1663 | d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" |
1661 | clip-rule="evenodd" | 1664 | clip-rule="evenodd" |
1662 | fill-rule="evenodd" | 1665 | fill-rule="evenodd" |
1663 | ></path> | 1666 | ></path> |
1664 | </svg> | 1667 | </svg> |
1665 | </button> | 1668 | </button> |
1666 | </li> | 1669 | </li> |
1667 | </ul> | 1670 | </ul> |
1668 | </nav> | 1671 | </nav> |
1669 | </span> | 1672 | </span> |
1670 | </div> | 1673 | </div> |
1671 | </div> | 1674 | </div> |
1672 | --> | 1675 | --> |
1673 | <!-- Charts --> | 1676 | <!-- Charts --> |
1674 | <!-- | 1677 | <!-- |
1675 | <h2 class="my-6 text-2xl font-semibold text-gray-700 dark:text-gray-200"> | 1678 | <h2 class="my-6 text-2xl font-semibold text-gray-700 dark:text-gray-200"> |
1676 | Графики | 1679 | Графики |
1677 | </h2> | 1680 | </h2> |
1678 | <div class="grid gap-6 mb-8 md:grid-cols-2"> | 1681 | <div class="grid gap-6 mb-8 md:grid-cols-2"> |
1679 | <div | 1682 | <div |
1680 | class="min-w-0 p-4 bg-white rounded-lg shadow-xs dark:bg-gray-800" | 1683 | class="min-w-0 p-4 bg-white rounded-lg shadow-xs dark:bg-gray-800" |
1681 | > | 1684 | > |
1682 | <h4 class="mb-4 font-semibold text-gray-800 dark:text-gray-300"> | 1685 | <h4 class="mb-4 font-semibold text-gray-800 dark:text-gray-300"> |
1683 | Revenue | 1686 | Revenue |
1684 | </h4> | 1687 | </h4> |
1685 | <canvas id="pie"></canvas> | 1688 | <canvas id="pie"></canvas> |
1686 | <div | 1689 | <div |
1687 | class="flex justify-center mt-4 space-x-3 text-sm text-gray-600 dark:text-gray-400" | 1690 | class="flex justify-center mt-4 space-x-3 text-sm text-gray-600 dark:text-gray-400" |
1688 | > | 1691 | > |
1689 | 1692 | ||
1690 | <div class="flex items-center"> | 1693 | <div class="flex items-center"> |
1691 | <span | 1694 | <span |
1692 | class="inline-block w-3 h-3 mr-1 bg-blue-500 rounded-full" | 1695 | class="inline-block w-3 h-3 mr-1 bg-blue-500 rounded-full" |
1693 | ></span> | 1696 | ></span> |
1694 | <span>Shirts</span> | 1697 | <span>Shirts</span> |
1695 | </div> | 1698 | </div> |
1696 | <div class="flex items-center"> | 1699 | <div class="flex items-center"> |
1697 | <span | 1700 | <span |
1698 | class="inline-block w-3 h-3 mr-1 bg-teal-600 rounded-full" | 1701 | class="inline-block w-3 h-3 mr-1 bg-teal-600 rounded-full" |
1699 | ></span> | 1702 | ></span> |
1700 | <span>Shoes</span> | 1703 | <span>Shoes</span> |
1701 | </div> | 1704 | </div> |
1702 | <div class="flex items-center"> | 1705 | <div class="flex items-center"> |
1703 | <span | 1706 | <span |
1704 | class="inline-block w-3 h-3 mr-1 bg-purple-600 rounded-full" | 1707 | class="inline-block w-3 h-3 mr-1 bg-purple-600 rounded-full" |
1705 | ></span> | 1708 | ></span> |
1706 | <span>Bags</span> | 1709 | <span>Bags</span> |
1707 | </div> | 1710 | </div> |
1708 | </div> | 1711 | </div> |
1709 | </div> | 1712 | </div> |
1710 | <div | 1713 | <div |
1711 | class="min-w-0 p-4 bg-white rounded-lg shadow-xs dark:bg-gray-800" | 1714 | class="min-w-0 p-4 bg-white rounded-lg shadow-xs dark:bg-gray-800" |
1712 | > | 1715 | > |
1713 | <h4 class="mb-4 font-semibold text-gray-800 dark:text-gray-300"> | 1716 | <h4 class="mb-4 font-semibold text-gray-800 dark:text-gray-300"> |
1714 | Traffic | 1717 | Traffic |
1715 | </h4> | 1718 | </h4> |
1716 | <canvas id="line"></canvas> | 1719 | <canvas id="line"></canvas> |
1717 | <div | 1720 | <div |
1718 | class="flex justify-center mt-4 space-x-3 text-sm text-gray-600 dark:text-gray-400" | 1721 | class="flex justify-center mt-4 space-x-3 text-sm text-gray-600 dark:text-gray-400" |
1719 | > | 1722 | > |
1720 | 1723 | ||
1721 | <div class="flex items-center"> | 1724 | <div class="flex items-center"> |
1722 | <span | 1725 | <span |
1723 | class="inline-block w-3 h-3 mr-1 bg-teal-600 rounded-full" | 1726 | class="inline-block w-3 h-3 mr-1 bg-teal-600 rounded-full" |
1724 | ></span> | 1727 | ></span> |
1725 | <span>Organic</span> | 1728 | <span>Organic</span> |
1726 | </div> | 1729 | </div> |
1727 | <div class="flex items-center"> | 1730 | <div class="flex items-center"> |
1728 | <span | 1731 | <span |
1729 | class="inline-block w-3 h-3 mr-1 bg-purple-600 rounded-full" | 1732 | class="inline-block w-3 h-3 mr-1 bg-purple-600 rounded-full" |
1730 | ></span> | 1733 | ></span> |
1731 | <span>Paid</span> | 1734 | <span>Paid</span> |
1732 | </div> | 1735 | </div> |
1733 | </div> | 1736 | </div> |
1734 | </div> | 1737 | </div> |
1735 | </div> | 1738 | </div> |
1736 | --> | 1739 | --> |
1737 | </div> | 1740 | </div> |
1738 | </main> | 1741 | </main> |
1739 | </div> | 1742 | </div> |
1740 | </div> | 1743 | </div> |
1741 | </body> | 1744 | </body> |
1742 | @yield('script') | 1745 | @yield('script') |
1743 | </html> | 1746 | </html> |
1744 | 1747 |