Files
fabric_trade_user/src/components/ui/CartMeterageFooter.vue
T

96 lines
1.9 KiB
Vue
Raw Normal View History

<script setup lang="ts">
import { formatMeterage } from '@/utils/format'
import IconCart from '@/components/icons/IconCart.vue'
defineProps<{
totalMeterage: number
itemCount?: number
}>()
defineEmits<{
click: []
}>()
</script>
<template>
<div class="cart-meterage-footer">
<div class="cart-meterage-footer__info">
<span class="cart-meterage-footer__label">کل متراژ</span>
<span class="cart-meterage-footer__value">{{ formatMeterage(totalMeterage) }}</span>
</div>
<button
type="button"
class="cart-meterage-footer__btn"
aria-label="مشاهده سبد"
@click="$emit('click')"
>
<IconCart :size="22" />
<span v-if="itemCount" class="cart-meterage-footer__badge">{{ itemCount }}</span>
</button>
</div>
</template>
<style scoped>
.cart-meterage-footer {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
padding: 12px 16px;
background: var(--color-primary);
color: #fff;
}
.cart-meterage-footer__info {
display: flex;
flex-direction: column;
gap: 2px;
}
.cart-meterage-footer__label {
font-size: 0.75rem;
opacity: 0.85;
}
.cart-meterage-footer__value {
font-size: 1rem;
font-weight: 700;
}
.cart-meterage-footer__btn {
position: relative;
width: 44px;
height: 44px;
border: none;
border-radius: var(--radius-sm);
background: rgba(255, 255, 255, 0.15);
color: #fff;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: background 0.15s;
}
.cart-meterage-footer__btn:hover {
background: rgba(255, 255, 255, 0.25);
}
.cart-meterage-footer__badge {
position: absolute;
top: -4px;
left: -4px;
min-width: 18px;
height: 18px;
padding: 0 4px;
border-radius: 999px;
background: var(--color-danger);
color: #fff;
font-size: 0.625rem;
font-weight: 700;
display: flex;
align-items: center;
justify-content: center;
}
</style>