@mashka818/exam-de-template 1.0.0
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/COMMENTS_GUIDE.md +53 -0
- package/exam-guides/EXAM_COMMANDS.txt +47 -0
- package/exam-guides/GUIDE_PAGES.md +529 -0
- package/exam-guides/NPM_PACKAGE.md +206 -0
- package/exam-guides/README.md +40 -0
- package/exam-guides/RESPONSIVE.md +224 -0
- package/exam-guides/TECH_STACK.txt +142 -0
- package/exam-guides/THEME_BANQUETAM_NET.md +106 -0
- package/exam-guides/commented-code/README.txt +5 -0
- package/exam-guides/commented-code/client/index.html +14 -0
- package/exam-guides/commented-code/client/package-lock.json +2298 -0
- package/exam-guides/commented-code/client/package.json +21 -0
- package/exam-guides/commented-code/client/public/images/README.txt +26 -0
- package/exam-guides/commented-code/client/public/images/about-cleaning.svg +4 -0
- package/exam-guides/commented-code/client/public/images/admin-banner.svg +1 -0
- package/exam-guides/commented-code/client/public/images/empty-requests.svg +1 -0
- package/exam-guides/commented-code/client/public/images/footer-photo-1.svg +4 -0
- package/exam-guides/commented-code/client/public/images/footer-photo-2.svg +4 -0
- package/exam-guides/commented-code/client/public/images/footer-photo-3.svg +4 -0
- package/exam-guides/commented-code/client/public/images/home-hero.svg +4 -0
- package/exam-guides/commented-code/client/public/images/login-banner.svg +1 -0
- package/exam-guides/commented-code/client/public/images/logo.svg +4 -0
- package/exam-guides/commented-code/client/public/images/new-request-banner.svg +1 -0
- package/exam-guides/commented-code/client/public/images/register-banner.svg +1 -0
- package/exam-guides/commented-code/client/public/images/requests-banner.svg +1 -0
- package/exam-guides/commented-code/client/public/images/slide-1.svg +6 -0
- package/exam-guides/commented-code/client/public/images/slide-2.svg +5 -0
- package/exam-guides/commented-code/client/public/images/slide-3.svg +5 -0
- package/exam-guides/commented-code/client/src/App.jsx +72 -0
- package/exam-guides/commented-code/client/src/api.js +71 -0
- package/exam-guides/commented-code/client/src/components/FormField.jsx +25 -0
- package/exam-guides/commented-code/client/src/components/Layout.jsx +83 -0
- package/exam-guides/commented-code/client/src/components/PageImage.jsx +38 -0
- package/exam-guides/commented-code/client/src/components/ProtectedRoute.jsx +35 -0
- package/exam-guides/commented-code/client/src/components/UserNav.jsx +33 -0
- package/exam-guides/commented-code/client/src/components/landing/HeroSlider.jsx +103 -0
- package/exam-guides/commented-code/client/src/components/landing/LandingLayout.jsx +76 -0
- package/exam-guides/commented-code/client/src/components/landing/SiteFooter.jsx +74 -0
- package/exam-guides/commented-code/client/src/config/images.js +104 -0
- package/exam-guides/commented-code/client/src/constants/services.js +19 -0
- package/exam-guides/commented-code/client/src/context/AuthContext.jsx +72 -0
- package/exam-guides/commented-code/client/src/index.css +73 -0
- package/exam-guides/commented-code/client/src/main.jsx +28 -0
- package/exam-guides/commented-code/client/src/pages/AdminPage.jsx +151 -0
- package/exam-guides/commented-code/client/src/pages/LandingPage.jsx +131 -0
- package/exam-guides/commented-code/client/src/pages/LoginPage.jsx +81 -0
- package/exam-guides/commented-code/client/src/pages/RegisterPage.jsx +117 -0
- package/exam-guides/commented-code/client/src/pages/RequestFormPage.jsx +196 -0
- package/exam-guides/commented-code/client/src/pages/RequestsPage.jsx +112 -0
- package/exam-guides/commented-code/client/src/utils/validation.js +71 -0
- package/exam-guides/commented-code/client/vite.config.js +31 -0
- package/exam-guides/commented-code/server/db/init.js +67 -0
- package/exam-guides/commented-code/server/db/pool.js +23 -0
- package/exam-guides/commented-code/server/db/schema.sql +53 -0
- package/exam-guides/commented-code/server/db/seed.sql +15 -0
- package/exam-guides/commented-code/server/index.js +45 -0
- package/exam-guides/commented-code/server/middleware/auth.js +38 -0
- package/exam-guides/commented-code/server/package-lock.json +1084 -0
- package/exam-guides/commented-code/server/package.json +17 -0
- package/exam-guides/commented-code/server/routes/admin.js +96 -0
- package/exam-guides/commented-code/server/routes/auth.js +128 -0
- package/exam-guides/commented-code/server/routes/requests.js +115 -0
- package/exam-guides/commented-code/server/routes/services.js +31 -0
- package/exam-guides/commented-code/server/utils/validation.js +81 -0
- package/exam-guides/exam-starter/README.txt +22 -0
- package/exam-guides/exam-starter/package.json +13 -0
- package/exam-guides//320/243/320/224/320/220/320/233/320/230/320/242/320/254-/320/237/320/225/320/240/320/225/320/224-/320/241/320/224/320/220/320/247/320/225/320/231.txt +9 -0
- package/exam-project/README.md +16 -0
- package/exam-project/client/index.html +14 -0
- package/exam-project/client/package-lock.json +2298 -0
- package/exam-project/client/package.json +21 -0
- package/exam-project/client/public/images/README.txt +26 -0
- package/exam-project/client/public/images/about-cleaning.svg +4 -0
- package/exam-project/client/public/images/admin-banner.svg +1 -0
- package/exam-project/client/public/images/empty-requests.svg +1 -0
- package/exam-project/client/public/images/footer-photo-1.svg +4 -0
- package/exam-project/client/public/images/footer-photo-2.svg +4 -0
- package/exam-project/client/public/images/footer-photo-3.svg +4 -0
- package/exam-project/client/public/images/home-hero.svg +4 -0
- package/exam-project/client/public/images/login-banner.svg +1 -0
- package/exam-project/client/public/images/logo.svg +4 -0
- package/exam-project/client/public/images/new-request-banner.svg +1 -0
- package/exam-project/client/public/images/register-banner.svg +1 -0
- package/exam-project/client/public/images/requests-banner.svg +1 -0
- package/exam-project/client/public/images/slide-1.svg +6 -0
- package/exam-project/client/public/images/slide-2.svg +5 -0
- package/exam-project/client/public/images/slide-3.svg +5 -0
- package/exam-project/client/src/App.jsx +52 -0
- package/exam-project/client/src/api.js +50 -0
- package/exam-project/client/src/components/FormField.jsx +11 -0
- package/exam-project/client/src/components/Layout.jsx +61 -0
- package/exam-project/client/src/components/PageImage.jsx +22 -0
- package/exam-project/client/src/components/ProtectedRoute.jsx +20 -0
- package/exam-project/client/src/components/UserNav.jsx +20 -0
- package/exam-project/client/src/components/landing/HeroSlider.jsx +89 -0
- package/exam-project/client/src/components/landing/LandingLayout.jsx +61 -0
- package/exam-project/client/src/components/landing/SiteFooter.jsx +61 -0
- package/exam-project/client/src/config/images.js +83 -0
- package/exam-project/client/src/constants/services.js +7 -0
- package/exam-project/client/src/context/AuthContext.jsx +55 -0
- package/exam-project/client/src/index.css +54 -0
- package/exam-project/client/src/main.jsx +17 -0
- package/exam-project/client/src/pages/AdminPage.jsx +128 -0
- package/exam-project/client/src/pages/LandingPage.jsx +115 -0
- package/exam-project/client/src/pages/LoginPage.jsx +63 -0
- package/exam-project/client/src/pages/RegisterPage.jsx +97 -0
- package/exam-project/client/src/pages/RequestFormPage.jsx +178 -0
- package/exam-project/client/src/pages/RequestsPage.jsx +94 -0
- package/exam-project/client/src/utils/validation.js +54 -0
- package/exam-project/client/vite.config.js +17 -0
- package/exam-project/package.json +18 -0
- package/exam-project/scripts/init-project.js +86 -0
- package/exam-project/scripts/prepack.js +27 -0
- package/exam-project/scripts/unpack-template.js +105 -0
- package/exam-project/server/db/init.js +50 -0
- package/exam-project/server/db/pool.js +11 -0
- package/exam-project/server/db/schema.sql +41 -0
- package/exam-project/server/db/seed.sql +12 -0
- package/exam-project/server/index.js +29 -0
- package/exam-project/server/middleware/auth.js +24 -0
- package/exam-project/server/package-lock.json +1084 -0
- package/exam-project/server/package.json +17 -0
- package/exam-project/server/routes/admin.js +76 -0
- package/exam-project/server/routes/auth.js +109 -0
- package/exam-project/server/routes/requests.js +99 -0
- package/exam-project/server/routes/services.js +18 -0
- package/exam-project/server/utils/validation.js +63 -0
- package/package.json +25 -0
- package/scripts/init-project.js +86 -0
- package/scripts/prepack.js +27 -0
- package/scripts/unpack-template.js +105 -0
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
# Шаблон на npm (экзамен **без флешки**)
|
|
2
|
+
|
|
3
|
+
На экзамене нужны **интернет** и заранее опубликованный пакет на https://www.npmjs.com/
|
|
4
|
+
|
|
5
|
+
Вы создаёте папку → `npm install` или `npx … init` → шаблон скачивается в `node_modules` → распаковка в проект (или работа из `node_modules`).
|
|
6
|
+
|
|
7
|
+
Краткая шпаргалка команд: **EXAM_COMMANDS.txt**
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 1. Один раз дома: опубликовать пакет
|
|
12
|
+
|
|
13
|
+
### 1.1. Регистрация
|
|
14
|
+
|
|
15
|
+
1. Аккаунт: https://www.npmjs.com/~mashka818 (логин `mashka818`)
|
|
16
|
+
2. Подтвердите email
|
|
17
|
+
|
|
18
|
+
### 1.2. Имя пакета (обязательно scoped)
|
|
19
|
+
|
|
20
|
+
В корне `examTemplate` откройте **`package.json`** и замените `name`:
|
|
21
|
+
|
|
22
|
+
```json
|
|
23
|
+
"name": "@mashka818/exam-de-template",
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Формат: `@ваш-логин-npm/любое-имя` — так имя почти всегда свободно.
|
|
27
|
+
|
|
28
|
+
Добавьте (если ещё нет):
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
"publishConfig": {
|
|
32
|
+
"access": "public"
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### 1.3. Публикация
|
|
37
|
+
|
|
38
|
+
**Не** из папки `exam-project` (там другой `package.json`). Из **корня** репозитория:
|
|
39
|
+
|
|
40
|
+
```powershell
|
|
41
|
+
cd C:\Users\Masha\Desktop\examTemplate
|
|
42
|
+
npm login
|
|
43
|
+
npm run publish:npm
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Если включена 2FA на npm — код из приложения:
|
|
47
|
+
|
|
48
|
+
```powershell
|
|
49
|
+
npm run publish:npm -- --otp=123456
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Проверка в браузере: `https://www.npmjs.com/package/@mashka818/exam-de-template`
|
|
53
|
+
|
|
54
|
+
После правок шаблона увеличьте `"version": "1.0.1"` и снова `npm publish`.
|
|
55
|
+
|
|
56
|
+
### 1.4. Что запомнить на экзамен
|
|
57
|
+
|
|
58
|
+
- Полное имя пакета: `@mashka818/exam-de-template`
|
|
59
|
+
- Версия: `1.0.0` (или актуальная)
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## 2. На экзамене — одна команда
|
|
64
|
+
|
|
65
|
+
```powershell
|
|
66
|
+
mkdir C:\DE\work
|
|
67
|
+
cd C:\DE\work
|
|
68
|
+
npx @mashka818/exam-de-template@1.0.0 init
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Появятся две папки:
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
C:\DE\work\
|
|
75
|
+
exam-project\ ← правите и запускаете
|
|
76
|
+
exam-guides\ ← шпоры (удалить перед сдачей)
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
`init` ставит зависимости в **exam-project**.
|
|
80
|
+
|
|
81
|
+
Дальше:
|
|
82
|
+
|
|
83
|
+
```powershell
|
|
84
|
+
cd exam-project
|
|
85
|
+
copy server\.env.example server\.env
|
|
86
|
+
notepad server\.env
|
|
87
|
+
npm run db:init
|
|
88
|
+
npm run dev
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Перед сдачей: удалите папку **exam-guides** (уровнем выше: `cd ..` → `rmdir /s /q exam-guides`).
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## 3. На экзамене — через `npm install` (как вы просили)
|
|
96
|
+
|
|
97
|
+
### Вариант А: без своего package.json
|
|
98
|
+
|
|
99
|
+
```powershell
|
|
100
|
+
mkdir C:\DE\work
|
|
101
|
+
cd C:\DE\work
|
|
102
|
+
npm install @mashka818/exam-de-template@1.0.0
|
|
103
|
+
npx exam-de-unpack --here
|
|
104
|
+
npm install
|
|
105
|
+
npm run install:all
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
После первой строки пакет лежит в `node_modules/@mashka818/exam-de-template`.
|
|
109
|
+
`exam-de-unpack` копирует файлы в текущую папку — удобно сдавать проект не из `node_modules`.
|
|
110
|
+
|
|
111
|
+
### Вариант Б: свой минимальный `package.json`
|
|
112
|
+
|
|
113
|
+
Скопируйте смысл из **`exam-starter/package.json`** (подставьте свой логин):
|
|
114
|
+
|
|
115
|
+
```json
|
|
116
|
+
{
|
|
117
|
+
"name": "de-exam-work",
|
|
118
|
+
"private": true,
|
|
119
|
+
"dependencies": {
|
|
120
|
+
"@mashka818/exam-de-template": "1.0.0"
|
|
121
|
+
},
|
|
122
|
+
"scripts": {
|
|
123
|
+
"postinstall": "exam-de-unpack --here"
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
```powershell
|
|
129
|
+
cd C:\DE\work
|
|
130
|
+
npm install
|
|
131
|
+
npm install
|
|
132
|
+
npm run install:all
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Два раза `npm install`: после первого `postinstall` подменяет `package.json` полным шаблоном.
|
|
136
|
+
|
|
137
|
+
### Вариант В: только `node_modules` (как у одногруппника)
|
|
138
|
+
|
|
139
|
+
```powershell
|
|
140
|
+
mkdir C:\DE\work
|
|
141
|
+
cd C:\DE\work
|
|
142
|
+
npm install @mashka818/exam-de-template@1.0.0
|
|
143
|
+
cd node_modules\@mashka818\exam-de-template
|
|
144
|
+
npm install
|
|
145
|
+
npm run install:all
|
|
146
|
+
npm run dev
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Работает, но правки и сдача — внутри `node_modules` (менее удобно).
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## 4. Команды в пакете (после установки)
|
|
154
|
+
|
|
155
|
+
| Команда | Действие |
|
|
156
|
+
|---------|----------|
|
|
157
|
+
| `npx exam-de-init` | Распаковать + `npm install` + `install:all` |
|
|
158
|
+
| `npx exam-de-unpack --here` | Только скопировать файлы в папку |
|
|
159
|
+
| `npm run install:all` | Зависимости server + client |
|
|
160
|
+
| `npm run db:init` | Таблицы и админ |
|
|
161
|
+
| `npm run dev` | Сайт + API |
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## 5. Что на ПК экзамена всё равно нужно
|
|
166
|
+
|
|
167
|
+
| Программа | Не ставится через npm |
|
|
168
|
+
|-----------|------------------------|
|
|
169
|
+
| Node.js 18+ | да |
|
|
170
|
+
| PostgreSQL | да |
|
|
171
|
+
| Интернет | для `npm install` / `npx` |
|
|
172
|
+
|
|
173
|
+
См. **TECH_STACK.txt**
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## 6. Локальная проверка перед экзаменом
|
|
178
|
+
|
|
179
|
+
```powershell
|
|
180
|
+
mkdir C:\temp\de-test
|
|
181
|
+
cd C:\temp\de-test
|
|
182
|
+
npx @mashka818/exam-de-template@1.0.0 init
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
Если открывается http://localhost:5173 — на экзамене будет то же самое.
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## 7. Сборка .tgz (флешка не нужна)
|
|
190
|
+
|
|
191
|
+
`npm run pack:template` — только для архива/резервной копии, на экзамене **не обязательно**.
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## 8. Если `npm publish` ругается
|
|
196
|
+
|
|
197
|
+
| Ошибка | Решение |
|
|
198
|
+
|--------|---------|
|
|
199
|
+
| 402 / scope | `"publishConfig": { "access": "public" }` и `npm publish --access public` |
|
|
200
|
+
| имя занято | используйте `@логин/имя`, не голое `exam-template-...` |
|
|
201
|
+
| не залогинены | `npm login` |
|
|
202
|
+
| 403 | подтвердите email на npm |
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
**Пакет:** `@mashka818/exam-de-template`
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# exam-guides — удалить перед сдачей
|
|
2
|
+
|
|
3
|
+
**Всю эту папку `exam-guides` удалите в конце экзамена** (ПКМ → Удалить).
|
|
4
|
+
На проверку остаётся только соседняя папка **`exam-project`**.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Что здесь лежит
|
|
9
|
+
|
|
10
|
+
| Раздел | Зачем |
|
|
11
|
+
|--------|--------|
|
|
12
|
+
| **commented-code/** | Ваш `client/` и `server/` **с комментариями** — подсматривать при работе |
|
|
13
|
+
| **GUIDE_PAGES.md** и др. | Тексты, кнопки, картинки, БД, «Банкетам.Нет» |
|
|
14
|
+
| **EXAM_COMMANDS.txt** | Команды npm на экзамене |
|
|
15
|
+
| **NPM_PACKAGE.md** | Публикация шаблона на npm |
|
|
16
|
+
| **exam-starter/** | Пример `package.json` для `npm install` |
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Как работать на экзамене
|
|
21
|
+
|
|
22
|
+
1. Открыть в редакторе **две папки** рядом: `exam-project` и `exam-guides`.
|
|
23
|
+
2. **Править и запускать** только **`exam-project`** (`npm run dev` из неё).
|
|
24
|
+
3. Если забыли подсказку — смотреть **`exam-guides/commented-code`** или `.md` файлы.
|
|
25
|
+
4. **Закончили задание** → удалить папку **`exam-guides`** целиком.
|
|
26
|
+
5. Сдаёте / показываете только **`exam-project`**.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Дома
|
|
31
|
+
|
|
32
|
+
Правки с комментариями — в **`client/`** и **`server/`** в корне репозитория (рядом с этими папками).
|
|
33
|
+
|
|
34
|
+
Потом:
|
|
35
|
+
|
|
36
|
+
```powershell
|
|
37
|
+
npm run sync:project
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Обновятся и чистый `exam-project`, и `exam-guides/commented-code`.
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
# Адаптив: мобильный (390px) и ПК
|
|
2
|
+
|
|
3
|
+
Сейчас проект заточен под **мобильный макет** (как в задании модуля 2: 390×844).
|
|
4
|
+
На большом экране контент **не растягивается на всю ширину** — остаётся узкой колонкой по центру.
|
|
5
|
+
|
|
6
|
+
Ниже — как это устроено и как добавить **версию под ПК**.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 1. Почему на ПК выглядит «как телефон»
|
|
11
|
+
|
|
12
|
+
Главное ограничение — класс Tailwind **`max-w-lg`** в `client/src/components/Layout.jsx`:
|
|
13
|
+
|
|
14
|
+
| Класс | Ширина | Смысл |
|
|
15
|
+
|-------|--------|--------|
|
|
16
|
+
| `max-w-lg` | ~512px | узкая колонка (мобильный макет + поля по бокам) |
|
|
17
|
+
| `max-w-xl` | ~576px | чуть шире |
|
|
18
|
+
| `max-w-4xl` | ~896px | комфортно для ПК |
|
|
19
|
+
| `max-w-6xl` | ~1152px | широкий десктоп |
|
|
20
|
+
| `max-w-full` | 100% | на всю ширину окна |
|
|
21
|
+
|
|
22
|
+
Строки в Layout:
|
|
23
|
+
|
|
24
|
+
```jsx
|
|
25
|
+
<div className="mx-auto max-w-lg ..."> {/* шапка */}
|
|
26
|
+
<main className="... max-w-lg ..."> {/* контент */}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Пока стоит только `max-w-lg`, на мониторе сайт будет узкой «полоской» по центру — это **ожидаемо** для сдачи мобильного дизайна.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 2. Брейкпоинты Tailwind (кратко)
|
|
34
|
+
|
|
35
|
+
Tailwind использует **mobile-first**: сначала стили для телефона, потом с префиксом — для больших экранов.
|
|
36
|
+
|
|
37
|
+
| Префикс | Минимальная ширина | Обычно |
|
|
38
|
+
|---------|-------------------|--------|
|
|
39
|
+
| *(нет)* | 0px | телефон |
|
|
40
|
+
| `sm:` | 640px | большой телефон |
|
|
41
|
+
| `md:` | 768px | планшет |
|
|
42
|
+
| `lg:` | 1024px | ноутбук / ПК |
|
|
43
|
+
| `xl:` | 1280px | широкий монитор |
|
|
44
|
+
|
|
45
|
+
Пример:
|
|
46
|
+
|
|
47
|
+
```html
|
|
48
|
+
<div class="max-w-lg lg:max-w-4xl">
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
- до 1024px — колонка как сейчас (`max-w-lg`);
|
|
52
|
+
- от 1024px — шире (`max-w-4xl`).
|
|
53
|
+
|
|
54
|
+
Проверка: откройте сайт → `F12` → иконка телефона / изменение ширины окна.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## 3. Шаг 1 — расширить Layout под ПК
|
|
59
|
+
|
|
60
|
+
Файл: **`client/src/components/Layout.jsx`**
|
|
61
|
+
|
|
62
|
+
**Было (только мобильный):**
|
|
63
|
+
|
|
64
|
+
```jsx
|
|
65
|
+
<div className="mx-auto max-w-lg px-4 py-3 ...">
|
|
66
|
+
<main className="flex-1 mx-auto w-full max-w-lg px-4 py-6">
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**Стало (мобильный + ПК):**
|
|
70
|
+
|
|
71
|
+
```jsx
|
|
72
|
+
<div className="mx-auto w-full max-w-lg lg:max-w-5xl px-4 lg:px-8 py-3 ...">
|
|
73
|
+
<main className="flex-1 mx-auto w-full max-w-lg lg:max-w-5xl px-4 lg:px-8 py-6 lg:py-10">
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Что меняется на ПК:
|
|
77
|
+
- `lg:max-w-5xl` — шире контент;
|
|
78
|
+
- `lg:px-8` — больше отступы;
|
|
79
|
+
- `lg:py-10` — больше воздуха по вертикали.
|
|
80
|
+
|
|
81
|
+
Для экзамена по модулю 2/3 **мобильную версию не убирайте** — добавляйте `lg:` **дополнительно**.
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## 4. Шаг 2 — картинки на ПК
|
|
86
|
+
|
|
87
|
+
Файлы страниц, например `HomePage.jsx`:
|
|
88
|
+
|
|
89
|
+
```jsx
|
|
90
|
+
<PageImage imageKey="homeHero" className="w-full h-40 object-cover ..." />
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Для ПК увеличьте высоту:
|
|
94
|
+
|
|
95
|
+
```jsx
|
|
96
|
+
className="w-full h-40 lg:h-56 object-cover rounded-2xl mb-6 shadow"
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Логотип в Layout:
|
|
100
|
+
|
|
101
|
+
```jsx
|
|
102
|
+
className="h-9 lg:h-11 w-auto shrink-0"
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## 5. Шаг 3 — формы (п.1, п.4)
|
|
108
|
+
|
|
109
|
+
На ПК форму часто делают в **две колонки**.
|
|
110
|
+
|
|
111
|
+
`RegisterPage.jsx` / `RequestFormPage.jsx` — оберните поля:
|
|
112
|
+
|
|
113
|
+
```jsx
|
|
114
|
+
<div className="grid grid-cols-1 md:grid-cols-2 gap-x-4">
|
|
115
|
+
<FormField label="ФИО" ...>...</FormField>
|
|
116
|
+
<FormField label="Телефон" ...>...</FormField>
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
`grid-cols-1` — на телефоне одна колонка.
|
|
120
|
+
`md:grid-cols-2` — с планшета/ПК два поля в ряд.
|
|
121
|
+
|
|
122
|
+
Кнопку «Отправить» лучше на всю ширину оставить:
|
|
123
|
+
|
|
124
|
+
```jsx
|
|
125
|
+
<div className="md:col-span-2">
|
|
126
|
+
<button className="w-full ...">...</button>
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## 6. Шаг 4 — п.3 история заявок
|
|
132
|
+
|
|
133
|
+
`RequestsPage.jsx` — список карточек в сетку на ПК:
|
|
134
|
+
|
|
135
|
+
```jsx
|
|
136
|
+
<ul className="space-y-3 lg:grid lg:grid-cols-2 lg:gap-4 lg:space-y-0">
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Карточка «Оставить новую заявку»:
|
|
140
|
+
|
|
141
|
+
```jsx
|
|
142
|
+
className="block mb-8 ... lg:mb-10 lg:p-8"
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## 7. Шаг 5 — п.5 админ-панель
|
|
148
|
+
|
|
149
|
+
`AdminPage.jsx` — заявки в 2–3 колонки:
|
|
150
|
+
|
|
151
|
+
```jsx
|
|
152
|
+
<div className="space-y-4 lg:grid lg:grid-cols-2 xl:grid-cols-3 lg:gap-6 lg:space-y-0">
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## 8. Шаг 6 — главная страница
|
|
158
|
+
|
|
159
|
+
`HomePage.jsx` — кнопки в ряд на ПК:
|
|
160
|
+
|
|
161
|
+
```jsx
|
|
162
|
+
<div className="flex flex-col gap-3 sm:flex-row sm:justify-center sm:gap-4">
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## 9. Шаг 7 — навигация в шапке
|
|
168
|
+
|
|
169
|
+
`UserNav.jsx` — на очень узком экране подписи можно скрыть:
|
|
170
|
+
|
|
171
|
+
```jsx
|
|
172
|
+
<NavLink ...>
|
|
173
|
+
<span className="lg:hidden">Заявки</span>
|
|
174
|
+
<span className="hidden lg:inline">Мои заявки</span>
|
|
175
|
+
</NavLink>
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
(по желанию)
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## 10. Глобальные настройки (опционально)
|
|
183
|
+
|
|
184
|
+
Файл: **`client/src/index.css`**
|
|
185
|
+
|
|
186
|
+
Можно задать свои брейкпоинты в `@theme` (Tailwind v4), но для экзамена **достаточно стандартных** `sm` / `md` / `lg`.
|
|
187
|
+
|
|
188
|
+
Фон на широком мониторе уже серый (`bg-slate-50` на `body`) — узкая колонка визуально отделяется от краёв.
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## 11. Что сдавать на ДЭ
|
|
193
|
+
|
|
194
|
+
| Модуль | Что нужно |
|
|
195
|
+
|--------|-----------|
|
|
196
|
+
| Модуль 2 | Макеты **390×844** (Figma → PNG), в код не обязательно |
|
|
197
|
+
| Модуль 3 | **Интегрировать мобильный** дизайн + анимации |
|
|
198
|
+
| Модуль 1 | Рабочий UI, адаптив «не ломается» на ПК |
|
|
199
|
+
|
|
200
|
+
**Рекомендация:** оставить мобильную вёрстку как основную, для ПК добавить только `lg:max-w-*` и сетки — так выполнены оба требования.
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## 12. Чек-лист перед сдачей
|
|
205
|
+
|
|
206
|
+
- [ ] В DevTools ширина **390px** — как макет Figma
|
|
207
|
+
- [ ] Ширина **1024px+** — контент читаемый, нет горизонтальной прокрутки
|
|
208
|
+
- [ ] Формы: все поля доступны, ошибки видны
|
|
209
|
+
- [ ] Картинки из `public/images/` не вылезают за экран (`w-full`, `object-cover`)
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## 13. Файлы, которые чаще всего правят
|
|
214
|
+
|
|
215
|
+
| Файл | Задача |
|
|
216
|
+
|------|--------|
|
|
217
|
+
| `components/Layout.jsx` | ширина всего сайта |
|
|
218
|
+
| `pages/HomePage.jsx` | hero, кнопки |
|
|
219
|
+
| `pages/RegisterPage.jsx`, `RequestFormPage.jsx` | сетка полей |
|
|
220
|
+
| `pages/RequestsPage.jsx` | список заявок |
|
|
221
|
+
| `pages/AdminPage.jsx` | карточки админа |
|
|
222
|
+
| `index.css` | общий фон, анимации |
|
|
223
|
+
|
|
224
|
+
Подробнее по смене темы: `COMMENTS_GUIDE.md`.
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
================================================================================
|
|
2
|
+
ТЕХНОЛОГИИ ПРОЕКТА — ЧТО УСТАНОВИТЬ НА ПК К ЭКЗАМЕНУ
|
|
3
|
+
================================================================================
|
|
4
|
+
Шаблон ДЭ: портал заявок (Мой Не Сам / Банкетам.Нет)
|
|
5
|
+
Стек: Node.js, Express, PostgreSQL, React, Vite, Tailwind CSS
|
|
6
|
+
|
|
7
|
+
Подробная версия с таблицами: TECH_STACK.md
|
|
8
|
+
Пошаговый запуск: README.md
|
|
9
|
+
|
|
10
|
+
================================================================================
|
|
11
|
+
1. ОБЯЗАТЕЛЬНО УСТАНОВИТЬ НА ПК (ДО ЭКЗАМЕНА)
|
|
12
|
+
================================================================================
|
|
13
|
+
|
|
14
|
+
Node.js .............. версия 18+ (лучше 20 LTS)
|
|
15
|
+
Зачем: сервер, фронт, npm
|
|
16
|
+
Проверка: node -v
|
|
17
|
+
Скачать: https://nodejs.org/
|
|
18
|
+
|
|
19
|
+
npm .................. идёт вместе с Node.js
|
|
20
|
+
Проверка: npm -v
|
|
21
|
+
|
|
22
|
+
PostgreSQL ........... версия 14+
|
|
23
|
+
Зачем: база данных
|
|
24
|
+
Служба postgresql должна быть запущена
|
|
25
|
+
Пароль postgres — для server/.env
|
|
26
|
+
Скачать: https://www.postgresql.org/download/windows/
|
|
27
|
+
|
|
28
|
+
Браузер .............. Chrome / Edge / Firefox
|
|
29
|
+
Адрес сайта: http://localhost:5173
|
|
30
|
+
|
|
31
|
+
================================================================================
|
|
32
|
+
2. РЕКОМЕНДУЕТСЯ (НЕ ОБЯЗАТЕЛЬНО)
|
|
33
|
+
================================================================================
|
|
34
|
+
|
|
35
|
+
VS Code или Cursor .... редактирование кода
|
|
36
|
+
pgAdmin или psql ...... CREATE DATABASE имя_базы;
|
|
37
|
+
Git ................... если проект с репозитория
|
|
38
|
+
|
|
39
|
+
================================================================================
|
|
40
|
+
3. УСТАНАВЛИВАЕТСЯ КОМАНДОЙ В ПРОЕКТЕ (НЕ ВРУЧНУЮ С САЙТОВ)
|
|
41
|
+
================================================================================
|
|
42
|
+
|
|
43
|
+
cd C:\путь\к\examTemplate
|
|
44
|
+
npm run install:all
|
|
45
|
+
|
|
46
|
+
--- Корень ---
|
|
47
|
+
concurrently .......... npm run dev (API + фронт вместе)
|
|
48
|
+
|
|
49
|
+
--- Сервер (server/) ---
|
|
50
|
+
Node.js ............... среда выполнения
|
|
51
|
+
Express 5 ............. API /api/...
|
|
52
|
+
pg .................... драйвер PostgreSQL
|
|
53
|
+
dotenv ................ server/.env
|
|
54
|
+
cors .................. запросы с фронта
|
|
55
|
+
bcryptjs .............. хеш паролей
|
|
56
|
+
jsonwebtoken .......... JWT после входа
|
|
57
|
+
|
|
58
|
+
--- Клиент (client/) ---
|
|
59
|
+
React 19 .............. интерфейс
|
|
60
|
+
react-dom ............. отрисовка в браузере
|
|
61
|
+
react-router-dom 7 .... маршруты страниц
|
|
62
|
+
Vite 6 ................ dev-сервер и сборка
|
|
63
|
+
@vitejs/plugin-react .. JSX
|
|
64
|
+
Tailwind CSS 4 ........ стили (className)
|
|
65
|
+
@tailwindcss/vite ..... Tailwind в Vite
|
|
66
|
+
|
|
67
|
+
================================================================================
|
|
68
|
+
4. ЯЗЫКИ (ОТДЕЛЬНО НЕ СТАВЯТСЯ)
|
|
69
|
+
================================================================================
|
|
70
|
+
|
|
71
|
+
JavaScript (ES modules) ... .js, .jsx, import/export
|
|
72
|
+
JSX ....................... React-компоненты
|
|
73
|
+
HTML ...................... client/index.html
|
|
74
|
+
CSS + Tailwind ............ client/src/index.css
|
|
75
|
+
SQL ....................... server/db/schema.sql, seed.sql
|
|
76
|
+
JSON ...................... package.json, ответы API
|
|
77
|
+
REST API .................. GET, POST, PATCH /api/...
|
|
78
|
+
JWT ....................... токен в localStorage
|
|
79
|
+
|
|
80
|
+
================================================================================
|
|
81
|
+
5. ПОРТЫ
|
|
82
|
+
================================================================================
|
|
83
|
+
|
|
84
|
+
Фронт (Vite) ........... 5173 http://localhost:5173
|
|
85
|
+
API (Express) ............ 3001 http://localhost:3001
|
|
86
|
+
PostgreSQL ............... 5432 localhost (по умолчанию)
|
|
87
|
+
|
|
88
|
+
Порт API: server/.env (PORT) и client/vite.config.js (proxy)
|
|
89
|
+
|
|
90
|
+
================================================================================
|
|
91
|
+
6. ЧЕК-ЛИСТ НА ЭКЗАМЕНЕ
|
|
92
|
+
================================================================================
|
|
93
|
+
|
|
94
|
+
[ ] Node.js и PostgreSQL установлены, PostgreSQL запущен
|
|
95
|
+
[ ] Создана БД (moy_ne_sam или banketam_net)
|
|
96
|
+
[ ] Настроен server/.env (DATABASE_URL, JWT_SECRET)
|
|
97
|
+
[ ] npm run install:all
|
|
98
|
+
[ ] npm run db:init
|
|
99
|
+
[ ] npm run dev
|
|
100
|
+
[ ] Браузер: http://localhost:5173
|
|
101
|
+
|
|
102
|
+
================================================================================
|
|
103
|
+
7. ЧТО НЕ НУЖНО УСТАНАВЛИВАТЬ
|
|
104
|
+
================================================================================
|
|
105
|
+
|
|
106
|
+
React, Express, Tailwind — только через npm в проекте
|
|
107
|
+
Apache, Nginx, IIS — не нужны
|
|
108
|
+
Docker, Redis, MongoDB — не используются
|
|
109
|
+
TypeScript — проект на JavaScript
|
|
110
|
+
|
|
111
|
+
================================================================================
|
|
112
|
+
8. КОМАНДЫ NPM
|
|
113
|
+
================================================================================
|
|
114
|
+
|
|
115
|
+
npm run install:all ... установить зависимости
|
|
116
|
+
npm run db:init ....... таблицы + seed + админ
|
|
117
|
+
npm run dev ........... API + фронт
|
|
118
|
+
npm run dev:server .... только API
|
|
119
|
+
npm run dev:client .... только фронт
|
|
120
|
+
npm run build ......... сборка client/dist
|
|
121
|
+
|
|
122
|
+
================================================================================
|
|
123
|
+
9. ЛОГИН АДМИНА (ШАБЛОН)
|
|
124
|
+
================================================================================
|
|
125
|
+
|
|
126
|
+
Логин: adminka Пароль: password
|
|
127
|
+
Файл: server/db/init.js
|
|
128
|
+
|
|
129
|
+
Банкетам.Нет: Admin26 / Demo20 — см. THEME_BANQUETAM_NET.md
|
|
130
|
+
|
|
131
|
+
================================================================================
|
|
132
|
+
10. ДОКУМЕНТАЦИЯ В ПРОЕКТЕ
|
|
133
|
+
================================================================================
|
|
134
|
+
|
|
135
|
+
README.md ................ запуск, .env
|
|
136
|
+
GUIDE_PAGES.md ............. страницы, кнопки, картинки
|
|
137
|
+
THEME_BANQUETAM_NET.md ..... тема Банкетам.Нет
|
|
138
|
+
COMMENTS_GUIDE.md .......... что менять в коде
|
|
139
|
+
RESPONSIVE.md .............. мобильная и ПК вёрстка
|
|
140
|
+
TECH_STACK.md .............. этот список (формат Markdown)
|
|
141
|
+
|
|
142
|
+
================================================================================
|