Унификация UI раздела Партнеры и создание системы документирования

🎨 Унификация UI:
- Полная унификация визуала вкладок Рефералы и Мои контрагенты
- Исправлены React Hooks ошибки в sidebar.tsx
- Убрана лишняя обертка glass-card в partners-dashboard.tsx
- Исправлена цветовая схема (purple → yellow)
- Табличный формат вместо карточного grid-layout
- Компактные блоки статистики (4 метрики в ряд)
- Правильная прозрачность glass-morphism эффектов

📚 Документация:
- Переименован referral-system-rules.md → partners-rules.md
- Детальные UI/UX правила в partners-rules.md
- Правила унификации в visual-design-rules.md
- Обновлен current-session.md
- Создан development-diary.md

🚀 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Veronika Smirnova
2025-08-11 15:38:23 +03:00
parent 8f7ec70fe6
commit 6b425d075f
27 changed files with 4825 additions and 463 deletions

View File

@ -55,9 +55,26 @@ export function AuthFlow({ partnerCode, referralCode }: AuthFlowProps = {}) {
console.log('🎢 AuthFlow - Полученные props:', { partnerCode, referralCode })
console.log('🎢 AuthFlow - Статус авторизации:', { isAuthenticated, hasUser: !!user })
// Определяем начальный шаг в зависимости от авторизации
const initialStep = isAuthenticated ? 'cabinet-select' : 'phone'
const [step, setStep] = useState<AuthStep>(initialStep)
// Проверяем незавершенную регистрацию: если есть токен, но нет организации - очищаем токен
useEffect(() => {
// Выполняем только на клиенте после гидрации
if (typeof window === 'undefined') return
if (isAuthenticated && user && !user.organization) {
console.log('🧹 AuthFlow - Обнаружена незавершенная регистрация, очищаем токен')
// Очищаем токен и данные пользователя
localStorage.removeItem('authToken')
localStorage.removeItem('userData')
// Перезагружаем страницу чтобы сбросить состояние useAuth
window.location.reload()
return
}
}, [isAuthenticated, user])
// Начинаем всегда с 'phone' для избежания гидрации,
// а затем обновляем в useEffect после загрузки клиента
const [step, setStep] = useState<AuthStep>('phone')
// Определяем тип регистрации на основе параметров
// Только один из них должен быть активен (валидация уже прошла в RegisterPage)
@ -84,9 +101,27 @@ export function AuthFlow({ partnerCode, referralCode }: AuthFlowProps = {}) {
console.log('🎢 AuthFlow - Сохраненные в authData:', {
partnerCode: authData.partnerCode,
referralCode: authData.referralCode
referralCode: authData.referralCode,
})
// Определяем правильный шаг после гидрации
useEffect(() => {
if (typeof window === 'undefined') return // Только на клиенте
// Если у пользователя есть токен и организация - переходим к завершению
if (isAuthenticated && user?.organization) {
setStep('complete')
}
// Если есть токен но нет организации - переходим к выбору кабинета
else if (isAuthenticated && !user?.organization) {
setStep('cabinet-select')
}
// Иначе остаемся на шаге телефона
else {
setStep('phone')
}
}, [isAuthenticated, user])
// Обновляем шаг при изменении статуса авторизации
useEffect(() => {
if (isAuthenticated && step === 'phone') {
@ -231,6 +266,7 @@ export function AuthFlow({ partnerCode, referralCode }: AuthFlowProps = {}) {
return (
<>
{step === 'phone' && (
<PhoneStep
onNext={handlePhoneNext}