Унификация 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:
@ -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}
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
import { Package, ShoppingCart, ArrowLeft, Truck, Building2 } from 'lucide-react'
|
||||
|
||||
import { Badge } from '@/components/ui/badge'
|
||||
import { Button } from '@/components/ui/button'
|
||||
|
||||
import { AuthLayout } from './auth-layout'
|
||||
@ -87,13 +86,12 @@ export function CabinetSelectStep({ onNext, onBack }: CabinetSelectStepProps) {
|
||||
|
||||
<div className="flex flex-wrap gap-1 justify-center">
|
||||
{cabinet.features.slice(0, 2).map((feature, index) => (
|
||||
<Badge
|
||||
<div
|
||||
key={index}
|
||||
variant="outline"
|
||||
className="glass-secondary text-white/60 border-white/20 text-xs px-1 py-0"
|
||||
className="inline-flex items-center justify-center rounded-md border glass-secondary text-white/60 border-white/20 text-xs px-1 py-0"
|
||||
>
|
||||
{feature}
|
||||
</Badge>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
|
@ -72,7 +72,7 @@ export function ConfirmationStep({ data, onConfirm, onBack }: ConfirmationStepPr
|
||||
cabinetType: data.cabinetType,
|
||||
inn: data.inn,
|
||||
referralCode: data.referralCode,
|
||||
partnerCode: data.partnerCode
|
||||
partnerCode: data.partnerCode,
|
||||
})
|
||||
|
||||
try {
|
||||
@ -84,7 +84,7 @@ export function ConfirmationStep({ data, onConfirm, onBack }: ConfirmationStepPr
|
||||
) {
|
||||
console.log('📝 ConfirmationStep - Вызов registerFulfillmentOrganization с кодами:', {
|
||||
referralCode: data.referralCode,
|
||||
partnerCode: data.partnerCode
|
||||
partnerCode: data.partnerCode,
|
||||
})
|
||||
|
||||
result = await registerFulfillmentOrganization(
|
||||
|
@ -17,7 +17,7 @@ interface PhoneStepProps {
|
||||
referrerCode?: string | null
|
||||
}
|
||||
|
||||
export function PhoneStep({ onNext, registrationType, referrerCode }: PhoneStepProps) {
|
||||
export function PhoneStep({ onNext, registrationType }: PhoneStepProps) {
|
||||
const [phone, setPhone] = useState('')
|
||||
const [isLoading, setIsLoading] = useState(false)
|
||||
const [error, setError] = useState<string | null>(null)
|
||||
|
Reference in New Issue
Block a user