You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

107 lines
3.0 KiB

11 months ago
<script setup lang="ts">
import useDialog from "~/composables/useDialog";
import { getCouponTime } from '~/utils/util'
import {toRefs, reactive} from "vue";
import {couponReceiveApi} from "~/server/merchantApi";
import feedback from '~/utils/feedback'
const props = defineProps({
//列表数据
productId: {
type: Number,
default: 0,
},
})
const { productId } = toRefs(props)
const { bool: dialogVisibleCoupon, DialogOpen, DialogClose } = useDialog()
//打开
defineExpose({ DialogOpen })
//关闭
const nuxtApp = useNuxtApp()
const handleCloseCoupon = ()=>{
DialogClose()
nuxtApp.$onHandlerCloseCoupon()
}
/**
* 我的优惠券列表
*/
import { PageQuery } from '~/types/global'
import {couponListApi} from "~/server/goodsApi";
const where = reactive<PageQuery>({
page: 1,
limit: 50,
productId: productId?.value,
category: 0
})
const { data: coupon, pending: listLoading } = await useAsyncData(async () => couponListApi(where), {
default: () => ({
list: [],
total: 0,
}),
})
//领取优惠券
const handleReceiveCoupon = async (item: any) => {
if (item.isUse) return
listLoading.value = true
try {
await couponReceiveApi(item.id)
feedback.msgSuccess('领取成功')
item.isUse = !item.isUse
listLoading.value = false
} catch (e) {
listLoading.value = false
}
}
</script>
<template>
<el-drawer
:append-to-body="false"
modal-class="receiveCouponDrawer"
v-model="dialogVisibleCoupon"
direction="rtl"
size="280px"
:modal="false"
:before-close="handleCloseCoupon"
>
<template #header>
<h4>优惠券</h4>
</template>
<template #default>
<div v-loading="listLoading" v-if="dialogVisibleCoupon" class="receiveCoupon mt-15px">
<div v-for="(item,index) in coupon.list"
@click="handleReceiveCoupon(item)" :key='index' class="receiveCouponList acea-row cursors mb-20px">
<div class="w-200px text-#fff pl-20px pt-10px">
<div class="text-12px mb-10px"><span class="oppoSans-M"></span><span class="text-30px mr-10px lh-30px dinProSemiBold">{{item.money}}</span><span class="lh-12px"> {{item.minPrice}} 可用</span></div>
<div class="text-12px mb-9px line2 w-177px">{{item.name}}</div>
<div v-if="item.isFixedTime" class="text-12px">{{ getCouponTime(item.useStartTimeStr, item.useEndTimeStr) }}</div>
<div v-else class="text-12px">{{ '领取后' + item.day + '天内可用' }}</div>
</div>
<div class="w-50px flex-center">
<div class="w-20px h-80px bg-#fff b-rd-12px text-center font-color text-12px flex-center verticalClass">{{item.isUse?'已领取':'立即领取'}}</div>
</div>
</div>
</div>
</template>
</el-drawer>
</template>
<style scoped lang="scss">
:deep(.el-divider--horizontal){
margin: 20px 0 30px 0 !important;
}
:deep(.el-divider__text){
--el-bg-color:#F5F5F5;
}
.receiveCouponList{
width: 250px;
height: 116px;
background-image: url("@/assets/images/yhq.png");
}
</style>