221 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			221 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
@{
 | 
						|
    Layout = "~/Views/Admin/Transport/SpjDriver/Shared/_Layout.cshtml";
 | 
						|
    ViewData["Title"] = "Home Page";
 | 
						|
}
 | 
						|
 | 
						|
 <div class="container max-w-sm mx-auto bg-white min-h-screen">
 | 
						|
    
 | 
						|
        <div class="absolute top-0 max-w-sm container mx-auto bg-orange-500 text-white rounded-br-[125px] h-[250px] flex flex-row justify-between items-start px-6 py-6 shadow-lg z-20">
 | 
						|
            <div class="flex flex-col">
 | 
						|
                <h1 class="text-md font-bold leading-tight text-white">Bonny Agung Putra</h1>
 | 
						|
                <p class="text-xs opacity-90 font-medium text-orange-100">Driver UPST</span></p>
 | 
						|
                <div class="mt-5 flex items-center gap-2">
 | 
						|
                    <i class="w-4 h-4 text-white" data-lucide="map-pin"></i>
 | 
						|
                    <span class="text-sm opacity-90">Lokasi Anda:</span>
 | 
						|
                </div>
 | 
						|
                <p id="userLocation" class="font-semibold text-xs tracking-wide cursor-pointer underline text-white hover:text-orange-200 transition">
 | 
						|
                    Mendeteksi lokasi...
 | 
						|
                </p>
 | 
						|
            </div>
 | 
						|
            <div class="flex items-center justify-center">
 | 
						|
                <div class="relative flex flex-col items-center justify-center">
 | 
						|
                    <div class="w-12 h-12 rounded-full border-3 border-white overflow-hidden shadow-md flex items-center justify-center cursor-pointer group" id="profileMenuButton">
 | 
						|
                        <i class="w-8 h-8 text-white" data-lucide="user"></i>
 | 
						|
                    </div>
 | 
						|
                    <div id="profileMenuDropdown" class="absolute top-12 right-0 mt-2 w-32 bg-white rounded shadow-lg py-2 z-50 hidden">
 | 
						|
                        <form method="post" asp-controller="Auth" asp-action="Logout">
 | 
						|
                            <button type="submit" class="hover:cursor-pointer flex items-center gap-2 w-full text-left px-4 py-2 text-sm font-semibold text-red-600 hover:bg-red-50 transition rounded-md">
 | 
						|
                                <i class="w-4 h-4" data-lucide="log-out"></i>
 | 
						|
                                Logout
 | 
						|
                            </button>
 | 
						|
                        </form>
 | 
						|
                    </div>
 | 
						|
                </div>
 | 
						|
             
 | 
						|
            </div>
 | 
						|
        </div>
 | 
						|
 | 
						|
        <div class="bg-gradient-to-br from-slate-50 via-blue-50 to-indigo-100 mx-4 px-6 py-12 mt-40 rounded-3xl relative overflow-hidden shadow-2xl z-21 border border-slate-200">
 | 
						|
            <div class="absolute top-0 left-0 w-full h-full pointer-events-none">
 | 
						|
                <div class="absolute top-4 right-8 w-6 h-6 bg-orange-300 rounded-full opacity-60 animate-bounce" style="animation-delay: 0.5s;"></div>
 | 
						|
                <div class="absolute top-12 left-12 w-4 h-4 bg-blue-400 rounded-full opacity-40 animate-pulse" style="animation-delay: 1s;"></div>
 | 
						|
                <div class="absolute bottom-8 left-8 w-5 h-5 bg-indigo-300 rounded-full opacity-50 animate-bounce" style="animation-delay: 1.5s;"></div>
 | 
						|
                <div class="absolute bottom-16 right-16 w-3 h-3 bg-slate-400 rounded-full opacity-30 animate-pulse" style="animation-delay: 2s;"></div>
 | 
						|
            </div>
 | 
						|
            
 | 
						|
            <div class="relative z-10 text-center">
 | 
						|
                <div class="w-24 h-24 mx-auto mb-6 relative">
 | 
						|
                    <div class="w-full h-full bg-gradient-to-br from-orange-400 to-orange-600 rounded-full flex items-center justify-center shadow-xl animate-pulse">
 | 
						|
                        <div class="w-20 h-20 bg-white rounded-full flex items-center justify-center">
 | 
						|
                            <i class="w-10 h-10 text-orange-500" data-lucide="clipboard-list"></i>
 | 
						|
                        </div>
 | 
						|
                    </div>
 | 
						|
                    <div class="absolute inset-0 border-4 border-orange-300 rounded-full animate-ping opacity-30"></div>
 | 
						|
                </div>
 | 
						|
                
 | 
						|
                <div class="space-y-4">
 | 
						|
                    <h2 class="text-xl font-bold bg-gradient-to-r from-slate-700 to-slate-900 bg-clip-text text-transparent">
 | 
						|
                        Belum Ada SPJ
 | 
						|
                    </h2>
 | 
						|
                    <p class="text-sm text-slate-600 leading-relaxed px-4 mb-2">
 | 
						|
                        Anda belum memiliki <span class="font-semibold text-orange-600">Surat Perintah Jalan</span> yang aktif saat ini.
 | 
						|
                    </p>
 | 
						|
                </div>
 | 
						|
 | 
						|
                <div class="bg-white/70 backdrop-blur-sm border border-white/30 rounded-2xl p-5 mb-6 text-left">
 | 
						|
                    <div class="space-y-2 text-xs text-slate-600">
 | 
						|
                        <div class="flex items-start gap-2">
 | 
						|
                            <div class="w-1 h-1 bg-orange-400 rounded-full mt-1.5 flex-shrink-0"></div>
 | 
						|
                            <p>SPJ akan diterbitkan oleh admin sesuai jadwal kerja</p>
 | 
						|
                        </div>
 | 
						|
                        <div class="flex items-start gap-2">
 | 
						|
                            <div class="w-1 h-1 bg-orange-400 rounded-full mt-1.5 flex-shrink-0"></div>
 | 
						|
                            <p>Periksa koneksi internet dan aktifkan lokasi GPS</p>
 | 
						|
                        </div>
 | 
						|
                    </div>
 | 
						|
                </div>
 | 
						|
                
 | 
						|
                <button id="refreshButton" class="bg-gradient-to-r from-orange-500 to-orange-600 hover:from-orange-600 hover:to-orange-700 text-white px-6 py-3 rounded-2xl text-sm font-bold shadow-lg hover:shadow-xl transition-all duration-300 flex items-center gap-2 mx-auto transform hover:scale-105">
 | 
						|
                    <i class="w-4 h-4" data-lucide="refresh-cw" id="refreshIcon"></i>
 | 
						|
                    <span id="refreshText">Refresh Halaman</span>
 | 
						|
                </button>
 | 
						|
            </div>
 | 
						|
        </div>
 | 
						|
 | 
						|
        <partial name="~/Views/Admin/Transport/SpjDriver/Shared/Components/_Navigation.cshtml" />
 | 
						|
      
 | 
						|
    </div>
 | 
						|
 | 
						|
 | 
						|
<register-block dynamic-section="scripts" key="jsHomeKosong">
 | 
						|
<style>
 | 
						|
    @@keyframes float {
 | 
						|
        0%, 100% { transform: translateY(0px); }
 | 
						|
        50% { transform: translateY(-10px); }
 | 
						|
    }
 | 
						|
    
 | 
						|
    @@keyframes shimmer {
 | 
						|
        0% { background-position: -200px 0; }
 | 
						|
        100% { background-position: calc(200px + 100%) 0; }
 | 
						|
    }
 | 
						|
    
 | 
						|
    .float-animation {
 | 
						|
        animation: float 3s ease-in-out infinite;
 | 
						|
    }
 | 
						|
    
 | 
						|
    .shimmer {
 | 
						|
        background: linear-gradient(90deg, transparent, rgba(255,255,255,0.4), transparent);
 | 
						|
        background-size: 200px 100%;
 | 
						|
        animation: shimmer 2s infinite;
 | 
						|
    }
 | 
						|
    
 | 
						|
    .refresh-spin {
 | 
						|
        animation: spin 1s linear infinite;
 | 
						|
    }
 | 
						|
    
 | 
						|
    @@keyframes spin {
 | 
						|
        from { transform: rotate(0deg); }
 | 
						|
        to { transform: rotate(360deg); }
 | 
						|
    }
 | 
						|
</style>
 | 
						|
 | 
						|
<script>
 | 
						|
document.addEventListener("DOMContentLoaded", function () {
 | 
						|
    const userLocationEl = document.getElementById("userLocation");
 | 
						|
 | 
						|
    function reverseGeocode(lat, lng) {
 | 
						|
        fetch(`https://nominatim.openstreetmap.org/reverse?format=json&lat=${lat}&lon=${lng}`)
 | 
						|
            .then(res => res.json())
 | 
						|
            .then(data => {
 | 
						|
                const address = data.display_name || `${lat}, ${lng}`;
 | 
						|
                userLocationEl.textContent = address;
 | 
						|
                localStorage.setItem("user_latitude", lat);
 | 
						|
                localStorage.setItem("user_longitude", lng);
 | 
						|
                localStorage.setItem("user_address", address);
 | 
						|
            })
 | 
						|
            .catch(() => {
 | 
						|
                userLocationEl.textContent = `${lat}, ${lng}`;
 | 
						|
            });
 | 
						|
    }
 | 
						|
 | 
						|
    function getLocationUpdate() {
 | 
						|
        if ("geolocation" in navigator) {
 | 
						|
            userLocationEl.textContent = "Mendeteksi lokasi baru...";
 | 
						|
            navigator.geolocation.getCurrentPosition(
 | 
						|
                function (position) {
 | 
						|
                    const lat = position.coords.latitude.toFixed(6);
 | 
						|
                    const lng = position.coords.longitude.toFixed(6);
 | 
						|
                    reverseGeocode(lat, lng);
 | 
						|
                },
 | 
						|
                function () {
 | 
						|
                    userLocationEl.textContent = "Lokasi tidak diizinkan";
 | 
						|
                }
 | 
						|
            );
 | 
						|
        } else {
 | 
						|
            userLocationEl.textContent = "Browser tidak mendukung lokasi";
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    const savedAddress = localStorage.getItem("user_address");
 | 
						|
    if (savedAddress) {
 | 
						|
        userLocationEl.textContent = savedAddress;
 | 
						|
    } else {
 | 
						|
        getLocationUpdate();
 | 
						|
    }
 | 
						|
 | 
						|
    userLocationEl.addEventListener("click", function () {
 | 
						|
        getLocationUpdate();
 | 
						|
    });
 | 
						|
 | 
						|
    const refreshBtn = document.getElementById('refreshButton');
 | 
						|
    const refreshIcon = document.getElementById('refreshIcon');
 | 
						|
    const refreshText = document.getElementById('refreshText');
 | 
						|
    
 | 
						|
    if (refreshBtn) {
 | 
						|
        refreshBtn.addEventListener("click", function() {
 | 
						|
            refreshIcon.style.animation = 'spin 1s linear infinite';
 | 
						|
            refreshText.textContent = 'Memuat...';
 | 
						|
            refreshBtn.disabled = true;
 | 
						|
            refreshBtn.style.opacity = '0.8';
 | 
						|
            
 | 
						|
            setTimeout(() => {
 | 
						|
                location.reload();
 | 
						|
            }, 1000);
 | 
						|
        });
 | 
						|
    }
 | 
						|
 | 
						|
    const mainIcon = document.querySelector('[data-lucide="clipboard-list"]');
 | 
						|
    if (mainIcon) {
 | 
						|
        mainIcon.closest('.w-24').classList.add('float-animation');
 | 
						|
    }
 | 
						|
 | 
						|
    const mainCard = document.querySelector('.bg-gradient-to-br');
 | 
						|
    if (mainCard) {
 | 
						|
        mainCard.style.opacity = '0';
 | 
						|
        mainCard.style.transform = 'translateY(20px)';
 | 
						|
        mainCard.style.transition = 'all 0.6s ease-out';
 | 
						|
        
 | 
						|
        setTimeout(() => {
 | 
						|
            mainCard.style.opacity = '1';
 | 
						|
            mainCard.style.transform = 'translateY(0)';
 | 
						|
        }, 100);
 | 
						|
    }
 | 
						|
});
 | 
						|
</script>
 | 
						|
 | 
						|
<script>
 | 
						|
    document.addEventListener("DOMContentLoaded", function () {
 | 
						|
        const btn = document.getElementById("profileMenuButton");
 | 
						|
        const dropdown = document.getElementById("profileMenuDropdown");
 | 
						|
 | 
						|
        btn.addEventListener("click", function (e) {
 | 
						|
            e.stopPropagation();
 | 
						|
            dropdown.classList.toggle("hidden");
 | 
						|
        });
 | 
						|
 | 
						|
        document.addEventListener("click", function () {
 | 
						|
            dropdown.classList.add("hidden");
 | 
						|
        });
 | 
						|
    });
 | 
						|
</script>
 | 
						|
</register-block> |