Files
hr-appeals/README.md
T
gorbenko.pavel 010f78b138 feat: форма обращения сотрудника в HR департамент
Переносит вопросы из Microsoft Forms в собственный интерфейс: компания,
анонимность, ФИО и должность, вид обращения, описание ситуации и предложение.

Поля автора скрываются при анонимном обращении, а не блокируются: требовать ФИО
у анонима — противоречие, а серое неактивное поле выглядит как ошибка формы.

Состояние целиком в useFeedbackForm, правила заполнения — в отдельной чистой
функции validateFeedback: её можно покрыть тестами без React.

Отправки пока нет — по договорённости делаем только UI, submit пишет данные в
консоль (TODO в useFeedbackForm).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-20 18:15:10 +05:00

67 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` заполнено одно значение — «ТОО АСТЕЛ-К», единственное
видимое в исходной форме. Полный список нужно уточнить у владельца формы.