mixin.js 2.67 KB
import { directive, Swiper, SwiperSlide } from 'vue-awesome-swiper'
import 'swiper/css/swiper.css'
import api from '../../config/api'
import {funMixin} from '../../config/mixin'
import { mapGetters } from 'vuex'

export const commonMixin = {
  name: 'discountList',
  mixins: [funMixin],
  data () {
    return {
      value: 100,
      productData: {},
      count: [],
      timer: null
    }
  },
  props: {
    terminal: {
      type: Number,
      default: 4
    },
    typeId: {
      type: Number,
      default: 1
    },
    shopId: {
      type: Number,
      default: 0
    },
    componentContent: {
      type: Object
    }
  },
  components: {
    Swiper,
    SwiperSlide
  },
  directives: {
    swiper: directive
  },
  computed: {
    ...mapGetters([
      'discountNum'
    ]),
  },
  watch: {
    'discountNum': {
      handler(newVal, oldVal) {
        this.getData()
      },
      deep: true
    }
  },
  mounted() {
      this.getData()
  },
  methods: {
    getData() {
      const _ = this
      if(_.componentContent.discountId){
        this.beforeGetData()
        var _url= ''
        if(this.typeId === 1){
          _url= `${api.getMinDiscount}?ids=${_.componentContent.discountId}`
        }
        if(this.typeId === 3){
          _url= `${api.getDiscounts}?shopId=${_.shopId}&ids=${_.componentContent.discountId}`
        }
        const params = {
          method: 'GET',
          url: _url,
        }
        this.sendReq(params, (res) => {
          _.afterGetData()
          if(res.data.length> 0){
            _.productData = res.data[0]
            // 只有进行中和未开始活动, 用倒计时
            if(_.productData.state !==2) {
              this.timer = setInterval(()=>{
                _.getTime(_.productData)
              }, 1000)
            }
          }
        },(err)=>{
          _.afterGetData()
        })
      } else {
        _.productData = {
          products:[]
        }
      }
    },
    getTime(info) {
      const date = new Date().getTime()
      const startTime = new Date(info.startTime.replace(/-/g,'/')).getTime()
      const endTime = new Date(info.endTime.replace(/-/g,'/')).getTime()
      if(startTime > date) {
        this.countDown(startTime-date,true) // 未开始
      } else {
        this.countDown(endTime-date) // 进行中
      }

    },
    countDown(time, isStart) {
      const fn = (v) =>  v < 10 ? `0${v}` : v
      const t = parseInt(time / 1000)
      const text = isStart ? '开始' : '结束'
      const hour = parseInt(t / 3600)
      const min = parseInt((t % 3600) / 60)
      const s = t % 60
      this.count = [text, fn(hour), fn(min), fn(s)]
    }
  },
  beforeDestroy() {
    clearInterval(this.timer)
  }
}