@mashka818/exam-de-template 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/exam-guides/EXAM_COMMANDS.txt +1 -1
- package/exam-guides/commented-code/client/index.html +7 -0
- package/exam-guides/commented-code/client/package-lock.json +541 -6
- package/exam-guides/commented-code/client/package.json +1 -0
- package/exam-guides/commented-code/client/public/images/README.txt +4 -24
- package/exam-guides/commented-code/client/public/images/about-cleaning.png +0 -0
- package/exam-guides/commented-code/client/public/images/admin-banner.png +0 -0
- package/exam-guides/commented-code/client/public/images/empty-requests.png +0 -0
- package/exam-guides/commented-code/client/public/images/footer-photo-1.png +0 -0
- package/exam-guides/commented-code/client/public/images/footer-photo-2.png +0 -0
- package/exam-guides/commented-code/client/public/images/footer-photo-3.png +0 -0
- package/exam-guides/commented-code/client/public/images/home-hero.png +0 -0
- package/exam-guides/commented-code/client/public/images/login-banner.png +0 -0
- package/exam-guides/commented-code/client/public/images/logo.png +0 -0
- package/exam-guides/commented-code/client/public/images/new-request-banner.png +0 -0
- package/exam-guides/commented-code/client/public/images/register-banner.png +0 -0
- package/exam-guides/commented-code/client/public/images/requests-banner.png +0 -0
- package/exam-guides/commented-code/client/public/images/slide-1.png +0 -0
- package/exam-guides/commented-code/client/public/images/slide-2.png +0 -0
- package/exam-guides/commented-code/client/public/images/slide-3.png +0 -0
- package/exam-guides/commented-code/client/src/App.jsx +14 -0
- package/exam-guides/commented-code/client/src/api.js +16 -2
- package/exam-guides/commented-code/client/src/components/FormField.jsx +7 -0
- package/exam-guides/commented-code/client/src/components/Layout.jsx +8 -0
- package/exam-guides/commented-code/client/src/components/PageImage.jsx +7 -0
- package/exam-guides/commented-code/client/src/components/ProtectedRoute.jsx +7 -0
- package/exam-guides/commented-code/client/src/components/UserNav.jsx +7 -0
- package/exam-guides/commented-code/client/src/components/landing/HeroSlider.jsx +7 -0
- package/exam-guides/commented-code/client/src/components/landing/LandingLayout.jsx +7 -0
- package/exam-guides/commented-code/client/src/components/landing/SiteFooter.jsx +7 -0
- package/exam-guides/commented-code/client/src/config/images.js +26 -28
- package/exam-guides/commented-code/client/src/constants/services.js +7 -0
- package/exam-guides/commented-code/client/src/context/AuthContext.jsx +8 -0
- package/exam-guides/commented-code/client/src/index.css +8 -0
- package/exam-guides/commented-code/client/src/main.jsx +8 -0
- package/exam-guides/commented-code/client/src/pages/AdminPage.jsx +59 -24
- package/exam-guides/commented-code/client/src/pages/LandingPage.jsx +7 -0
- package/exam-guides/commented-code/client/src/pages/LoginPage.jsx +8 -0
- package/exam-guides/commented-code/client/src/pages/RegisterPage.jsx +8 -0
- package/exam-guides/commented-code/client/src/pages/RequestFormPage.jsx +7 -0
- package/exam-guides/commented-code/client/src/pages/RequestsPage.jsx +7 -0
- package/exam-guides/commented-code/client/src/utils/validation.js +8 -0
- package/exam-guides/commented-code/client/vite.config.js +7 -0
- package/exam-guides/commented-code/server/.env.example +8 -0
- package/exam-guides/commented-code/server/db/init.js +7 -0
- package/exam-guides/commented-code/server/db/pool.js +7 -0
- package/exam-guides/commented-code/server/db/schema.sql +5 -0
- package/exam-guides/commented-code/server/db/seed.sql +5 -0
- package/exam-guides/commented-code/server/index.js +7 -0
- package/exam-guides/commented-code/server/middleware/auth.js +7 -0
- package/exam-guides/commented-code/server/routes/admin.js +23 -3
- package/exam-guides/commented-code/server/routes/auth.js +7 -0
- package/exam-guides/commented-code/server/routes/requests.js +7 -0
- package/exam-guides/commented-code/server/routes/services.js +7 -0
- package/exam-guides/commented-code/server/utils/validation.js +7 -0
- package/exam-project/EXAM_COMMANDS.txt +47 -0
- package/exam-project/README.md +4 -7
- package/exam-project/THEME_BANQUETAM_NET.md +106 -0
- package/exam-project/client/index.html +7 -0
- package/exam-project/client/package-lock.json +541 -6
- package/exam-project/client/package.json +1 -0
- package/exam-project/client/public/images/README.txt +4 -24
- package/exam-project/client/public/images/about-cleaning.png +0 -0
- package/exam-project/client/public/images/admin-banner.png +0 -0
- package/exam-project/client/public/images/empty-requests.png +0 -0
- package/exam-project/client/public/images/footer-photo-1.png +0 -0
- package/exam-project/client/public/images/footer-photo-2.png +0 -0
- package/exam-project/client/public/images/footer-photo-3.png +0 -0
- package/exam-project/client/public/images/home-hero.png +0 -0
- package/exam-project/client/public/images/login-banner.png +0 -0
- package/exam-project/client/public/images/logo.png +0 -0
- package/exam-project/client/public/images/new-request-banner.png +0 -0
- package/exam-project/client/public/images/register-banner.png +0 -0
- package/exam-project/client/public/images/requests-banner.png +0 -0
- package/exam-project/client/public/images/slide-1.png +0 -0
- package/exam-project/client/public/images/slide-2.png +0 -0
- package/exam-project/client/public/images/slide-3.png +0 -0
- package/exam-project/client/src/App.jsx +35 -1
- package/exam-project/client/src/api.js +37 -2
- package/exam-project/client/src/components/FormField.jsx +22 -1
- package/exam-project/client/src/components/Layout.jsx +34 -4
- package/exam-project/client/src/components/PageImage.jsx +24 -1
- package/exam-project/client/src/components/ProtectedRoute.jsx +23 -1
- package/exam-project/client/src/components/UserNav.jsx +20 -0
- package/exam-project/client/src/components/landing/HeroSlider.jsx +23 -2
- package/exam-project/client/src/components/landing/LandingLayout.jsx +23 -1
- package/exam-project/client/src/components/landing/SiteFooter.jsx +20 -0
- package/exam-project/client/src/config/images.js +45 -26
- package/exam-project/client/src/constants/services.js +20 -1
- package/exam-project/client/src/context/AuthContext.jsx +26 -1
- package/exam-project/client/src/index.css +28 -1
- package/exam-project/client/src/main.jsx +20 -1
- package/exam-project/client/src/pages/AdminPage.jsx +65 -7
- package/exam-project/client/src/pages/LandingPage.jsx +23 -0
- package/exam-project/client/src/pages/LoginPage.jsx +28 -2
- package/exam-project/client/src/pages/RegisterPage.jsx +29 -1
- package/exam-project/client/src/pages/RequestFormPage.jsx +28 -3
- package/exam-project/client/src/pages/RequestsPage.jsx +26 -1
- package/exam-project/client/src/utils/validation.js +26 -1
- package/exam-project/client/vite.config.js +22 -1
- package/exam-project/scripts/unpack-template.js +2 -1
- package/exam-project/server/.env.example +8 -0
- package/exam-project/server/db/init.js +27 -3
- package/exam-project/server/db/pool.js +20 -1
- package/exam-project/server/db/schema.sql +17 -0
- package/exam-project/server/db/seed.sql +8 -0
- package/exam-project/server/index.js +24 -1
- package/exam-project/server/middleware/auth.js +22 -1
- package/exam-project/server/routes/admin.js +44 -4
- package/exam-project/server/routes/auth.js +27 -1
- package/exam-project/server/routes/requests.js +27 -4
- package/exam-project/server/routes/services.js +21 -1
- package/exam-project/server/utils/validation.js +27 -2
- package/package.json +1 -1
- package/scripts/unpack-template.js +2 -1
- package/exam-guides/commented-code/client/public/images/about-cleaning.svg +0 -4
- package/exam-guides/commented-code/client/public/images/admin-banner.svg +0 -1
- package/exam-guides/commented-code/client/public/images/empty-requests.svg +0 -1
- package/exam-guides/commented-code/client/public/images/footer-photo-1.svg +0 -4
- package/exam-guides/commented-code/client/public/images/footer-photo-2.svg +0 -4
- package/exam-guides/commented-code/client/public/images/footer-photo-3.svg +0 -4
- package/exam-guides/commented-code/client/public/images/home-hero.svg +0 -4
- package/exam-guides/commented-code/client/public/images/login-banner.svg +0 -1
- package/exam-guides/commented-code/client/public/images/logo.svg +0 -4
- package/exam-guides/commented-code/client/public/images/new-request-banner.svg +0 -1
- package/exam-guides/commented-code/client/public/images/register-banner.svg +0 -1
- package/exam-guides/commented-code/client/public/images/requests-banner.svg +0 -1
- package/exam-guides/commented-code/client/public/images/slide-1.svg +0 -6
- package/exam-guides/commented-code/client/public/images/slide-2.svg +0 -5
- package/exam-guides/commented-code/client/public/images/slide-3.svg +0 -5
- package/exam-project/client/public/images/about-cleaning.svg +0 -4
- package/exam-project/client/public/images/admin-banner.svg +0 -1
- package/exam-project/client/public/images/empty-requests.svg +0 -1
- package/exam-project/client/public/images/footer-photo-1.svg +0 -4
- package/exam-project/client/public/images/footer-photo-2.svg +0 -4
- package/exam-project/client/public/images/footer-photo-3.svg +0 -4
- package/exam-project/client/public/images/home-hero.svg +0 -4
- package/exam-project/client/public/images/login-banner.svg +0 -1
- package/exam-project/client/public/images/logo.svg +0 -4
- package/exam-project/client/public/images/new-request-banner.svg +0 -1
- package/exam-project/client/public/images/register-banner.svg +0 -1
- package/exam-project/client/public/images/requests-banner.svg +0 -1
- package/exam-project/client/public/images/slide-1.svg +0 -6
- package/exam-project/client/public/images/slide-2.svg +0 -5
- package/exam-project/client/public/images/slide-3.svg +0 -5
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* =============================================================================
|
|
3
|
+
* ФАЙЛ: server/routes/admin.js
|
|
4
|
+
* GET /requests?status= — фильтр. PATCH /requests/:id/status
|
|
5
|
+
* =============================================================================
|
|
6
|
+
*/
|
|
7
|
+
|
|
1
8
|
/**
|
|
2
9
|
* =============================================================================
|
|
3
10
|
* ADMIN — /api/admin (только role=admin, логин adminka)
|
|
@@ -27,16 +34,29 @@ const router = Router();
|
|
|
27
34
|
|
|
28
35
|
const ALLOWED_STATUSES = ['in_progress', 'completed', 'cancelled']; // БАНКЕТАМ.НЕТ: убрать 'cancelled'
|
|
29
36
|
|
|
30
|
-
// GET /api/admin/requests — все
|
|
31
|
-
|
|
37
|
+
// GET /api/admin/requests — все заявки; ?status=new|in_progress|completed|cancelled (без all)
|
|
38
|
+
const FILTER_STATUSES = ['new', 'in_progress', 'completed', 'cancelled'];
|
|
39
|
+
|
|
40
|
+
router.get('/requests', authRequired, adminRequired, async (req, res) => {
|
|
32
41
|
try {
|
|
42
|
+
const { status } = req.query;
|
|
43
|
+
const params = [];
|
|
44
|
+
let where = 'WHERE 1=1';
|
|
45
|
+
|
|
46
|
+
if (status && status !== 'all' && FILTER_STATUSES.includes(status)) {
|
|
47
|
+
params.push(status);
|
|
48
|
+
where += ` AND r.status = $${params.length}`;
|
|
49
|
+
}
|
|
50
|
+
|
|
33
51
|
const { rows } = await pool.query(
|
|
34
52
|
`SELECT r.*, st.name AS service_name, u.full_name AS user_full_name,
|
|
35
53
|
u.phone AS user_phone, u.email AS user_email
|
|
36
54
|
FROM requests r
|
|
37
55
|
LEFT JOIN service_types st ON st.id = r.service_type_id
|
|
38
56
|
JOIN users u ON u.id = r.user_id
|
|
39
|
-
|
|
57
|
+
${where}
|
|
58
|
+
ORDER BY r.created_at DESC`,
|
|
59
|
+
params
|
|
40
60
|
);
|
|
41
61
|
res.json(
|
|
42
62
|
rows.map((row) => ({
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* =============================================================================
|
|
3
|
+
* ФАЙЛ: server/routes/auth.js
|
|
4
|
+
* POST /register, POST /login, GET /me
|
|
5
|
+
* =============================================================================
|
|
6
|
+
*/
|
|
7
|
+
|
|
1
8
|
/**
|
|
2
9
|
* =============================================================================
|
|
3
10
|
* AUTH — /api/auth
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* =============================================================================
|
|
3
|
+
* ФАЙЛ: server/routes/requests.js
|
|
4
|
+
* GET /mine, POST / — заявки пользователя. STATUS_LABELS — подписи статусов
|
|
5
|
+
* =============================================================================
|
|
6
|
+
*/
|
|
7
|
+
|
|
1
8
|
/**
|
|
2
9
|
* =============================================================================
|
|
3
10
|
* REQUESTS — /api/requests (только role=user)
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* =============================================================================
|
|
3
|
+
* ФАЙЛ: server/routes/services.js
|
|
4
|
+
* GET /api/services — справочник для select на форме п.4
|
|
5
|
+
* =============================================================================
|
|
6
|
+
*/
|
|
7
|
+
|
|
1
8
|
/**
|
|
2
9
|
* =============================================================================
|
|
3
10
|
* SERVICES — GET /api/services
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* =============================================================================
|
|
3
|
+
* ФАЙЛ: server/utils/validation.js
|
|
4
|
+
* Как client/src/utils/validation.js — те же правила!
|
|
5
|
+
* =============================================================================
|
|
6
|
+
*/
|
|
7
|
+
|
|
1
8
|
/**
|
|
2
9
|
* =============================================================================
|
|
3
10
|
* ВАЛИДАЦИЯ НА СЕРВЕРЕ (обязательно дублировать на клиенте)
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
================================================================================
|
|
2
|
+
ЭКЗАМЕН — одна команда, две папки
|
|
3
|
+
================================================================================
|
|
4
|
+
Нужны: Node.js, PostgreSQL, интернет, пакет на npm (см. NPM_PACKAGE.md)
|
|
5
|
+
|
|
6
|
+
Пакет: @mashka818/exam-de-template
|
|
7
|
+
|
|
8
|
+
--------------------------------------------------------------------------------
|
|
9
|
+
НА ЭКЗАМЕНЕ
|
|
10
|
+
--------------------------------------------------------------------------------
|
|
11
|
+
|
|
12
|
+
mkdir C:\DE\work
|
|
13
|
+
cd C:\DE\work
|
|
14
|
+
npx @mashka818/exam-de-template@1.0.1 init
|
|
15
|
+
|
|
16
|
+
Появятся:
|
|
17
|
+
exam-project\ — правите и запускаете ЗДЕСЬ
|
|
18
|
+
exam-guides\ — шпоры (удалить перед сдачей)
|
|
19
|
+
|
|
20
|
+
cd exam-project
|
|
21
|
+
copy server\.env.example server\.env
|
|
22
|
+
notepad server\.env
|
|
23
|
+
npm run db:init
|
|
24
|
+
npm run dev
|
|
25
|
+
|
|
26
|
+
Сайт: http://localhost:5173
|
|
27
|
+
|
|
28
|
+
--------------------------------------------------------------------------------
|
|
29
|
+
ПЕРЕД СДАЧЕЙ
|
|
30
|
+
--------------------------------------------------------------------------------
|
|
31
|
+
|
|
32
|
+
cd ..
|
|
33
|
+
rmdir /s /q exam-guides
|
|
34
|
+
|
|
35
|
+
(остаётся только exam-project — его и показываете)
|
|
36
|
+
|
|
37
|
+
--------------------------------------------------------------------------------
|
|
38
|
+
ДОМА (один раз)
|
|
39
|
+
--------------------------------------------------------------------------------
|
|
40
|
+
|
|
41
|
+
npm run sync:project
|
|
42
|
+
cd exam-project
|
|
43
|
+
npm publish --access public
|
|
44
|
+
|
|
45
|
+
Подробно: NPM_PACKAGE.md
|
|
46
|
+
|
|
47
|
+
================================================================================
|
package/exam-project/README.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
#
|
|
1
|
+
# exam-project — работайте здесь
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
В каждом файле кода вверху блок **ФАЙЛ:** — что менять на экзамене.
|
|
4
|
+
Полная карта: **КАРТА_ЭКЗАМЕНА.md**
|
|
4
5
|
|
|
5
6
|
```powershell
|
|
6
7
|
npm run install:all
|
|
@@ -9,8 +10,4 @@ npm run db:init
|
|
|
9
10
|
npm run dev
|
|
10
11
|
```
|
|
11
12
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
**Перед сдачей:** удалите соседнюю папку **exam-guides** (целиком).
|
|
15
|
-
|
|
16
|
-
Дома обновить из копии с комментариями: в корне репозитория `npm run sync:project`
|
|
13
|
+
Перед сдачей: удалите папку **exam-guides** (если рядом). При желании уберите лишние комментарии из кода.
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# Тема «Банкетам.Нет» — что менять в шаблоне (только текст и логика по комментариям)
|
|
2
|
+
|
|
3
|
+
> **Подробный гайд** (как удалять/добавлять кнопки, картинки, секции, новую страницу): **[GUIDE_PAGES.md](GUIDE_PAGES.md)**
|
|
4
|
+
|
|
5
|
+
Сейчас в коде тема **«Мой Не Сам» (клининг)**. На экзамене ищите в файлах метку **`БАНКЕТАМ.НЕТ:`** — там подсказка, что заменить.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Быстрая таблица замен
|
|
10
|
+
|
|
11
|
+
| Сейчас (клининг) | Банкетам.Нет |
|
|
12
|
+
|------------------|--------------|
|
|
13
|
+
| Мой Не Сам | **Банкетам.Нет** |
|
|
14
|
+
| Заявка / requests | **Бронирование / заявка на зал** |
|
|
15
|
+
| Вид услуги | **Помещение** (зал, ресторан, летняя веранда, закрытая веранда) |
|
|
16
|
+
| Дата и время уборки | **Дата начала банкета** (формат **ДД.ММ.ГГГГ**) |
|
|
17
|
+
| adminka / password | **Admin26 / Demo20** |
|
|
18
|
+
| Статус «В работе» | **Банкет назначен** |
|
|
19
|
+
| Статус «Выполнено» | **Банкет завершен** |
|
|
20
|
+
| Отменено | по заданию может не быть — убрать кнопку или оставить |
|
|
21
|
+
| Пароль ≥ 6 | **Пароль ≥ 8** |
|
|
22
|
+
| Логин | **латиница + цифры, ≥ 6**, уникальный |
|
|
23
|
+
| Слайдер 3 слайда, 5 сек | **4 слайда, 3 сек** (HeroSlider.jsx, images.js) |
|
|
24
|
+
| «Иная услуга» | обычно **не нужна** — убрать чекбокс |
|
|
25
|
+
| Личный кабинет п.3 | история + **отзывы** (только после смены статуса админом) |
|
|
26
|
+
| Админ-панель | **фильтры, сортировка, пагинация**, уведомления |
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Пункты задания → файлы
|
|
31
|
+
|
|
32
|
+
### п.1 Регистрация (`/register`)
|
|
33
|
+
- `RegisterPage.jsx` — подписи полей, ссылка «Уже зарегистрированы?» → наоборот: на login «**Еще не зарегистрированы? Регистрация**»
|
|
34
|
+
- `client/src/utils/validation.js` + `server/utils/validation.js` — логин `[a-zA-Z0-9]{6,}`, пароль `min 8`
|
|
35
|
+
- `server/routes/auth.js` — INSERT users
|
|
36
|
+
|
|
37
|
+
### п.2 Вход (`/login`)
|
|
38
|
+
- `LoginPage.jsx` — текст ошибок, ссылка на регистрацию
|
|
39
|
+
- `server/routes/auth.js` — POST /login
|
|
40
|
+
|
|
41
|
+
### п.3 Личный кабинет (`/requests`)
|
|
42
|
+
- `RequestsPage.jsx` — «история бронирований», **слайдер** (можно вынести компонент с лендинга)
|
|
43
|
+
- **ДОБАВИТЬ:** таблица/поле `reviews` в БД, форма отзыва если статус ≠ `new` (после действия админа)
|
|
44
|
+
- `server/db/schema.sql` — комментарий про `reviews`
|
|
45
|
+
|
|
46
|
+
### п.4 Оформление заявки (`/requests/form`)
|
|
47
|
+
- `RequestFormPage.jsx` — select помещений, дата **ДД.ММ.ГГГГ**, оплата
|
|
48
|
+
- `server/db/seed.sql` — 4 типа помещений
|
|
49
|
+
- убрать/не показывать «Иная услуга»
|
|
50
|
+
|
|
51
|
+
### п.5 Админ (`/admin`)
|
|
52
|
+
- `server/db/init.js` — **Admin26** / **Demo20**
|
|
53
|
+
- `AdminPage.jsx` — статусы только «Банкет назначен», «Банкет завершен» (+ изначально «Новая»)
|
|
54
|
+
- **ДОБАВИТЬ:** фильтр по статусу, сортировка, пагинация (комментарии в AdminPage.jsx)
|
|
55
|
+
|
|
56
|
+
### Лендинг (`/`)
|
|
57
|
+
- `LandingPage.jsx`, `HeroSlider.jsx` — тексты про банкеты, **4** картинки, интервал **3000** мс
|
|
58
|
+
- `client/public/images/` — slide-1…slide-4.png
|
|
59
|
+
|
|
60
|
+
### Модуль 2
|
|
61
|
+
- HTML-макеты 390×844 в Figma, не обязательно в репозитории
|
|
62
|
+
- `RESPONSIVE.md` — мобильный дизайн
|
|
63
|
+
|
|
64
|
+
### Модуль 3
|
|
65
|
+
- `schema.sql` — отзывы, при необходимости убрать `cancelled`
|
|
66
|
+
- `index.css` — микроанимации уже есть (animate-fade-up)
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Статусы в БД (schema.sql + routes)
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
new → «Новая»
|
|
74
|
+
in_progress → «Банкет назначен» (переименовать LABEL, не обязательно ключ)
|
|
75
|
+
completed → «Банкет завершен»
|
|
76
|
+
cancelled → убрать из CHECK или не показывать в админке
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
В `server/routes/requests.js` и `admin.js` — `STATUS_LABELS`.
|
|
80
|
+
В `RequestsPage.jsx` — `statusColors`.
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Помещения (seed.sql)
|
|
85
|
+
|
|
86
|
+
```sql
|
|
87
|
+
('Банкетный зал'),
|
|
88
|
+
('Ресторан'),
|
|
89
|
+
('Летняя веранда'),
|
|
90
|
+
('Закрытая веранда')
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Порядок работы на экзамене (≈30–60 мин только тексты)
|
|
96
|
+
|
|
97
|
+
1. `Layout.jsx` + `LandingLayout.jsx` — название **Банкетам.Нет**
|
|
98
|
+
2. `init.js` — Admin26 / Demo20 → `npm run db:init`
|
|
99
|
+
3. `seed.sql` — помещения
|
|
100
|
+
4. `validation.js` (×2) — логин/пароль
|
|
101
|
+
5. Все `pages/*.jsx` — заголовки и кнопки
|
|
102
|
+
6. `STATUS_LABELS` + админ-кнопки
|
|
103
|
+
7. Картинки в `public/images/` + `images.js`
|
|
104
|
+
8. По времени: отзывы, фильтры админа, 4-й слайд
|
|
105
|
+
|
|
106
|
+
Удачи на ДЭ.
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* =============================================================================
|
|
3
|
+
* ФАЙЛ: client/index.html
|
|
4
|
+
* <title> — название вкладки браузера
|
|
5
|
+
* =============================================================================
|
|
6
|
+
*/
|
|
7
|
+
|
|
1
8
|
<!DOCTYPE html>
|
|
2
9
|
<html lang="ru">
|
|
3
10
|
<head>
|