010f78b138
Переносит вопросы из Microsoft Forms в собственный интерфейс: компания, анонимность, ФИО и должность, вид обращения, описание ситуации и предложение. Поля автора скрываются при анонимном обращении, а не блокируются: требовать ФИО у анонима — противоречие, а серое неактивное поле выглядит как ошибка формы. Состояние целиком в useFeedbackForm, правила заполнения — в отдельной чистой функции validateFeedback: её можно покрыть тестами без React. Отправки пока нет — по договорённости делаем только UI, submit пишет данные в консоль (TODO в useFeedbackForm). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
67 lines
3.1 KiB
Markdown
67 lines
3.1 KiB
Markdown
# hr-appeals
|
||
|
||
Форма обращений сотрудников в HR департамент.
|
||
|
||
Заменяет встроенную Microsoft Forms: даёт собственный интерфейс в фирменном стиле
|
||
(общие токены и компоненты, что и `request-portal`) без чужого брендинга и служебных
|
||
плашек в подвале.
|
||
|
||
## Стек
|
||
|
||
- React 17 + TypeScript (строгий режим)
|
||
- Vite 6
|
||
- SCSS Modules
|
||
- [`@tnsu/ui-kit`](http://git.tnsu.kz/timur.gorodetskiy/tnsu-ui-kit) — общие UI-компоненты
|
||
|
||
React именно 17-й: `@tnsu/ui-kit` объявляет его в `peerDependencies`.
|
||
|
||
## Запуск
|
||
|
||
Пакеты `@tnsu/*` лежат в приватном реестре — он прописан в `.npmrc`, отдельная
|
||
настройка не нужна, но нужен доступ к `git.tnsu.kz`.
|
||
|
||
```bash
|
||
npm install
|
||
npm run dev
|
||
```
|
||
|
||
Прочие команды:
|
||
|
||
```bash
|
||
npm run build # проверка типов + production-сборка в dist/
|
||
npm run typecheck # только проверка типов
|
||
npm run preview # просмотр собранной версии
|
||
```
|
||
|
||
## Структура
|
||
|
||
```
|
||
src/
|
||
components/ переиспользуемые UI-обёртки
|
||
Field/ FormField из ui-kit + текст ошибки валидации
|
||
PageShell/ шапка страницы и центрированный контент
|
||
features/feedback/ собственно форма обращения
|
||
model.ts типы данных, справочники, пустое состояние
|
||
texts.ts все пользовательские строки (задел под локализацию)
|
||
validateFeedback.ts правила заполнения — чистая функция
|
||
useFeedbackForm.ts состояние формы, валидация, отправка
|
||
FeedbackForm.tsx сборка формы из секций
|
||
ThankYouScreen.tsx экран после отправки
|
||
sections/ секции формы
|
||
styles/
|
||
_design-tokens.scss фирменные токены (копия из request-portal)
|
||
global.scss
|
||
```
|
||
|
||
Состояние формы целиком живёт в `useFeedbackForm`; секции получают срез данных и
|
||
колбэк `set`, но своим состоянием не владеют.
|
||
|
||
## Что не сделано
|
||
|
||
**Отправка данных.** Бэкенда пока нет: `useFeedbackForm.submit` валидирует форму и
|
||
пишет результат в консоль (см. `TODO` в файле). Реальную интеграцию нужно подключить
|
||
отдельно — только там, без правок в компонентах.
|
||
|
||
**Список компаний.** В `model.ts` заполнено одно значение — «ТОО АСТЕЛ-К», единственное
|
||
видимое в исходной форме. Полный список нужно уточнить у владельца формы.
|