Commit 21a78f35 authored by Sugar Pramana's avatar Sugar Pramana

Perbaikan routing menu Tracking

parent a33dfdce
......@@ -21,3 +21,15 @@
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Android keystore files (IMPORTANT: Never commit these!)
*.keystore
*.jks
keystore.properties
key.properties
# Android build outputs
android/app/build/
android/app/release/
android/.gradle/
android/build/
# ✅ APK Android Berhasil Dibuat!
## Informasi APK (Update Terbaru)
- **Nama File**: app-debug.apk
- **Ukuran**: 4.84 MB
- **Tanggal Build**: 19 April 2026, 22:21
- **Tipe**: Debug APK (untuk testing)
- **Lokasi**: `android/app/build/outputs/apk/debug/app-debug.apk`
## Update Terbaru
✅ Halaman InputProspek sudah disesuaikan dengan design baru
✅ Halaman InputPesanan sudah ditambahkan
✅ Semua fitur sudah terintegrasi dalam APK
## Cara Install APK ke HP Android
### Metode 1: Via USB (ADB)
1. Hubungkan HP ke komputer via USB
2. Aktifkan USB Debugging di HP (Settings → Developer Options → USB Debugging)
3. Jalankan command:
```bash
adb install android/app/build/outputs/apk/debug/app-debug.apk
```
### Metode 2: Via File Transfer
1. Copy file `app-debug.apk` dari folder `android/app/build/outputs/apk/debug/` ke HP Anda
2. Buka File Manager di HP
3. Cari dan tap file `app-debug.apk`
4. Jika diminta, izinkan "Install from Unknown Sources"
5. Tap tombol "Install"
6. Tunggu proses instalasi selesai
7. Tap "Open" untuk membuka aplikasi
### Metode 3: Via Google Drive / WhatsApp
1. Upload file APK ke Google Drive atau kirim via WhatsApp ke diri sendiri
2. Download di HP
3. Tap file yang sudah didownload
4. Install seperti metode 2
## Fitur Aplikasi yang Sudah Dibuat
✅ Login Page
✅ Beranda (Home) dengan stats dan menu utama
✅ Prospek (Leads) dengan tabs dan search
✅ Input Prospek (Add Lead) dengan form lengkap
✅ Detail Aktivitas dengan timeline
✅ Follow Up dengan form dan riwayat
✅ Buat Penawaran dengan mode Kredit/Cash
✅ Penjualan (SPK Monitoring) dengan tabs
✅ Detail SPK dengan informasi lengkap
✅ Tracking (Monitoring Pesanan) dengan progress
✅ Detail Monitoring dengan timeline progress
✅ Bottom Navigation
✅ Responsive Design dengan Tailwind CSS
## Build APK Lagi di Masa Depan
### Cara Cepat (Windows):
```bash
build-apk.bat
```
Pilih opsi 1
### Cara Cepat (Command):
```bash
npm run android:apk
```
### Manual Step by Step:
```bash
npm run build
npx cap sync android
cd android
./gradlew assembleDebug
```
## Build APK Release (Production)
Untuk production/publish ke Play Store:
1. Generate keystore (sekali saja):
```bash
keytool -genkey -v -keystore dms-sales-app.keystore -alias dms-sales -keyalg RSA -keysize 2048 -validity 10000
```
2. Konfigurasi signing (lihat BUILD_ANDROID.md untuk detail)
3. Build release:
```bash
npm run build
npx cap sync android
cd android
./gradlew assembleRelease
```
APK release akan ada di: `android/app/build/outputs/apk/release/`
## Troubleshooting
### APK tidak bisa diinstall
- Pastikan "Install from Unknown Sources" diaktifkan
- Uninstall versi lama jika ada
- Pastikan HP memiliki cukup storage
### Aplikasi crash saat dibuka
- Coba build ulang dengan `./gradlew clean` terlebih dahulu
- Pastikan semua dependencies sudah terinstall
### Perlu update aplikasi
1. Build APK baru dengan versi lebih tinggi
2. Uninstall aplikasi lama dari HP
3. Install APK baru
## Catatan Penting
⚠️ APK Debug ini hanya untuk testing, JANGAN dipublish ke Play Store
⚠️ Untuk production, gunakan APK Release yang sudah di-sign
⚠️ Simpan keystore file dengan aman (jangan hilang!)
## Next Steps
1. ✅ Install APK ke HP untuk testing
2. ⬜ Test semua fitur aplikasi
3. ⬜ Fix bugs jika ada
4. ⬜ Generate keystore untuk production
5. ⬜ Build APK Release
6. ⬜ Publish ke Google Play Store
## Dokumentasi Lengkap
- `BUILD_ANDROID.md` - Panduan lengkap build APK
- `QUICK_START.md` - Quick reference
- `build-apk.bat` - Script Windows
- `build-apk.sh` - Script Mac/Linux
---
**Selamat! Aplikasi DMS Sales sudah siap diinstall di HP Android! 🎉**
# Panduan Build APK Android - DMS Sales App
## Prasyarat
Pastikan Anda sudah menginstall:
- Node.js (v14 atau lebih baru)
- Java Development Kit (JDK) 11 atau 17
- Android Studio (untuk build dengan GUI)
- Gradle (biasanya sudah include di Android Studio)
## Script NPM yang Tersedia
### 1. Build React App
```bash
npm run build
```
Build production React app ke folder `build/`
### 2. Sync dengan Capacitor
```bash
npm run cap:sync
```
Sync semua platform (iOS & Android)
```bash
npm run cap:sync:android
```
Sync hanya Android
### 3. Buka Android Studio
```bash
npm run cap:open:android
```
Membuka project Android di Android Studio
### 4. Build dan Buka Android Studio
```bash
npm run android:open
```
Build React app, sync dengan Android, dan buka Android Studio
### 5. Build APK Debug (Command Line)
```bash
npm run android:apk
```
Build React app, sync, dan generate APK debug secara otomatis
APK akan tersimpan di: `android/app/build/outputs/apk/debug/app-debug.apk`
### 6. Build APK Debug (Manual)
```bash
npm run android:apk:debug
```
Hanya build APK debug (tanpa build React app terlebih dahulu)
### 7. Build APK Release
```bash
npm run android:apk:release
```
Build APK release (production)
APK akan tersimpan di: `android/app/build/outputs/apk/release/app-release-unsigned.apk`
## Cara Tercepat Build APK
### Untuk Testing (Debug APK):
```bash
npm run android:apk
```
Setelah selesai, APK ada di:
```
android/app/build/outputs/apk/debug/app-debug.apk
```
### Untuk Production (Release APK):
```bash
npm run build
npm run cap:sync:android
npm run android:apk:release
```
Setelah selesai, APK ada di:
```
android/app/build/outputs/apk/release/app-release-unsigned.apk
```
## Build dengan Android Studio
1. Build dan sync:
```bash
npm run android:build
```
2. Buka Android Studio:
```bash
npm run cap:open:android
```
3. Di Android Studio:
- Tunggu Gradle sync selesai
- Pilih menu: **Build → Build Bundle(s) / APK(s) → Build APK(s)**
- Tunggu proses build selesai
- Klik "locate" untuk membuka folder APK
## Signing APK untuk Production
Untuk release APK yang bisa dipublish ke Play Store, Anda perlu signing dengan keystore:
### 1. Generate Keystore (sekali saja):
```bash
keytool -genkey -v -keystore dms-sales-app.keystore -alias dms-sales -keyalg RSA -keysize 2048 -validity 10000
```
### 2. Konfigurasi Signing di `android/app/build.gradle`:
Tambahkan sebelum `android {`:
```gradle
def keystorePropertiesFile = rootProject.file("keystore.properties")
def keystoreProperties = new Properties()
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
```
Tambahkan di dalam `android { ... }`:
```gradle
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
```
### 3. Buat file `android/keystore.properties`:
```properties
storeFile=../dms-sales-app.keystore
storePassword=YOUR_STORE_PASSWORD
keyAlias=dms-sales
keyPassword=YOUR_KEY_PASSWORD
```
### 4. Build Signed APK:
```bash
npm run android:apk:release
```
APK signed akan tersimpan di: `android/app/build/outputs/apk/release/app-release.apk`
## Troubleshooting
### Error: Gradle command not found
Pastikan Android Studio sudah terinstall dan Gradle sudah ada di PATH, atau gunakan:
```bash
cd android
./gradlew assembleDebug
```
### Error: Java version
Pastikan menggunakan JDK 11 atau 17:
```bash
java -version
```
### Error: Build failed
Coba clean build:
```bash
cd android
./gradlew clean
./gradlew assembleDebug
```
### APK tidak bisa diinstall
- Pastikan "Install from Unknown Sources" diaktifkan di Android
- Untuk release APK, pastikan sudah di-sign dengan keystore
## Install APK ke Device
### Via USB (ADB):
```bash
adb install android/app/build/outputs/apk/debug/app-debug.apk
```
### Via File Transfer:
1. Copy APK ke device
2. Buka file manager di device
3. Tap APK file
4. Izinkan install dari unknown sources
5. Install
## Update Capacitor Config
Jika perlu update konfigurasi app, edit `capacitor.config.json`:
```json
{
"appId": "com.dms.sales",
"appName": "DMS Sales",
"webDir": "build",
"bundledWebRuntime": false
}
```
Setelah update, jalankan:
```bash
npm run cap:sync:android
```
## Tips
1. Selalu build React app terlebih dahulu sebelum sync ke Android
2. Gunakan debug APK untuk testing
3. Gunakan release APK yang sudah di-sign untuk production
4. Simpan keystore file dengan aman (jangan commit ke git)
5. Tambahkan `*.keystore` dan `keystore.properties` ke `.gitignore`
## Struktur Output APK
```
android/app/build/outputs/apk/
├── debug/
│ └── app-debug.apk (untuk testing)
└── release/
└── app-release.apk (untuk production, setelah signing)
```
# Quick Start - Build APK Android
## Cara Tercepat (Windows)
### Menggunakan Script Batch:
```bash
build-apk.bat
```
Pilih opsi 1 untuk build APK debug
### Menggunakan NPM Script:
```bash
npm run android:apk
```
APK akan tersimpan di: `android/app/build/outputs/apk/debug/app-debug.apk`
## Cara Tercepat (Mac/Linux)
```bash
npm run android:apk
```
APK akan tersimpan di: `android/app/build/outputs/apk/debug/app-debug.apk`
## Install APK ke HP Android
### Via USB:
1. Hubungkan HP ke komputer via USB
2. Aktifkan USB Debugging di HP
3. Jalankan:
```bash
adb install android/app/build/outputs/apk/debug/app-debug.apk
```
### Via File Transfer:
1. Copy file `app-debug.apk` ke HP
2. Buka file manager di HP
3. Tap file APK
4. Izinkan install dari unknown sources jika diminta
5. Tap Install
## Semua Perintah yang Tersedia
| Perintah | Fungsi |
|----------|--------|
| `npm run build` | Build React app |
| `npm run cap:sync:android` | Sync dengan Android |
| `npm run cap:open:android` | Buka Android Studio |
| `npm run android:build` | Build + Sync |
| `npm run android:open` | Build + Sync + Buka Studio |
| `npm run android:apk` | Build APK Debug (lengkap) |
| `npm run android:apk:debug` | Build APK Debug (cepat) |
| `npm run android:apk:release` | Build APK Release |
| `build-apk.bat` | Menu interaktif (Windows) |
## Troubleshooting Cepat
### Gradle error:
```bash
cd android
./gradlew clean
cd ..
npm run android:apk
```
### Java version error:
Pastikan JDK 11 atau 17 terinstall
### APK tidak bisa install:
Aktifkan "Install from Unknown Sources" di pengaturan Android
## Untuk Production
1. Generate keystore (sekali saja):
```bash
keytool -genkey -v -keystore dms-sales-app.keystore -alias dms-sales -keyalg RSA -keysize 2048 -validity 10000
```
2. Konfigurasi signing (lihat BUILD_ANDROID.md)
3. Build release:
```bash
npm run android:apk:release
```
## Butuh Bantuan?
Lihat dokumentasi lengkap di `BUILD_ANDROID.md`
@echo off
echo ========================================
echo DMS Sales App - Android APK Builder
echo ========================================
echo.
:menu
echo Pilih opsi build:
echo 1. Build APK Debug (untuk testing)
echo 2. Build APK Release (untuk production)
echo 3. Build dan Buka Android Studio
echo 4. Sync Capacitor saja
echo 5. Exit
echo.
set /p choice="Masukkan pilihan (1-5): "
if "%choice%"=="1" goto debug
if "%choice%"=="2" goto release
if "%choice%"=="3" goto studio
if "%choice%"=="4" goto sync
if "%choice%"=="5" goto end
echo Pilihan tidak valid!
goto menu
:debug
echo.
echo [1/3] Building React app...
call npm run build
if errorlevel 1 (
echo Error: Build React app gagal!
pause
goto menu
)
echo.
echo [2/3] Syncing dengan Android...
call npx cap sync android
if errorlevel 1 (
echo Error: Sync Capacitor gagal!
pause
goto menu
)
echo.
echo [3/3] Building APK Debug...
cd android
call gradlew assembleDebug
if errorlevel 1 (
echo Error: Build APK gagal!
cd ..
pause
goto menu
)
cd ..
echo.
echo ========================================
echo APK Debug berhasil dibuat!
echo Lokasi: android\app\build\outputs\apk\debug\app-debug.apk
echo ========================================
echo.
pause
goto menu
:release
echo.
echo [1/3] Building React app...
call npm run build
if errorlevel 1 (
echo Error: Build React app gagal!
pause
goto menu
)
echo.
echo [2/3] Syncing dengan Android...
call npx cap sync android
if errorlevel 1 (
echo Error: Sync Capacitor gagal!
pause
goto menu
)
echo.
echo [3/3] Building APK Release...
cd android
call gradlew assembleRelease
if errorlevel 1 (
echo Error: Build APK gagal!
cd ..
pause
goto menu
)
cd ..
echo.
echo ========================================
echo APK Release berhasil dibuat!
echo Lokasi: android\app\build\outputs\apk\release\app-release.apk
echo ========================================
echo.
echo CATATAN: Untuk production, APK harus di-sign dengan keystore!
echo Lihat BUILD_ANDROID.md untuk panduan signing.
echo.
pause
goto menu
:studio
echo.
echo [1/2] Building dan Syncing...
call npm run android:build
if errorlevel 1 (
echo Error: Build gagal!
pause
goto menu
)
echo.
echo [2/2] Membuka Android Studio...
call npx cap open android
echo.
echo Android Studio dibuka. Build APK dari menu:
echo Build ^> Build Bundle(s) / APK(s) ^> Build APK(s)
echo.
pause
goto menu
:sync
echo.
echo Syncing Capacitor dengan Android...
call npx cap sync android
if errorlevel 1 (
echo Error: Sync gagal!
pause
goto menu
)
echo.
echo Sync berhasil!
echo.
pause
goto menu
:end
echo.
echo Terima kasih!
exit
#!/bin/bash
echo "========================================"
echo "DMS Sales App - Android APK Builder"
echo "========================================"
echo ""
show_menu() {
echo "Pilih opsi build:"
echo "1. Build APK Debug (untuk testing)"
echo "2. Build APK Release (untuk production)"
echo "3. Build dan Buka Android Studio"
echo "4. Sync Capacitor saja"
echo "5. Exit"
echo ""
read -p "Masukkan pilihan (1-5): " choice
case $choice in
1) build_debug ;;
2) build_release ;;
3) open_studio ;;
4) sync_only ;;
5) exit 0 ;;
*) echo "Pilihan tidak valid!"; show_menu ;;
esac
}
build_debug() {
echo ""
echo "[1/3] Building React app..."
npm run build || { echo "Error: Build React app gagal!"; read -p "Press enter..."; show_menu; return; }
echo ""
echo "[2/3] Syncing dengan Android..."
npx cap sync android || { echo "Error: Sync Capacitor gagal!"; read -p "Press enter..."; show_menu; return; }
echo ""
echo "[3/3] Building APK Debug..."
cd android && ./gradlew assembleDebug && cd .. || { echo "Error: Build APK gagal!"; cd ..; read -p "Press enter..."; show_menu; return; }
echo ""
echo "========================================"
echo "APK Debug berhasil dibuat!"
echo "Lokasi: android/app/build/outputs/apk/debug/app-debug.apk"
echo "========================================"
echo ""
read -p "Press enter to continue..."
show_menu
}
build_release() {
echo ""
echo "[1/3] Building React app..."
npm run build || { echo "Error!"; read -p "Press enter..."; show_menu; return; }
echo ""
echo "[2/3] Syncing dengan Android..."
npx cap sync android || { echo "Error!"; read -p "Press enter..."; show_menu; return; }
echo ""
echo "[3/3] Building APK Release..."
cd android && ./gradlew assembleRelease && cd .. || { echo "Error!"; cd ..; read -p "Press enter..."; show_menu; return; }
echo ""
echo "========================================"
echo "APK Release berhasil dibuat!"
echo "Lokasi: android/app/build/outputs/apk/release/app-release.apk"
echo "========================================"
echo ""
read -p "Press enter to continue..."
show_menu
}
open_studio() {
echo ""
echo "[1/2] Building dan Syncing..."
npm run android:build || { echo "Error!"; read -p "Press enter..."; show_menu; return; }
echo ""
echo "[2/2] Membuka Android Studio..."
npx cap open android
echo ""
read -p "Press enter to continue..."
show_menu
}
sync_only() {
echo ""
echo "Syncing Capacitor dengan Android..."
npx cap sync android || { echo "Error!"; read -p "Press enter..."; show_menu; return; }
echo ""
echo "Sync berhasil!"
echo ""
read -p "Press enter to continue..."
show_menu
}
show_menu
......@@ -21,7 +21,15 @@
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
"eject": "react-scripts eject",
"cap:sync": "npx cap sync",
"cap:sync:android": "npx cap sync android",
"cap:open:android": "npx cap open android",
"android:build": "npm run build && npx cap sync android",
"android:open": "npm run android:build && npx cap open android",
"android:apk:debug": "cd android && gradlew assembleDebug",
"android:apk:release": "cd android && gradlew assembleRelease",
"android:apk": "npm run build && npx cap sync android && cd android && gradlew assembleDebug"
},
"eslintConfig": {
"extends": [
......
......@@ -4,6 +4,7 @@ import Login from './pages/Login';
import Beranda from './pages/Beranda';
import Prospek from './pages/Prospek';
import InputProspek from './pages/InputProspek';
import InputPesanan from './pages/InputPesanan';
import Penawaran from './pages/Penawaran';
import Activities from './pages/Activities';
import Transaksi from './pages/Transaksi';
......@@ -37,6 +38,7 @@ function App() {
<Route path="/" element={<ProtectedRoute><Beranda /></ProtectedRoute>} />
<Route path="/prospek" element={<ProtectedRoute><Prospek /></ProtectedRoute>} />
<Route path="/prospek/input" element={<ProtectedRoute><InputProspek /></ProtectedRoute>} />
<Route path="/input-pesanan" element={<ProtectedRoute><InputPesanan /></ProtectedRoute>} />
<Route path="/penawaran" element={<ProtectedRoute><Penawaran /></ProtectedRoute>} />
<Route path="/activities" element={<ProtectedRoute><Activities /></ProtectedRoute>} />
<Route path="/transaksi" element={<ProtectedRoute><Transaksi /></ProtectedRoute>} />
......
......@@ -120,7 +120,7 @@ const Beranda = () => {
</button>
<button
onClick={() => navigate('/activities')}
onClick={() => navigate('/tracking')}
className="bg-white rounded-2xl p-4 shadow-sm flex flex-col items-center gap-2"
>
<div className="w-14 h-14 bg-purple-100 rounded-2xl flex items-center justify-center">
......
......@@ -173,8 +173,7 @@ const BuatPenawaran = () => {
className="w-full px-4 py-3 bg-gray-50 border-0 rounded-xl text-gray-900 appearance-none focus:outline-none focus:ring-2 focus:ring-slate-800"
>
<option value="Chery">Chery</option>
<option value="Hyundai">Hyundai</option>
<option value="Toyota">Toyota</option>
<option value="Hyundai">Jaecoo</option>
</select>
</div>
......@@ -240,6 +239,14 @@ const BuatPenawaran = () => {
{activeTab === 'kredit' && (
<div className="space-y-3">
<div>
<label className="block text-xs text-gray-500 mb-1">NAMA LEASING</label>
<select
className="w-full px-3 py-2 bg-gray-50 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-slate-800 mb-4">
<option>ADIRA MULTIFINANCE (ADIRA)</option>
<option>MANDIRI UTAMA FINANCE (MUF)</option>
</select>
</div>
<div>
<label className="block text-sm text-gray-600 mb-2">TENOR (BULAN)</label>
<select
......@@ -256,11 +263,11 @@ const BuatPenawaran = () => {
</div>
<div>
<label className="block text-sm text-gray-600 mb-2">UANG MUKA</label>
<label className="block text-sm text-gray-600 mb-2">BOOKING FEE</label>
<input
type="text"
value={formData.uangMuka}
onChange={(e) => setFormData({...formData, uangMuka: e.target.value})}
value={formData.bookingFee}
onChange={(e) => setFormData({...formData, bookingFee: e.target.value})}
placeholder="Masukkan nominal"
className="w-full px-4 py-3 bg-gray-50 border-0 rounded-xl text-gray-900 placeholder-gray-400 focus:outline-none focus:ring-2 focus:ring-slate-800"
/>
......
This diff is collapsed.
......@@ -5,11 +5,13 @@ import BottomNav from '../components/BottomNav';
const InputProspek = () => {
const navigate = useNavigate();
const [showSuccessModal, setShowSuccessModal] = useState(false);
const [selectedBrand, setSelectedBrand] = useState('Chery');
const [selectedUnit, setSelectedUnit] = useState(null);
const [selectedSources, setSelectedSources] = useState([]);
const [formData, setFormData] = useState({
namaCustomer: '',
noHP: '',
unitDiminati: '',
sumberLead: [],
catatanTambahan: ''
});
......@@ -20,7 +22,7 @@ const InputProspek = () => {
price: 'Rp 650.000.000',
specs: '2.0T AWD • 250 HP • 7 Seater',
badge: 'READY STOCK',
badgeColor: 'bg-green-100 text-green-700'
badgeColor: 'bg-green-500 text-white'
},
{
id: 'omoda-5-gt',
......@@ -28,7 +30,7 @@ const InputProspek = () => {
price: 'Rp 480.000.000',
specs: '1.6T DCT • 197 HP • Futuristic SUV',
badge: 'INDENT',
badgeColor: 'bg-orange-100 text-orange-700'
badgeColor: 'bg-orange-500 text-white'
},
{
id: 'tiggo-7-pro-hybrid',
......@@ -36,7 +38,7 @@ const InputProspek = () => {
price: 'Rp 520.000.000',
specs: '1.5T HEV • 170 HP • Efficient Hybrid',
badge: 'READY STOCK',
badgeColor: 'bg-green-100 text-green-700'
badgeColor: 'bg-green-500 text-white'
}
];
......@@ -48,12 +50,11 @@ const InputProspek = () => {
];
const handleSumberToggle = (id) => {
setFormData(prev => ({
...prev,
sumberLead: prev.sumberLead.includes(id)
? prev.sumberLead.filter(s => s !== id)
: [...prev.sumberLead, id]
}));
setSelectedSources(prev =>
prev.includes(id)
? prev.filter(s => s !== id)
: [...prev, id]
);
};
const handleSubmit = (e) => {
......@@ -65,13 +66,15 @@ const InputProspek = () => {
return (
<div className="flex flex-col h-screen bg-gray-50">
{/* Header */}
<div className="sticky top-0 z-50 bg-white px-4 py-3 flex items-center shadow-sm">
<div className="sticky top-0 z-50 bg-white px-4 py-3 shadow-sm">
<div className="flex items-center gap-3">
<button onClick={() => navigate(-1)} className="text-gray-700">
<svg className="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M15 19l-7-7 7-7" />
</svg>
</button>
<span className="ml-3 font-semibold text-gray-800">Tambah Lead Baru</span>
<h1 className="text-base font-semibold text-gray-900">Tambah Lead Baru</h1>
</div>
</div>
<div className="flex-1 overflow-y-auto pb-20">
......@@ -121,30 +124,43 @@ const InputProspek = () => {
<label className="block text-sm font-semibold text-gray-700 mb-3">
Unit yang Diminati
</label>
<div className="mb-3">
<label className="block text-xs text-gray-500 mb-2">PILIH BRAND</label>
<select
className="w-full px-4 py-3 bg-white border border-gray-200 rounded-xl text-gray-900 focus:outline-none focus:ring-2 focus:ring-slate-800"
value={selectedBrand}
onChange={(e) => setSelectedBrand(e.target.value)}
>
<option>Chery</option>
<option>Jaecoo</option>
</select>
</div>
<div className="space-y-3">
{units.map((unit) => (
<button
key={unit.id}
type="button"
onClick={() => setFormData({...formData, unitDiminati: unit.id})}
onClick={() => setSelectedUnit(unit.id)}
className={`w-full bg-white rounded-xl p-4 border-2 transition-all text-left ${
formData.unitDiminati === unit.id
selectedUnit === unit.id
? 'border-slate-800 shadow-md'
: 'border-gray-200'
}`}
>
<div className="flex items-start justify-between mb-2">
<div className="flex items-start justify-between">
<div className="flex-1">
<div className="flex items-center gap-2 mb-1">
<h3 className="font-bold text-gray-900">{unit.name}</h3>
<h3 className="font-bold text-base text-gray-900">{unit.name}</h3>
<span className={`${unit.badgeColor} text-xs px-2 py-0.5 rounded font-semibold`}>
{unit.badge}
</span>
</div>
<p className="text-lg font-bold text-gray-900 mb-1">{unit.price}</p>
<p className="text-base font-bold text-gray-900 mb-1">{unit.price}</p>
<p className="text-xs text-gray-600">{unit.specs}</p>
</div>
<svg className="w-5 h-5 text-gray-400 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<svg className="w-5 h-5 text-gray-400 flex-shrink-0 mt-1" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 5l7 7-7 7" />
</svg>
</div>
......@@ -165,7 +181,7 @@ const InputProspek = () => {
type="button"
onClick={() => handleSumberToggle(option.id)}
className={`flex items-center justify-center gap-2 px-4 py-3 rounded-xl border-2 transition-all ${
formData.sumberLead.includes(option.id)
selectedSources.includes(option.id)
? 'bg-slate-800 border-slate-800 text-white'
: 'bg-white border-gray-200 text-gray-700'
}`}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment