Frontend приложение для системы управления задачами TaskMate, построенное на React 19 + TypeScript + Vite 7.
- React 19 - UI библиотека
- TypeScript - Типизация
- Vite 7 - Сборщик и dev сервер
- React Router - Маршрутизация
- Zustand - State management
- TanStack Query v5 - Управление серверным состоянием
- Axios - HTTP клиент
- Tailwind CSS - CSS фреймворк
- date-fns - Работа с датами
- react-hook-form - Работа с формами
- heroicons - Иконки
- Node.js 20+
- npm или yarn
# Установка зависимостей
npm install
# Создать .env файл на основе .env.example
cp .env.example .env
# Отредактировать .env и указать правильный API URL
# VITE_API_BASE_URL=http://localhost:8000/api/v1npm run devПриложение будет доступно по адресу http://localhost:5173
npm run buildСобранные файлы будут в папке dist/
npm run previewVite встраивает переменные окружения (начинающиеся с VITE_) в JavaScript во время сборки, а не во время запуска. Это означает, что переменные должны быть переданы как build arguments при сборке образа.
# Сборка с дефолтным API URL (http://localhost:8007/api/v1)
docker build -t taskmate-frontend .
# Сборка с кастомным API URL
docker build \
--build-arg VITE_API_BASE_URL=http://your-api-url:8007/api/v1 \
-t taskmate-frontend .docker run -p 80:80 taskmate-frontendПриложение будет доступно по адресу http://localhost
Добавьте в docker-compose.yml:
services:
frontend:
build:
context: ./TaskMateFrontend
dockerfile: Dockerfile
args:
# Передаем build argument для Vite
VITE_API_BASE_URL: ${VITE_API_BASE_URL:-http://localhost:8007/api/v1}
ports:
- "80:80"
depends_on:
- apiПримечание: Runtime переменные окружения (через environment:) НЕ работают для Vite приложений, так как код уже собран. Используйте только build.args.
src/
├── api/ # API клиент и endpoints
│ ├── client.ts # Axios instance
│ ├── auth.ts # Аутентификация
│ ├── users.ts # Пользователи
│ ├── tasks.ts # Задачи
│ ├── taskGenerators.ts # Генераторы задач
│ ├── archivedTasks.ts # Архивные задачи
│ └── dashboard.ts # Dashboard
│
├── components/ # React компоненты
│ ├── common/ # Общие компоненты (PageContainer, PageHeader, DealershipSelector)
│ ├── auth/ # Компоненты аутентификации
│ ├── layout/ # Layout (Sidebar, Layout)
│ ├── users/ # Компоненты пользователей
│ ├── tasks/ # Компоненты задач (TaskModal, TaskDetailsModal)
│ ├── generators/ # Компоненты генераторов
│ ├── shifts/ # Управление сменами (ShiftControl)
│ └── notifications/ # Настройки уведомлений (NotificationSettingsContent)
│
├── pages/ # Страницы приложения
│ ├── DashboardPage.tsx
│ ├── TasksPage.tsx
│ ├── TaskGeneratorsPage.tsx
│ ├── ArchivedTasksPage.tsx
│ ├── UsersPage.tsx
│ ├── ShiftsPage.tsx
│ ├── LinksPage.tsx
│ ├── SettingsPage.tsx
│ ├── ReportsPage.tsx
│ └── NotificationSettingsPage.tsx
│
├── context/ # Context API
│ └── ThemeContext.tsx # Управление темами и Dark Mode
│
├── stores/ # Zustand stores
│ └── authStore.ts
│
├── hooks/ # Custom hooks
│ ├── useAuth.ts
│ ├── usePermissions.ts
│ └── useTheme.ts
│
├── types/ # TypeScript типы
│ ├── user.ts
│ ├── task.ts
│ ├── setting.ts
│ └── ...
│
├── utils/ # Утилиты
│ ├── debug.ts # Отладочные функции
│ ├── phoneFormatter.ts # Форматирование телефонов
│ └── roleTranslations.ts # Перевод ролей на русский
└── constants/ # Константы
- Task Generators: Система для создания повторяющихся регулярных задач (ежедневно, еженедельно, ежемесячно).
- Поддержка гибких настроек уведомлений.
- Назначение исполнителей сразу для всей серии задач.
- Tasks: Разовые задачи или инстансы, созданные генераторами.
- Обычные задачи (без повторений).
- Улучшенная фильтрация и поиск.
- Archive: Просмотр завершенных и просроченных задач.
Приложение использует Bearer Token аутентификацию (Laravel Sanctum):
- Пользователь вводит логин и пароль (Логин: латинские буквы, цифры, макс. одна точка, макс. одно подчеркивание, до 64 символов)
- После успешного входа токен сохраняется в localStorage
- Токен автоматически добавляется ко всем API запросам
- При получении 401 ошибки пользователь перенаправляется на страницу входа
Система поддерживает следующие роли пользователей (отображаются на русском языке):
| Роль (код) | Название (RU) | Описание |
|---|---|---|
employee |
Сотрудник | Только доступ к боту |
observer |
Наблюдатель | Только просмотр |
manager |
Управляющий | Создание/редактирование задач и пользователей |
owner |
Владелец | Полный доступ |
Для отображения ролей на русском языке используйте утилиту src/utils/roleTranslations.ts:
import { getRoleLabel, translateRoles, roleLabels, roleDescriptions } from './utils/roleTranslations';
// Получить русское название роли
getRoleLabel('employee'); // → "Сотрудник"
// Перевести массив ролей
translateRoles(['employee', 'manager']); // → "Сотрудник, Управляющий"
// Использовать маппинг напрямую
roleLabels.owner; // → "Владелец"
roleDescriptions.manager; // → "Управление салонами"VITE_API_BASE_URL- URL API сервера (по умолчанию:http://localhost:8007/api/v1)
Создайте .env файл:
cp .env.example .envОтредактируйте .env:
VITE_API_BASE_URL=http://localhost:8007/api/v1
При использовании Docker переменные должны передаваться как build arguments, а не runtime environment variables. Смотрите раздел "Docker" выше для подробностей.
Смотрите файл creating_intructions/FRONTEND_GUIDE.md для подробной документации по интеграции с API.
Proprietary License Copyright © 2023-2026 谢榕川 All rights reserved.