Browse Source
- Added Checkout and Payment pages to handle user authentication and order processing. - Introduced MockPayPalButton for simulating payment during development. - Updated CartSheet and CartSidebar components to navigate to the new checkout page. - Enhanced Cart UI with responsive design for mobile and desktop views. - Implemented order confirmation and success pages to provide feedback after payment completion. These changes complete the checkout and payment functionality, improving the overall user experience and ensuring a seamless transition from cart to order confirmation.main
10 changed files with 169 additions and 80 deletions
@ -0,0 +1,106 @@ |
|||
<script setup lang="ts"> |
|||
/** |
|||
* Mock PayPal Button Component |
|||
* |
|||
* Simulates a PayPal payment for development/testing purposes. |
|||
* In production, this would be replaced with the real PayPal SDK integration. |
|||
* |
|||
* Features: |
|||
* - Displays mock PayPal button with branding |
|||
* - Simulates 2-second payment processing |
|||
* - Emits success event after "payment" completes |
|||
* - Shows loading state during processing |
|||
* - Displays amount to be paid |
|||
*/ |
|||
|
|||
interface Props { |
|||
orderId: string |
|||
amount: number |
|||
} |
|||
|
|||
const props = defineProps<Props>() |
|||
|
|||
const emit = defineEmits<{ |
|||
success: [] |
|||
}>() |
|||
|
|||
const isProcessing = ref(false) |
|||
|
|||
/** |
|||
* Simulate PayPal payment |
|||
* In production, this would integrate with PayPal SDK |
|||
*/ |
|||
async function handlePayment() { |
|||
isProcessing.value = true |
|||
|
|||
try { |
|||
// Simulate payment processing delay (2 seconds) |
|||
await new Promise((resolve) => setTimeout(resolve, 2000)) |
|||
|
|||
// In production: Call PayPal API to process payment |
|||
// const result = await processPayPalPayment(props.orderId, props.amount) |
|||
|
|||
// Emit success event |
|||
emit('success') |
|||
} catch (error) { |
|||
console.error('Mock payment failed:', error) |
|||
// In production: Show error message to user |
|||
} finally { |
|||
isProcessing.value = false |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<template> |
|||
<div class="space-y-4"> |
|||
<!-- Payment Amount Info --> |
|||
<div class="flex items-center justify-between p-4 bg-white/5 rounded-lg border border-white/10"> |
|||
<span class="text-white/80">Zu zahlen:</span> |
|||
<span class="text-xl font-bold text-experimenta-accent"> |
|||
{{ |
|||
new Intl.NumberFormat('de-DE', { |
|||
style: 'currency', |
|||
currency: 'EUR', |
|||
}).format(amount) |
|||
}} |
|||
</span> |
|||
</div> |
|||
|
|||
<!-- Mock PayPal Button --> |
|||
<button |
|||
@click="handlePayment" |
|||
:disabled="isProcessing" |
|||
class="w-full relative overflow-hidden bg-[#0070ba] hover:bg-[#005ea6] disabled:bg-[#0070ba]/50 disabled:cursor-not-allowed text-white font-bold py-4 px-6 rounded-lg transition-colors shadow-lg" |
|||
> |
|||
<span v-if="!isProcessing" class="flex items-center justify-center gap-3"> |
|||
<!-- PayPal Logo SVG --> |
|||
<svg |
|||
class="w-6 h-6" |
|||
viewBox="0 0 24 24" |
|||
fill="currentColor" |
|||
xmlns="http://www.w3.org/2000/svg" |
|||
> |
|||
<path |
|||
d="M20.067 8.478c.492.88.556 2.014.3 3.327-.74 3.806-3.276 5.12-6.514 5.12h-.5a.805.805 0 00-.794.683l-.94 5.96-.267 1.69a.404.404 0 01-.4.342H7.55a.48.48 0 01-.474-.555l.912-5.782.916-5.816a.959.959 0 01.948-.812h1.964c4.332 0 7.299-1.775 8.06-6.145a4.803 4.803 0 00-.808-4.014 6.186 6.186 0 00-1.636-1.293A7.943 7.943 0 0013.784 0H6.732A.959.959 0 005.784.812L2.076 23.235a.48.48 0 00.474.555h3.952a.959.959 0 00.948-.812l.912-5.782h1.74c4.919 0 8.74-2.016 9.965-7.718z" |
|||
/> |
|||
</svg> |
|||
<span>Mit PayPal bezahlen (Mock)</span> |
|||
</span> |
|||
<span v-else class="flex items-center justify-center gap-2"> |
|||
<div |
|||
class="animate-spin rounded-full h-5 w-5 border-2 border-white/20 border-t-white" |
|||
/> |
|||
Zahlung wird verarbeitet... |
|||
</span> |
|||
</button> |
|||
|
|||
<!-- Mock Info --> |
|||
<div class="text-center"> |
|||
<p class="text-xs text-white/40 italic"> |
|||
Dies ist ein Mock-PayPal-Button für Entwicklungszwecke. |
|||
<br /> |
|||
Die Zahlung wird simuliert und ist nicht echt. |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
Loading…
Reference in new issue