<template>
  <div class="return-container">
    <div
      class="wrapper"
      ref="returnWrapper">
      <ul>
        <li
          :class="{'static': isRefresh}"
          class="pulldown-wrapper">
          <van-loading
            v-show="isRefresh"
            size="24px"
            type="spinner">加载中...
          </van-loading>
          <div
            v-show="!isRefresh"
            class="van-loading">
          <span
            class="van-loading__text">下拉刷新</span>
          </div>
        </li>
        <li
          v-for="(item, index) in list"
          :key="index"
          class="list-item">
          <div class="wrap">
            <div>
              <p class="avatar">
                <img
                  :src="item.user_head_img_url"
                  alt="">
              </p>
              <p class="user">{{ item.user_nickname }}</p>
              <p class="shop">{{ item.order_title }}</p>
            </div>
            <p class="money">￥{{ item.order_commission | fen2Yuan }}</p>
          </div>
          <p class="date">佣金状态：{{ ['未结算', '已结算', '已退款'][item.commission_status] }}</p>
          <p class="date">创建时间：{{ item.created_at }}</p>
        </li>
        <li class="pullup-wrapper">
          <van-loading
            v-show="!finished"
            size="24px"
            type="spinner">加载中...
          </van-loading>
          <div
            v-show="finished"
            class="van-loading">
          <span
            class="van-loading__text">没有更多了</span>
          </div>
        </li>
      </ul>
    </div>
  </div>
</template>
<script>
import BScroll from 'better-scroll'
import { Toast, Loading } from 'vant'
import { apiMakeList } from './api'

export default {
  components: {
    'van-loading': Loading
  },
  data () {
    return {
      finished: false, // 所有数据是否加载完
      isRefresh: false, // 是否下拉刷新
      isFetchLock: false, // 接口调用加锁
      pagenum: 0,
      pagesize: 20,
      list: [],
      scroll: null
    }
  },
  activated () {
    if (!this.$route.meta.isUseCache) {
      this.finished = false
      this.isRefresh = false
      this.isFetchLock = false
      this.pagenum = 0
      this.pagesize = 20
      this.list = []
      this.scroll = null
      this.getList()
    } else {
      this.scroll && this.scroll.refresh()
    }
    this.$route.meta.isUseCache = false
  },
  methods: {
    goDetail (id) {},
    onRefresh () {
      this.pagenum = 0
      this.pagesize = 20
      this.finished = false
      this.isRefresh = true
      this.getList()
    },
    async getList () {
      if (this.finished) {
        return
      }
      if (this.isFetchLock) {
        return
      }
      this.isFetchLock = true
      this.pagenum++
      try {
        const { status, data, msg } = await apiMakeList({ page: this.pagenum, page_size: this.pagesize })
        if (status) {
          const { list } = data
          // 下拉刷新数据清空
          if (this.isRefresh) {
            this.isRefresh = false
            this.list = []
          }

          // 没有数据返回了
          if (Array.isArray(list) && !list.length) {
            this.finished = true
          }

          if (Array.isArray(list) && list.length) {
            // 总页数小于等于1页时
            if (list.length < this.pagesize) {
              this.finished = true
            }
            this.list = this.list.concat(list)

            this.$nextTick(() => {
              if (!this.scroll) {
                this.scroll = new BScroll(this.$refs.returnWrapper, {
                  click: true,
                  pullDownRefresh: {
                    threshold: 50, // 顶部下拉的距离
                    stop: 20 // 回弹停留的距离
                  },
                  pullUpLoad: {
                    threshold: -20
                  },
                  scrollbar: true
                })

                this.scroll.on('pullingDown', () => {
                  this.onRefresh()
                })

                this.scroll.on('pullingUp', () => {
                  this.getList()
                })
              } else {
                this.scroll.finishPullDown()
                this.scroll.finishPullUp()
                this.scroll.refresh()
              }
            })
          }
        } else {
          Toast(msg)
        }
        this.isFetchLock = false
      } catch (err) {
        this.isFetchLock = false
      }
    }
  },
  beforeDestroy () {
    this.scroll && this.scroll.destroy()
  },
  beforeRouteLeave (to, form, next) {
    if (['MarketingSave', 'MarketingReturn'].findIndex(item => item === to.name) > -1) {
      form.meta.isUseCache = true
    }
    next()
  }
}
</script>
<style lang="scss" scoped>
.return-container {
  position: absolute;
  left: 0;
  top: 56px;
  right: 0;
  bottom: 50px;
  background: #F7F6F9;
  overflow: hidden;
}

.wrapper {
  width: 100%;
  height: 100%;
  overflow: hidden;

  ul {
    display: flex;
    flex-direction: column;
    align-items: center;
    width: 100%;
    padding: 15px 0 102px;
  }
}

.pulldown-wrapper {
  position: absolute;
  left: 0;
  top: -43px;
  width: 100%;
  text-align: center;
  margin-bottom: 10px;

  &.static {
    position: static;
    left: 0;
    top: 0;
  }
}

.pullup-wrapper {
  width: 100%;
  text-align: center;
}

.list-item {
  width: 335px;
  background: #FFFFFF;
  box-shadow: 0 2px 4px 0 rgba(31, 49, 74, 0.12);
  border-radius: 10px;
  padding: 15px;
  margin-bottom: 16px;

  .wrap {
    display: flex;
    align-items: center;

    & > div {
      display: flex;
      align-items: center;
      width: 205px;
    }
  }

  .avatar {
    flex: 0 0 28px;
    width: 28px;
    height: 28px;
    border: 2px solid #FFFFFF;
    border-radius: 50%;
    overflow: hidden;

    img {
      display: block;
      width: 100%;
    }
  }

  .user,
  .shop {
    font-size: 20px;
    color: #1F314A;
    line-height: 28px;
    white-space: nowrap;
  }

  .user {
    max-width: 90px;
    margin: 0 8px 0 10px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  .shop {
    max-width: 69px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  .money {
    width: 100px;
    font-size: 18px;
    font-family: PingFangSC-Semibold, PingFang SC;
    font-weight: 600;
    color: #FA4A4A;
    line-height: 25px;
    white-space: nowrap;
    text-align: right;
  }

  .date {
    margin-top: 12px;
    font-size: 16px;
    color: #1F314A;
    line-height: 19px;
  }
}
</style>
