my_coupon.vue 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <template>
  2. <div class="w-full min-h-[70vh] bg-page pt-6">
  3. <div class="main-container flex justify-between">
  4. <sidebar></sidebar>
  5. <el-card class="box-card flex-1 ml-4" shadow="never" >
  6. <el-tabs v-model="activeName" class="demo-tabs" @tab-change="handleClick">
  7. <el-tab-pane :label="t('unused')" name="1"></el-tab-pane>
  8. <el-tab-pane :label="t('hasUsed')" name="2"></el-tab-pane>
  9. <el-tab-pane :label="t('expired')" name="3"></el-tab-pane>
  10. </el-tabs>
  11. <div class="min-h-[300px]" v-loading="couponTableData.loading">
  12. <div class="flex flex-wrap" v-if="couponTableData.data.length && !couponTableData.loading" >
  13. <template v-for="(item,index) in couponTableData.data" :key="index">
  14. <div class="w-[300px] h-[150px] mb-[15px] box-shadow flex" :class="{'mr-[15px]': (index + 1) % 3}">
  15. <div class="pl-[14px] flex-1">
  16. <div class="w-[62px] h-[24px] leading-[24px] text-[14px] bg-[rgba(233,51,35,.1)] text-center text-[var(--el-color-primary)]">{{item.type_name}}</div>
  17. <div class="mt-[14px] flex items-center">
  18. <div class="text-[16px] text-[var(--el-color-primary)] mr-[14px]">
  19. <span class="price-font">¥</span>
  20. <span class="text-[32px] font-600 price-font">{{item.coupon_price}}</span>
  21. </div>
  22. <div>
  23. <div class="text-[#282828] max-w-[107px] truncate mb-[6px]">{{item.title}}</div>
  24. <div class="text-[#969696] text-[14px]">
  25. <span v-if="item.min_condition_money === '0.00'">无门槛使用</span>
  26. <span v-else>满{{ item.coupon_min_price }}元可用</span>
  27. </div>
  28. </div>
  29. </div>
  30. <div class="mt-[10px] text-[14px] text-[#282828] leading-[22px] truncate max-w-[220px]">适用店铺:{{item.site_name}}</div>
  31. <div class="mt-[10px] text-[12px] text-[#969696] ">
  32. <div v-if="item.valid_type == 1">领取之日起<span>{{ item.length || '' }}</span>天内有效</div>
  33. <div v-else> 有效期至<span>{{ item.expire_time ? item.expire_time.slice(0, 10) : '' }}</span></div>
  34. </div>
  35. </div>
  36. <div v-if="activeName == 1" class="w-[52px] px-[18px] text-[16px] text-[#fff] cursor-pointer flex items-center leading-[24px] bg-[var(--el-color-primary)]" @click="toUse(item)">
  37. 去使用
  38. </div>
  39. <div v-if="activeName == 2" class="w-[52px] px-[18px] text-[16px] text-[#fff] cursor-pointer flex items-center leading-[24px] bg-[#999]">
  40. 已使用
  41. </div>
  42. <div v-if="activeName == 3" class="w-[52px] px-[18px] text-[16px] text-[#fff] cursor-pointer flex items-center leading-[24px] bg-[#999]">
  43. 已过期
  44. </div>
  45. </div>
  46. </template>
  47. </div>
  48. <div class="flex items-center justify-center min-h-[300px] w-full" v-if="!couponTableData.data.length && !couponTableData.loading" >
  49. <el-empty :description="t('emptyTips')" :image-size="200" :image="img('static/resource/images/system/empty.png')"/>
  50. </div>
  51. </div>
  52. </el-card>
  53. </div>
  54. </div>
  55. </template>
  56. <script setup lang="ts">
  57. import { reactive, ref } from 'vue'
  58. import { getMyCouponList } from '@/addon/mall/api/coupon'
  59. import { useRouter } from 'vue-router'
  60. const router = useRouter()
  61. const activeName = ref('1')
  62. // 获取会员列表
  63. const couponTableData = reactive({
  64. page: 1,
  65. limit: 10,
  66. total: 0,
  67. loading: false,
  68. data: []
  69. })
  70. const loadCouponList = (page = 1) =>{
  71. couponTableData.page = page
  72. couponTableData.loading = true
  73. getMyCouponList({
  74. page: couponTableData.page,
  75. limit: couponTableData.limit,
  76. status: activeName.value
  77. }).then(res =>{
  78. couponTableData.loading = false
  79. couponTableData.total = res.data.total
  80. couponTableData.data = res.data.data
  81. })
  82. }
  83. loadCouponList()
  84. // 去使用
  85. const toUse = (data) =>{
  86. router.push({ path: '/goods/list', query: { coupon_id: data.coupon_id,site_id: data.site_id }})
  87. }
  88. // 切换状态
  89. const handleClick = (event) =>{
  90. activeName.value = event
  91. loadCouponList()
  92. }
  93. </script>
  94. <style lang="scss" scoped>
  95. .box-shadow{
  96. box-shadow: 0 3px 20px rgba(0,0,0,.08);
  97. }
  98. </style>