s-coupon-card.vue 2.52 KB
<!-- 装修用户组件:用户卡券 -->
<template>
  <view
    class="ss-coupon-menu-wrap ss-flex ss-col-center"
    :style="[bgStyle, { marginLeft: `${data.space}px` }]"
  >
    <view
      class="menu-item ss-flex-col ss-row-center ss-col-center"
      v-for="item in props.list"
      :key="item.title"
      @tap="sheep.$router.go(item.path, { type: item.type })"
      :class="item.type === 'all' ? 'menu-wallet' : 'ss-flex-1'"
    >
      <image class="item-icon" :src="sheep.$url.static(item.icon)" mode="aspectFit"></image>
      <view class="menu-title ss-m-t-28">{{ item.title }}</view>
    </view>
  </view>
</template>

<script setup>
  /**
   * 装修组件 - 优惠券菜单
   */
  import sheep from '@/sheep';
  import { computed } from 'vue';

  // 接收参数
  const props = defineProps({
    list: {
      type: Array,
      default() {
        return [
          {
            title: '已领取',
            value: '0',
            icon: '/static/img/shop/order/nouse_coupon.png',
            path: '/pages/coupon/list',
            type: 'geted',
          },
          {
            title: '已使用',
            value: '0',
            icon: '/static/img/shop/order/useend_coupon.png',
            path: '/pages/coupon/list',
            type: 'used',
          },
          {
            title: '已失效',
            value: '0',
            icon: '/static/img/shop/order/out_coupon.png',
            path: '/pages/coupon/list',
            type: 'expired',
          },
          {
            title: '领券中心',
            value: '0',
            icon: '/static/img/shop/order/all_coupon.png',
            path: '/pages/coupon/list',
            type: 'all',
          },
        ];
      },
    },
    // 装修数据
    data: {
      type: Object,
      default: () => ({}),
    },
    // 装修样式
    styles: {
      type: Object,
      default: () => ({}),
    },
  });
  // 设置背景样式
  const bgStyle = computed(() => {
    // 直接从 props.styles 解构
    const { bgType, bgImg, bgColor } = props.styles;

    // 根据 bgType 返回相应的样式
    return {
      background: bgType === 'img' ? `url(${bgImg}) no-repeat top center / 100% 100%` : bgColor,
    };
  });
</script>

<style lang="scss" scoped>
  .ss-coupon-menu-wrap {
    .menu-item {
      height: 160rpx;

      .menu-title {
        font-size: 24rpx;
        line-height: 24rpx;
        color: #333333;
      }

      .item-icon {
        width: 44rpx;
        height: 44rpx;
      }
    }

    .menu-wallet {
      width: 144rpx;
    }
  }
</style>