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.

142 lines
4.5 KiB

11 months ago
<script setup lang="ts">
import { reactive, ref } from 'vue'
import {proCouponListApi, systemCouponListApi} from '~/server/activityApi'
import { PageQuery } from '~/types/global'
import {stringToBool} from "~/utils/util";
import ProductSeach from "~/components/productSeach.vue";
import {Search} from "@element-plus/icons-vue";
const route = useRoute()
const couponId = ref<number>(Number(<string>route.query.couponId)) //优惠券户id
const jumpType = ref<string>(<string>route.query.jumpType) //跳转1平台优惠券使用,2我的优惠券使用
const isUserReceive = ref<boolean>(stringToBool(<string>route.query.isUserReceive)) //是否已领取优惠券
const money = ref<string>(<string>route.query.money) //优惠券金额
const minPrice = ref<string>(<string>route.query.minPrice) //满足条件
//窗口的高度
const { getWindowHeight } = useScrollHeight()
const ScrollHeight = ref<number>(getWindowHeight() - 176-200 )
/**
* 列表
*/
const where = reactive<PageQuery>({
page: 1,
limit: 10,
couponId: couponId.value,
keyword: '',
userCouponId: couponId.value
})
const {
data: tableData,
refresh,
pending: listLoading,
} = await useAsyncData(async () => jumpType.value === '1' ? systemCouponListApi(where) : proCouponListApi(where), {
default: () => ({
list: [],
total: 0,
}),
})
// 分页数据
const pageChange = (e: number) => {
where.page = e
refresh()
}
//领券优惠券
const useMerchants = useMerchant()
const handleReceiveCoupon = async () => {
await useMerchants.onReceiveCoupon(couponId.value).then(() => {
isUserReceive.value = !isUserReceive.value
})
}
</script>
<template>
<div class="coupon_goods_list pt-20px">
<div class="wrapper_1200">
<div class="w-100% h-134px bg-#FFFFFF b-rd-16px px-20px py-20px">
<div class="flex-between-center mb-20px px-20px">
<div class="text-#666 text-14px">共搜索到 {{tableData.total}} 件符合条件的商品</div>
<el-input
@keyup.enter="refresh"
v-model="where.keyword"
style="width: 220px;font-size: 12px;"
placeholder="搜索商品名称"
>
<template #prefix>
<el-icon class="el-input__icon"><search /></el-icon>
</template>
</el-input>
</div>
<div class="w-100% h-50px bg-#FFF4F4 b-rd-8px px-20px flex-between-center mb-20px">
<div class="flex-y-center">
<span class="text-14px text-#282828 mr-10px" style="font-weight: 400">以下商品适用于</span>
<span class="px-10px py-7px text-14px lh-14px font-color relative borderSolE9 b-rd-4px">
<span class="text-14px font-color">{{minPrice}}{{money}}</span>
<span class="roll left-roll"></span>
<span class="roll right-roll"></span>
</span>
</div>
<div @click="handleReceiveCoupon" class="w-86px h-30px handleBtn lh-29px text-12px" :class="isUserReceive?'':'cursors'">{{isUserReceive ? '已领取' : '立即领取'}}</div>
</div>
</div>
<div v-loading="listLoading">
<div v-if="tableData.total>0">
<product-seach :list="tableData.list"></product-seach>
<div class="acea-row row-middle mt-5px pb-10px">
<el-pagination
background
layout="prev, pager, next"
:total="tableData.total"
class="page-item"
:page-size="where.limit"
:current-page="where.page"
@update:current-page="pageChange"
/>
</div>
</div>
<div v-else class="w-100%" :style="{ height: ScrollHeight + 'px' }">
<empty-page title="暂无优惠券哟~">
<template v-slot:emptyImage>
<img src="@/assets/images/wuyouhui.png" />
</template>
</empty-page>
</div>
</div>
</div>
</div>
</template>
<style scoped lang="scss">
.coupon_goods_list {
:deep(.el-input__wrapper) {
border: none !important;
box-shadow: none !important;
}
:deep(.el-input) {
--el-fill-color-blank: #f7f7f7 !important;
--el-border-radius-base: 20px;
}
}
.roll {
position: absolute;
width:8px;
height: 8px;
border-radius: 50%;
top: 50%;
transform: translateY(-50%);
background-color: #FFF4F4;
border: 1px solid #E93323;
&.left-roll {
left: -3px;
border-left-color: #fff!important;
}
&.right-roll {
right: -3px;
border-right-color: #fff!important;
}
}
</style>