diff --git a/frontend/src/app/dealer/apply/page.tsx b/frontend/src/app/dealer/apply/page.tsx index ee38ab5..a9c893f 100644 --- a/frontend/src/app/dealer/apply/page.tsx +++ b/frontend/src/app/dealer/apply/page.tsx @@ -35,6 +35,11 @@ export default function DealerApplyPage() { const [existingApplication, setExistingApplication] = useState(null); const [message, setMessage] = useState<{ type: 'success' | 'error'; text: string } | null>(null); + const [step, setStep] = useState<'agreement' | 'form'>('agreement'); + const [privacyAgreed, setPrivacyAgreed] = useState(false); + const [obligationAgreed, setObligationAgreed] = useState(false); + const [agreeError, setAgreeError] = useState(false); + const [formData, setFormData] = useState({ business_name: '', business_number: '', @@ -182,6 +187,138 @@ export default function DealerApplyPage() { ); } + const handleProceedToForm = () => { + if (!privacyAgreed || !obligationAgreed) { + setAgreeError(true); + return; + } + setAgreeError(false); + setStep('form'); + }; + + const handleAgreeAll = (checked: boolean) => { + setPrivacyAgreed(checked); + setObligationAgreed(checked); + if (checked) setAgreeError(false); + }; + + // Step 1: Agreement + if (step === 'agreement') { + return ( +
+
+
+ {/* Header */} +
+

{t.dealerAgreementTitle}

+

{t.dealerApplicationSubtitle}

+
+ + {/* Benefits Card */} +
+

+ {language === 'ko' ? '딜러 혜택' : 'Dealer Benefits'} +

+
    +
  • + 💰 + {language === 'ko' ? '차량 판매 시 수수료 50% 수익' : '50% commission on vehicle sales'} +
  • +
  • + 🎫 + {language === 'ko' ? '공식 딜러증 발급' : 'Official dealer card issued'} +
  • +
  • + 📈 + {language === 'ko' ? '수익 관리 대시보드' : 'Earnings management dashboard'} +
  • +
+
+ + {/* Privacy Agreement */} +
+
+ { + setPrivacyAgreed(e.target.checked); + if (e.target.checked) setAgreeError(false); + }} + className="mt-1 w-5 h-5 text-primary-600 rounded border-gray-300 focus:ring-primary-500 cursor-pointer" + /> + +
+
+

+ {t.dealerPrivacyContent} +

+
+
+ + {/* Obligation Agreement */} +
+
+ { + setObligationAgreed(e.target.checked); + if (e.target.checked) setAgreeError(false); + }} + className="mt-1 w-5 h-5 text-primary-600 rounded border-gray-300 focus:ring-primary-500 cursor-pointer" + /> + +
+
+

+ {t.dealerObligationContent} +

+
+
+ + {/* Agree All + Proceed */} +
+ + + {agreeError && ( +
+

{t.dealerMustAgree}

+
+ )} + + +
+
+
+
+ ); + } + + // Step 2: Application Form return (
@@ -192,25 +329,17 @@ export default function DealerApplyPage() {

{t.dealerApplicationSubtitle}

- {/* Benefits Card */} -
-

- {language === 'ko' ? '딜러 혜택' : 'Dealer Benefits'} -

-
    -
  • - 💰 - {language === 'ko' ? '차량 판매 시 수수료 50% 수익' : '50% commission on vehicle sales'} -
  • -
  • - 🎫 - {language === 'ko' ? '공식 딜러증 발급' : 'Official dealer card issued'} -
  • -
  • - 📈 - {language === 'ko' ? '수익 관리 대시보드' : 'Earnings management dashboard'} -
  • -
+ {/* Step indicator */} +
+
+
+ {t.dealerAgreementTitle} +
+
+
+
2
+ {t.dealerApplication} +
{/* Message */} diff --git a/frontend/src/app/profile/page.tsx b/frontend/src/app/profile/page.tsx index ab6cb45..67e4c25 100644 --- a/frontend/src/app/profile/page.tsx +++ b/frontend/src/app/profile/page.tsx @@ -249,6 +249,30 @@ export default function ProfilePage() {
+ {/* Dealer Program Section */} +
+

{t.dealerSectionTitle}

+

{t.dealerSectionDesc}

+ + {user.is_dealer ? ( + + 🎫 + {t.dealerViewCard} + + ) : ( + + 🤝 + {t.dealerApplyButton} + + )} +
+ {/* Referral Code Card */}

{t.myReferralCode}

diff --git a/frontend/src/lib/i18n.ts b/frontend/src/lib/i18n.ts index 309cee5..dda46af 100644 --- a/frontend/src/lib/i18n.ts +++ b/frontend/src/lib/i18n.ts @@ -381,6 +381,18 @@ export interface Translations { pendingApplicationMessage: string; rejectedApplicationMessage: string; rejectReason: string; + dealerSectionTitle: string; + dealerSectionDesc: string; + dealerApplyButton: string; + dealerViewCard: string; + dealerAgreementTitle: string; + dealerPrivacyAgreement: string; + dealerPrivacyContent: string; + dealerObligationAgreement: string; + dealerObligationContent: string; + dealerAgreeAll: string; + dealerMustAgree: string; + dealerProceedToApply: string; // Vehicle Sharing shareVehicle: string; @@ -860,6 +872,18 @@ const translations: Record = { pendingApplicationMessage: 'Your application is being reviewed. We will notify you once approved.', rejectedApplicationMessage: 'Your application was rejected.', rejectReason: 'Rejection Reason', + dealerSectionTitle: 'Dealer Program', + dealerSectionDesc: 'Become a dealer and earn commissions by recommending vehicles to friends.', + dealerApplyButton: 'Apply to Become a Dealer', + dealerViewCard: 'View My Dealer Card', + dealerAgreementTitle: 'Dealer Agreement', + dealerPrivacyAgreement: 'Consent to Personal Information Collection and Use', + dealerPrivacyContent: `By applying for the Dealer Program, you agree to the collection and use of the following personal information:\n\n1. Information Collected: Full name, phone number, ID/passport number, bank account details, business registration number\n2. Purpose of Collection: Dealer identity verification, commission payment processing, tax reporting\n3. Retention Period: Retained for the duration of the dealer agreement and 5 years after termination (as required by law)\n4. Right to Refuse: You may refuse to provide personal information; however, this will prevent dealer registration.\n\nYour personal information will be handled in accordance with applicable privacy laws and will not be shared with third parties without your consent, except as required by law.`, + dealerObligationAgreement: 'Dealer Obligations Agreement', + dealerObligationContent: `By becoming a dealer, you agree to the following obligations:\n\n1. Accurate Information: You must provide truthful and accurate vehicle information to customers.\n2. Fair Pricing: You must not add excessive markups or engage in deceptive pricing practices.\n3. Customer Service: You are responsible for responding to customer inquiries promptly and professionally.\n4. Compliance: You must comply with all applicable local laws and regulations regarding vehicle sales.\n5. Platform Rules: You must follow AutonetSellCar platform policies, including commission structures and dispute resolution procedures.\n6. Prohibited Activities: Misrepresentation of vehicle condition, unauthorized use of platform branding, and soliciting customers outside the platform are strictly prohibited.\n7. Termination: Violation of these obligations may result in immediate termination of your dealer status without prior notice.\n\nAutonetSellCar reserves the right to modify these obligations with reasonable notice.`, + dealerAgreeAll: 'I agree to all terms above', + dealerMustAgree: 'You must agree to all terms before proceeding.', + dealerProceedToApply: 'Proceed to Application', // Vehicle Sharing shareVehicle: 'Share Vehicle', @@ -1337,6 +1361,18 @@ const translations: Record = { pendingApplicationMessage: 'Таны хүсэлт хянагдаж байна. Зөвшөөрөгдсөний дараа мэдэгдэх болно.', rejectedApplicationMessage: 'Таны хүсэлт татгалзагдлаа.', rejectReason: 'Татгалзсан шалтгаан', + dealerSectionTitle: 'Дилерийн хөтөлбөр', + dealerSectionDesc: 'Дилер болж, найзууддаа машин санал болгож комисс аваарай.', + dealerApplyButton: 'Дилер болох хүсэлт гаргах', + dealerViewCard: 'Миний дилерийн карт харах', + dealerAgreementTitle: 'Дилерийн гэрээ', + dealerPrivacyAgreement: 'Хувийн мэдээлэл цуглуулах, ашиглахыг зөвшөөрөх', + dealerPrivacyContent: `Дилерийн хөтөлбөрт бүртгүүлснээр та дараах хувийн мэдээлэл цуглуулах, ашиглахыг зөвшөөрч байна:\n\n1. Цуглуулах мэдээлэл: Бүтэн нэр, утасны дугаар, иргэний үнэмлэх/паспортын дугаар, банкны дансны мэдээлэл, бизнесийн бүртгэлийн дугаар\n2. Цуглуулах зорилго: Дилерийн таньж мэдэх, комисс төлбөр хийх, татварын тайлан\n3. Хадгалах хугацаа: Дилерийн гэрээний хугацаанд болон дуусгавар болсноос хойш 5 жил (хуулийн шаардлагаар)\n4. Татгалзах эрх: Та хувийн мэдээлэл өгөхөөс татгалзаж болно, гэхдээ энэ нь дилерийн бүртгэлийг боломжгүй болгоно.`, + dealerObligationAgreement: 'Дилерийн үүргийн гэрээ', + dealerObligationContent: `Дилер болсноор та дараах үүргүүдийг хүлээн зөвшөөрч байна:\n\n1. Үнэн зөв мэдээлэл: Та худалдан авагчдад машины талаар үнэн зөв мэдээлэл өгөх ёстой.\n2. Шударга үнэ: Хэт өндөр нэмэлт үнэ тогтоох, хууран мэхлэх үнийн бодлого явуулахыг хориглоно.\n3. Хэрэглэгчийн үйлчилгээ: Та хэрэглэгчийн асуултад шуурхай, мэргэжлийн түвшинд хариулах үүрэгтэй.\n4. Хууль дүрэм: Машин худалдаатай холбоотой бүх холбогдох хууль тогтоомжийг дагаж мөрдөх ёстой.\n5. Платформын дүрэм: AutonetSellCar платформын бодлогыг дагах ёстой.\n6. Хориотой үйлдэл: Машины байдлыг буруу мэдээлэх, платформын бренд зөвшөөрөлгүй ашиглах зэрэг нь хатуу хориотой.\n7. Цуцлах: Эдгээр үүргийг зөрчсөн тохиолдолд дилерийн статусыг нэн даруй цуцалж болно.`, + dealerAgreeAll: 'Дээрх бүх нөхцлийг зөвшөөрч байна', + dealerMustAgree: 'Үргэлжлүүлэхийн өмнө бүх нөхцлийг зөвшөөрөх шаардлагатай.', + dealerProceedToApply: 'Хүсэлт гаргах руу үргэлжлүүлэх', // Vehicle Sharing shareVehicle: 'Машин хуваалцах', @@ -1814,6 +1850,18 @@ const translations: Record = { pendingApplicationMessage: 'Ваша заявка рассматривается. Мы уведомим вас после одобрения.', rejectedApplicationMessage: 'Ваша заявка была отклонена.', rejectReason: 'Причина отклонения', + dealerSectionTitle: 'Дилерская программа', + dealerSectionDesc: 'Станьте дилером и зарабатывайте комиссионные, рекомендуя автомобили друзьям.', + dealerApplyButton: 'Подать заявку на дилера', + dealerViewCard: 'Просмотр карты дилера', + dealerAgreementTitle: 'Соглашение дилера', + dealerPrivacyAgreement: 'Согласие на сбор и использование персональных данных', + dealerPrivacyContent: `Подавая заявку на участие в дилерской программе, вы соглашаетесь на сбор и использование следующих персональных данных:\n\n1. Собираемая информация: ФИО, номер телефона, номер паспорта/удостоверения, банковские реквизиты, регистрационный номер бизнеса\n2. Цель сбора: Верификация дилера, обработка комиссионных выплат, налоговая отчётность\n3. Срок хранения: На протяжении действия дилерского соглашения и 5 лет после его прекращения (по требованию закона)\n4. Право на отказ: Вы можете отказаться от предоставления персональных данных, однако это сделает регистрацию дилера невозможной.`, + dealerObligationAgreement: 'Соглашение об обязанностях дилера', + dealerObligationContent: `Становясь дилером, вы соглашаетесь с следующими обязанностями:\n\n1. Достоверная информация: Вы обязаны предоставлять клиентам правдивую и точную информацию об автомобилях.\n2. Справедливое ценообразование: Запрещается устанавливать чрезмерные наценки или вводить в заблуждение относительно цен.\n3. Обслуживание клиентов: Вы обязаны оперативно и профессионально отвечать на запросы клиентов.\n4. Соблюдение законов: Вы обязаны соблюдать все применимые законы и правила, касающиеся продажи автомобилей.\n5. Правила платформы: Вы обязаны следовать политике платформы AutonetSellCar.\n6. Запрещённые действия: Искажение состояния автомобиля, несанкционированное использование бренда платформы строго запрещены.\n7. Прекращение: Нарушение данных обязанностей может привести к немедленному прекращению статуса дилера.`, + dealerAgreeAll: 'Я согласен со всеми вышеуказанными условиями', + dealerMustAgree: 'Для продолжения необходимо согласиться со всеми условиями.', + dealerProceedToApply: 'Перейти к заявке', // Vehicle Sharing shareVehicle: 'Поделиться авто', @@ -2291,6 +2339,18 @@ const translations: Record = { pendingApplicationMessage: '신청서가 검토 중입니다. 승인되면 알려드리겠습니다.', rejectedApplicationMessage: '신청이 거부되었습니다.', rejectReason: '거부 사유', + dealerSectionTitle: '딜러 프로그램', + dealerSectionDesc: '딜러가 되어 친구에게 차량을 추천하고 수수료를 받으세요.', + dealerApplyButton: '딜러 신청하기', + dealerViewCard: '내 딜러증 보기', + dealerAgreementTitle: '딜러 약관 동의', + dealerPrivacyAgreement: '개인정보 수집 및 이용 동의', + dealerPrivacyContent: `딜러 프로그램 신청 시 아래의 개인정보 수집 및 이용에 동의하게 됩니다.\n\n1. 수집 항목: 성명, 전화번호, 주민등록번호(또는 여권번호), 은행 계좌 정보, 사업자등록번호\n2. 수집 목적: 딜러 본인 확인, 수수료 지급 처리, 세금 신고\n3. 보유 기간: 딜러 계약 기간 및 종료 후 5년간 보유 (관계 법령에 따름)\n4. 거부 권리: 개인정보 제공을 거부할 수 있으나, 이 경우 딜러 등록이 불가합니다.\n\n귀하의 개인정보는 관련 법률에 따라 처리되며, 법령에 의한 경우를 제외하고 본인의 동의 없이 제3자에게 제공되지 않습니다.`, + dealerObligationAgreement: '딜러 의무 수행 동의', + dealerObligationContent: `딜러가 됨으로써 아래의 의무에 동의하게 됩니다.\n\n1. 정확한 정보 제공: 고객에게 차량에 대한 정확하고 진실된 정보를 제공해야 합니다.\n2. 공정한 가격: 과도한 추가 금액을 부과하거나 기만적인 가격 정책을 사용할 수 없습니다.\n3. 고객 응대: 고객 문의에 신속하고 전문적으로 응답할 의무가 있습니다.\n4. 법규 준수: 차량 판매와 관련된 모든 관련 법률 및 규정을 준수해야 합니다.\n5. 플랫폼 규칙: AutonetSellCar 플랫폼 정책(수수료 구조, 분쟁 해결 절차 등)을 따라야 합니다.\n6. 금지 행위: 차량 상태 허위 표시, 플랫폼 브랜드 무단 사용, 플랫폼 외부에서의 고객 유인 행위는 엄격히 금지됩니다.\n7. 자격 박탈: 위 의무를 위반할 경우 사전 통보 없이 딜러 자격이 즉시 박탈될 수 있습니다.\n\nAutonetSellCar는 합리적인 사전 고지 후 본 의무 사항을 변경할 권리를 보유합니다.`, + dealerAgreeAll: '위의 모든 약관에 동의합니다', + dealerMustAgree: '계속하려면 모든 약관에 동의해야 합니다.', + dealerProceedToApply: '신청서 작성으로 이동', // Vehicle Sharing shareVehicle: '차량 공유',