paxton-front/pages/cart.vue
alsaze 6883d1cfbd
All checks were successful
Deploy / build (push) Successful in 54s
создаю телегу товаров
2025-10-09 18:46:32 +03:00

80 lines
1.8 KiB
Vue

<template>
<div class="cart">
<div class="cart__items">
<div
v-for="cartItem in cart?.line_items"
:key="cartItem.variation_id"
>
<CartItem :cart-item="cartItem" />
</div>
</div>
<div>
<div class="cart__create-order">
<div>{{ `Товары: ${cart?.line_items?.length}` }}</div>
<div>{{ `Сумма: ${cart?.line_items?.length}` }}</div>
<UButton class="w-100 d-flex" @click="createOrder">
Перейти к оформлению
</UButton>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import type { IBspb } from '~/server/shared/types/bspb'
import { usePostOrdersCreate } from '~/api/mutations/wp/usePostOrdersCreate'
import { useCart } from '~/composables'
const router = useRouter()
const { cart } = useCart()
const { mutateAsync } = usePostOrdersCreate()
const createOrder = async () => {
router.push(`/order/delivery`)
await mutateAsync({ line_items: cart.value.line_items })
const { data } = await useFetch<IBspb>('/api/bspb')
const redirectUrl = `${data?.value?.order?.hppUrl}?orderId=${data?.value?.order?.id}&password=${data.value?.order?.password}`
window.open(redirectUrl, '_blank')
}
</script>
<style lang="scss">
@use '~/assets/scss/utils' as *;
.cart {
margin-top: 120px;
margin-inline: auto;
max-width: 1200px;
display: flex;
flex-direction: row;
justify-content: space-between;
@include mobile {
margin-top: 20px;
flex-direction: column;
}
&__items {
display: flex;
flex-direction: column;
gap: 16px;
}
&__create-order {
box-shadow: 1px 1px 8px 0 black;
border-radius: 10px;
padding: 10px;
max-width: 360px;
display: inline-flex;
flex-direction: column;
gap: 20px;
}
}
</style>