ServiceListFour.vue 7.5 KB
/*
    一行一个,图片在左
 */
<template>
  <div class="tab_content abroad" :class="notab?'notab':''">
    <template v-for="(item,index) in list">
      <div class="uni_item" :key="index" @click="handleUniDetail(item)">
        <div class="img_box">
          <!-- <img :loading="defaultImg"  v-lazy="item.coverUrl" alt=""> -->
          <img :src="item.coverUrl?item.coverUrl:defaultImg" alt="">
          <div class="bottom">
            <span class="count">
              <van-icon name="eye-o" /> {{item.read_count}}
            </span>
          </div>
          <span class="pintuan_tag" v-if="item.minPeopleCount<=item.applyCount">已成团</span>
        </div>
        <div class="content">
          <div>
            <p class="title">{{item.course_name}}</p>
            <!-- <p class="des">{{item.course_info}}</p> -->
            <p class="active_time" v-if="item.startDate==item.endDate">活动时间:{{item.startDate}} {{item.week}}</p>
            <p class="active_time" v-else>活动时间:{{item.startDate}}-{{item.endDate}}</p>
            <div class="tag_box">
              <template v-for="(tag,index2) in item.course_labels">
                <span class="tag" v-if="tag" :key="index2">{{tag}}</span>
              </template>
            </div>
          </div>
          <div class="flex_box">
            <div>
              <p class="address">{{item.cityAddress}}{{item.cityAddress&&item.areaAddress?'·':''}}{{item.areaAddress}}</p>
              <p class="price free"> <span class="limit">{{item.minPeopleCount}}{{item.unitName}}成团</span></p>
            </div>
            <div class="pintuan" :class="item.applyCount>=item.stockCount?'disabled':''">
              <p>{{item.applyCount>=item.stockCount?'已满团':'拼团中'}}</p>
              <span class="span1">已报名{{item.applyCount}}</span>
              <span class="span2">/{{item.stockCount}}</span>
            </div>
          </div>
        </div>
      </div>
    </template>
    <van-empty v-if="list.length==0" description="暂无活动" />
    <about-des></about-des>

  </div>
</template>
<script>
import AboutDes from './aboutDes.vue'
export default {
  props: {
    list: {
      type: Array,
      default: []
    },
    notab: {
      type: Boolean,
      default: false
    }
  },
  data () {
    return {
      active: 0,
      defaultImg: require('@/assets/service/defCoure.jpg'),
    }
  },
  methods: {
    handleUniDetail (item) {
      this.$router.push({ name: 'ServiceAbroadDetail', query: { courseId: item.id } })
    },
  },
  components: {
    AboutDes
  }
}
</script>
<style lang="scss" scoped>
.tab_content {
  // height: calc(100vh - 360px - 196px);
  box-sizing: border-box;
  // overflow: auto;
  // &.notab {
  //   height: calc(100vh - 196px);
  // }
}
.tab_btn_box {
  .tab_btn {
    width: 178px;
    height: 52px;
    border-radius: 16px;
    border: none;
    background: rgba(255, 255, 255, 0.36);
    color: #666666;
    padding: 0;
    margin-right: 16px;
    &.active {
      background: #ffffff;
      color: #4092ff;
    }
  }
}
.abroad {
  padding: 18px 0;
  padding-bottom: 146px;
  .padding_box {
    padding: 0 28px;
    padding-bottom: 16px;
  }
  .line {
    width: 100%;
    height: 16px;
    background: #f5f6fa;
  }
  .uni_item {
    position: relative;
    margin-top: 16px;
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    width: 694px;
    margin-top: 24px;
    padding: 0 28px;
    .img_box {
      position: relative;
      border-radius: 16px;
      overflow: hidden;
      width: 273px;
      img {
        width: 364px;
        height: 273px;
        margin-left: -45.5px;
      }
      .bottom {
        position: absolute;
        bottom: 0;
        left: 0;
        color: #fff;
        height: 64px;
        display: flex;
        align-items: center;
        justify-content: space-between;
        width: 100%;
        box-sizing: border-box;
        padding: 0 20px;
        background: linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.5));
        .count {
          font-size: 24px;
        }
      }
      .pintuan_tag {
        display: block;
        width: 116px;
        // height: 38px;
        background: #f64c37;
        border-top-left-radius: 16px;
        border-bottom-right-radius: 16px;
        font-size: 24px;
        color: #fff;
        line-height: 38px;
        text-align: center;
        position: absolute;
        top: 0;
      }
    }
    .content {
      width: 400px;
      height: 276px;
      display: flex;
      flex-direction: column;
      justify-content: space-between;
      .title {
        font-size: 28px;
        .status {
          font-size: 20px;
          display: inline-block;
          width: 78px;
          line-height: 32px;
          border-radius: 6px;
          text-align: center;
          vertical-align: top;
          margin-top: 4px;
          margin-right: 10px;
        }
        .status1 {
          background: #94d3f4;
          color: #136894;
        }
        .status2 {
          background: #ffe9b1;
          color: #a15b2b;
        }
        .status3 {
          background: #ff3909;
          color: #ffffff;
        }
      }
      .des {
        font-size: 24px;
        color: #999999;
        margin-top: 10px;
      }
      .active_time {
        font-size: 24px;
      }
      .address {
        font-size: 24px;
        margin-top: 10px;
        white-space: nowrap;
      }
      .tag_box {
        .tag {
          display: inline-block;
          margin-top: 10px;
          margin-right: 10px;
          color: #4092ff;
          font-size: 20px;
          border-radius: 4px;
          border: 2px solid #4092ff;
          padding: 0px 6px;
        }
      }
      .price {
        font-size: 32px;
        font-weight: bold;
        margin-top: 12px;
        color: #f64c37;
        .icon {
          font-size: 24px;
          color: #f64c37;
        }
        .tint {
          font-size: 22px;
          font-weight: normal;
          color: #909399;
        }
        .limit {
          font-size: 22px;
          font-weight: normal;
          color: #333333;
        }
      }
      .free {
        font-size: 28px;
      }
      .flex_box {
        display: flex;
        justify-content: space-between;
        align-items: center;
      }
      .pintuan {
        width: 158px;
        height: 68px;
        background: #f64c37;
        border-radius: 8px;
        color: #fff;
        font-size: 20px;
        text-align: center;
        font-weight: bold;
        line-height: 30px;
        padding: 6px 0;
        box-sizing: border-box;
        &.disabled {
          background: #dadada;
        }
        .span2 {
          font-weight: initial;
        }
      }
    }
  }
}
</style>
<style lang="scss">
// 长辈版
.elder {
  .abroad {
    .uni_item {
      .content {
        height: auto;
        .title {
          font-size: 40px;
        }
        .active_time {
          font-size: 32px;
        }
        .tag_box {
          .tag {
            font-size: 32px;
          }
        }
        .address {
          font-size: 40px;
        }
        .price {
          font-size: 40px;
          .icon {
            font-size: 40px;
          }
          .tint {
            font-size: 40px;
          }
          .limit {
            font-size: 34px;
          }
        }
        .flex_box {
          display: block;
        }
        .pintuan {
          width: auto;
          height: auto;
          font-size: 34px;
          line-height: 44px;
        }
      }
      .img_box .bottom .count {
        font-size: 34px;
      }
    }
  }
}
</style>